Unity/トラブル

Unity/トラブル

InspectorにScript の変更が反映されない

MonoDevelop でソースコードを変更したのにその変更が Unity の Inspector に反映されないことがある。

原因は単純に文法的にコードにミスがあるから。MonoDevelop は文法エラーを指摘してくれないのでよくわからない。

iOS 向けの Plugin を使ってネイティブの機能を呼びだそうと思ったら EntryPointNotFoundException が出て呼び出せない

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

Xcode project へ書き出してビルドすると library not found for -liPhone-lib が出る

Build Settings → Search Paths → Library Search Paths に

\"$(SRCROOT)/Libraries\"

を追加すると解決する。

ダブルクォートでいけるってことは SRCROOT に何か不味い文字が入っているということかな・・・

unity/trouble.txt · 最終更新: 2014-09-11 13:11 by ore