我已经看到很多使用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/
任何关于是否可能或如何做的指导或知识都将不胜感激。
编辑:
另一个问题。如果我搜索gameObject,我可以使用它来访问该实例吗?
答案 0 :(得分: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);
}