0

我已经看到很多使用 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/

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

编辑:

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

4

1 回答 1

0

你没有说你正在开发什么平台,但对于 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);
}
于 2013-06-10T22:45:44.317 回答