【问题标题】:Unity3D embedded Mono with UnityUnity3D 使用 Unity 嵌入 Mono
【发布时间】:2013-06-11 06:45:44
【问题描述】:

我已经看到很多使用 C++ 在我的 Unity C# 代码中调用静态方法的示例。然而,我还没有看到任何关于如何使用 C++ 调用单个实例的方法的示例。即而不是

public static void SomeMethod(
{
}

我真的很想做:

public void SomeMethod()
{
} 

我已经通过遵循一些教程设法使静态实现工作,但我很想知道底部方法是否可行。我试图添加一个定义来搜索类中的方法。

MonoMethod*     mono_method_desc_search_in_class (MonoMethodDesc *desc, MonoClass *klass);

但是我被告知从这里使用的单声道运行时找不到实现:http://www.reigndesign.com/blog/unity-native-plugins-os-x/

任何关于它是否可能或如何做的指导或知识将不胜感激。

编辑:

另一个问题。如果我搜索一个游戏对象,我可以使用它来访问实例吗?

【问题讨论】:

    标签: mono unity3d


    【解决方案1】:

    你没有说你正在为什么平台开发,但对于 iOS,有 UnitySendMessage 函数。我相信其他平台也有类似的实现。

    http://docs.unity3d.com/Documentation/Manual/PluginsForIOS.html

    从本机代码调用 C#/JavaScript

    Unity iOS 通过 UnitySendMessage 支持有限的本地到托管回调功能:

    UnitySendMessage("GameObjectName1", "MethodName1", "要发送的消息");

    参数必须是字符串,所以我使用JSON来发送更复杂的数据。

    或者,从 UnityEngine.Object 继承的所有内容都有一个 GetInstanceID() 方法,该方法保证是唯一的。使用它,您可以在 C# 中使用一个静态方法来保存收件人实例的字典,并且本机代码将始终传递一个整数 ID 来引用预期的收件人。

    static Dictionary<int, SomeClass> instanceDict = new Dictionary<...>();
    
    void Awake() {
      instanceDict.Add(GetInstanceID(), this);
    }
    
    void OnDestroy() {
      instanceDict.Remove(GetInstanceID());
    }
    
    public static void SomeMethod(int recipientID, float someValue) {
      instanceDict[recipientID].SomeMethod(someValue);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      • 2018-06-14
      相关资源
      最近更新 更多