MonoDevelop でソースコードを変更したのにその変更が Unity の Inspector に反映されないことがある。
原因は単純に文法的にコードにミスがあるから。MonoDevelop は文法エラーを指摘してくれないのでよくわからない。
Unity 4.5.3
原因は iOS Simulator で動かしているから。
plugin で呼び出すメソッドは Xcode の Project で RegisterMonoModules.cpp
というファイルに設定が記述される。
通常は
#include "RegisterMonoModules.h" extern bool gEnableGyroscope; extern "C" { typedef void* gpointer; typedef int gboolean; #if !(TARGET_IPHONE_SIMULATOR) const char* UnityIPhoneRuntimeVersion = "4.5.3f3"; void mono_dl_register_symbol (const char* name, void *addr); extern int mono_ficall_flag; void mono_aot_register_module(gpointer *aot_info); extern gboolean mono_aot_only; extern gpointer* mono_aot_module_Assembly_CSharp_info; // Assembly-CSharp.dll extern gpointer* mono_aot_module_Mono_Security_info; // Mono.Security.dll extern gpointer* mono_aot_module_System_info; // System.dll extern gpointer* mono_aot_module_UnityEngine_info; // UnityEngine.dll extern gpointer* mono_aot_module_mscorlib_info; // mscorlib.dll #endif // !(TARGET_IPHONE_SIMULATOR) void Shooting_Share(); void UnityNSObject_RetainObject(); void UnityNSObject_ReleaseObject(); void UnityNSError_Code(); void UnityNSError_Description(); void UnityNSError_Reason(); void UnityNSNotification_Name(); } void RegisterMonoModules() { gEnableGyroscope = false; #if !(TARGET_IPHONE_SIMULATOR) mono_aot_only = true; mono_ficall_flag = false; mono_aot_register_module(mono_aot_module_Assembly_CSharp_info); mono_aot_register_module(mono_aot_module_Mono_Security_info); mono_aot_register_module(mono_aot_module_System_info); mono_aot_register_module(mono_aot_module_UnityEngine_info); mono_aot_register_module(mono_aot_module_mscorlib_info); mono_dl_register_symbol("Shooting_Share", (void*)&Shooting_Share); mono_dl_register_symbol("UnityNSObject_RetainObject", (void*)&UnityNSObject_RetainObject); mono_dl_register_symbol("UnityNSObject_ReleaseObject", (void*)&UnityNSObject_ReleaseObject); mono_dl_register_symbol("UnityNSError_Code", (void*)&UnityNSError_Code); mono_dl_register_symbol("UnityNSError_Description", (void*)&UnityNSError_Description); mono_dl_register_symbol("UnityNSError_Reason", (void*)&UnityNSError_Reason); mono_dl_register_symbol("UnityNSNotification_Name", (void*)&UnityNSNotification_Name); #endif // !(TARGET_IPHONE_SIMULATOR) }
のようになっている。マクロで iPhone Simulator では設定が読み込まれないようになっている。 これをブロックの外に出してやって読み込まれるようにするととりあえず動く。しかし正常に動くかどうかはしらん
#include "RegisterMonoModules.h" extern bool gEnableGyroscope; extern "C" { typedef void* gpointer; typedef int gboolean; #if !(TARGET_IPHONE_SIMULATOR) const char* UnityIPhoneRuntimeVersion = "4.5.3f3"; void mono_dl_register_symbol (const char* name, void *addr); extern int mono_ficall_flag; void mono_aot_register_module(gpointer *aot_info); extern gboolean mono_aot_only; extern gpointer* mono_aot_module_Assembly_CSharp_info; // Assembly-CSharp.dll extern gpointer* mono_aot_module_Mono_Security_info; // Mono.Security.dll extern gpointer* mono_aot_module_System_info; // System.dll extern gpointer* mono_aot_module_UnityEngine_info; // UnityEngine.dll extern gpointer* mono_aot_module_mscorlib_info; // mscorlib.dll #endif // !(TARGET_IPHONE_SIMULATOR) void mono_dl_register_symbol (const char* name, void *addr); void Shooting_Share(); void UnityNSObject_RetainObject(); void UnityNSObject_ReleaseObject(); void UnityNSError_Code(); void UnityNSError_Description(); void UnityNSError_Reason(); void UnityNSNotification_Name(); } void RegisterMonoModules() { gEnableGyroscope = false; #if !(TARGET_IPHONE_SIMULATOR) mono_aot_only = true; mono_ficall_flag = false; mono_aot_register_module(mono_aot_module_Assembly_CSharp_info); mono_aot_register_module(mono_aot_module_Mono_Security_info); mono_aot_register_module(mono_aot_module_System_info); mono_aot_register_module(mono_aot_module_UnityEngine_info); mono_aot_register_module(mono_aot_module_mscorlib_info); mono_dl_register_symbol("Shooting_Share", (void*)&Shooting_Share); mono_dl_register_symbol("UnityNSObject_RetainObject", (void*)&UnityNSObject_RetainObject); mono_dl_register_symbol("UnityNSObject_ReleaseObject", (void*)&UnityNSObject_ReleaseObject); mono_dl_register_symbol("UnityNSError_Code", (void*)&UnityNSError_Code); mono_dl_register_symbol("UnityNSError_Description", (void*)&UnityNSError_Description); mono_dl_register_symbol("UnityNSError_Reason", (void*)&UnityNSError_Reason); mono_dl_register_symbol("UnityNSNotification_Name", (void*)&UnityNSNotification_Name); #endif // !(TARGET_IPHONE_SIMULATOR) mono_dl_register_symbol("Shooting_Share", (void*)&Shooting_Share); }
Build Settings → Search Paths → Library Search Paths に
\"$(SRCROOT)/Libraries\"
を追加すると解決する。
ダブルクォートでいけるってことは SRCROOT に何か不味い文字が入っているということかな・・・