2013-06-07 3 views
0

Я видел множество примеров вызова статических методов в коде Unity C# с использованием C++. Однако я не видел примеров того, как вызывать метод одного экземпляра с использованием C++. то есть, а неUnity3D embedded Mono with Unity

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

Вы не говорите, на какой платформе вы работаете, но для iOS есть функция UnitySendMessage. Я считаю, что существуют аналогичные реализации для других платформ.

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

Вызов C#/JavaScript назад из родного кода

Unity IOS поддерживает ограниченную родной-для управляемого функции обратного вызова с помощью UnitySendMessage:

UnitySendMessage ("GameObjectName1", "MethodName1" , «Сообщение для отправки»);

Параметр должен быть строкой, поэтому я использовал JSON для отправки более сложных данных.

В качестве альтернативы, все, что наследуется от UnityEngine.Object, имеет метод GetInstanceID(), который гарантированно будет уникальным. Используя это, вы можете иметь статический метод в C#, который хранит словарь экземпляров получателя, а собственный код всегда будет передавать идентификатор целого числа, чтобы обратиться к предполагаемому получателю.

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); 
}