【问题标题】:Can I call into C# from Unity iOS Plugin and get a return type?我可以从 Unity iOS 插件调用 C# 并获得返回类型吗?
【发布时间】:2015-07-27 03:18:24
【问题描述】:

我目前正在使用 UnitySendMessage(Class, Method, StringArg) 从我的 iOS 代码调用回 C#。

但是,我现在正在尝试实现一些需要该方法的返回值的东西。我正在实现一个 C# 代码可以使用的委托,它包装了本机 Objective-C 包装器。

UnitySendMessage 有 1 帧延迟并且是异步的,所以不适合这个。我可以/应该使用什么来代替?

【问题讨论】:

    标签: c# ios plugins unity3d wrapper


    【解决方案1】:

    从 iOS 代码调用 Unity C# 代码是异步调用,这意味着您不能有返回值。您可以做的是从 iOS 调用 Unity C# 方法,并为响应(返回值)从 Unity C# 调用 iOS 方法并在此 iOS 方法中执行您的返回值处理。

    它会更像:

    iOS (method1) ---- 数据 -----> C# (methodX)

    停止 iOS 端的任何处理

    C# (methodX) ---- 响应 -----> iOS (method2)

    对method2中的响应做一些处理

    【讨论】:

    • 嗯,如果我暂停等待,因为返回需要同步,我会冻结统一游戏吧?
    • 从 C# 调用方法到 iOS 可以阻止游戏。但是从 iOS 调用 C# 在 iOS 中总是异步等待不会阻塞游戏但是你不能从UnitySendMessage 获取返回值。您必须通过从 C# 调用另一个 iOS 方法来获取返回值。
    • 是的,但代表是严格同步的,所以我不能使用你的技术,我不认为?除非我错过了什么
    • 您打算在哪里使用代表?我不是在谈论使用委托,有一种从 C# 调用 iOS 方法的方法,尽管与 UnitySendMessage 有点不同。
    【解决方案2】:

    我还没有看到从本机代码调用非异步 Unity 的方法。

    我所做的与您的场景类似的方式是让 C# 每帧轮询本机代码,然后再次使用响应:

    Unity         Native
      |---GetInfo()--->|
    process            |
      |---Result()---->|
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-09
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      相关资源
      最近更新 更多