±¾´Î·ÖÏí×ܽᣬÆðÔ´ÓÚÌÚѶ×ÀÇòÏîÄ¿£¬µ«ÊDz»½ö½öÏÞÓÚÏîÄ¿±¾Éí¡£ËäÈ»»ùÓÚUnity3D£¬ºÜ¶à¶«Î÷ͬÑùÊÊÓÃÓÚCocos¡£±¾ÎÄ´ÓÒÔÏÂ10´óµã½øÐвûÊö£º
1.¼Ü¹¹Éè¼Æ
2..ÔÉú²å¼þ/ƽ̨½»»¥
3..°æ±¾Óë²¹¶¡
4..Óýű¾£¬»¹ÊDz»Óã¿ÕâÊÇÒ»¸öÎÊÌâ
5..×ÊÔ´¹ÜÀí
6..ÐÔÄÜÓÅ»¯
8...Òì³£ÓëCrash
8..ÊÊÅäÓë¼æÈÝ
9..µ÷ÊÔ¼°¿ª·¢¹¤¾ß
10..ÏîÄ¿ÔËÓª 
1.¼Ü¹¹Éè¼Æ
ºÃµÄ¼Ü¹¹ÀûÓôó¹æÄ£ÏîÄ¿µÄ¶àÈËÍŶӿª·¢ºÍ´úÂë¹ÜÀí£¬Ò²ÀûÓòéÕÒ´íÎóºÍºóÆÚά»¤¡£
1.¿ò¼ÜµÄÑ¡Ôñ£ºÐèÒª¸ù¾ÝÍŶӡ¢ÏîÄ¿À´½øÐÐÑ¡Ôñ£¬Ã»ÓÐ×îºÃµÄ¿ò¼Ü£¬Ö»ÓÐ×îºÏÊʵĿò¼Ü¡£
2.¿ò¼ÜµÄʹÓãºÍ³Ò»µÄ¿ò¼ÜÄܹ淶´ó¼ÒµÄÐÐΪ£¬»¥ÏàÖ®¼ä¿ÉÒÔ±È½ÏÆ½»¬Çл»£¬¿Éά»¤ÐÔ´ó´óÌáÉý¡£³ý´ËÖ®Í⣬»¹ÄÜ´úÂë½âñî¡£ÀýÈçStrangeIOCÊÇÒ»¸ö³¬ÇáÁ¿¼¶ºÍ¸ß¶È¿ÉÀ©Õ¹µÄ¿ØÖÆ·´×ª(IoC)¿ò¼Ü£¬×¨ÃÅΪC#ºÍUnity±àд¡£ÒÑÖª¹«Ë¾ÄÚ²¿Ê¹ÓÃStrangeIOC¿ò¼ÜµÄÓÎÏ·ÓУºÌÚѶ×ÀÇò¡¢»¶ÀÖÂ齫¡¢Ö²Îï´óÕ½½©Ê¬Online¡£<https://github.com/strangeioc/strangeioc>
ÒÀÀµ×¢È루Dependency Injection£¬¼ò³ÆDI£©£¬ÊÇÒ»¸öÖØÒªµÄÃæÏò¶ÔÏó±à³ÌµÄ·¨ÔòÀ´Ï÷¼õ¼ÆËã»ú³ÌÐòµÄñîºÏÎÊÌâ¡£ÒÀÀµ×¢È뻹ÓÐÒ»¸öÃû×Ö½Ð×ö¿ØÖÆ·´×ª£¨Inversion of Control£¬Ó¢ÎÄËõдΪIoC£©¡£ÒÀÀµ×¢ÈëÊÇÕâÑùÒ»¸ö¹ý³Ì£ºÓÉÓÚij¿Í»§ÀàÖ»ÒÀÀµÓÚ·þÎñÀàµÄÒ»¸ö½Ó¿Ú£¬¶ø²»ÒÀÀµÓÚ¾ßÌå·þÎñÀ࣬ËùÒÔ¿Í»§ÀàÖ»¶¨ÒåÒ»¸ö×¢Èëµã¡£ÔÚ³ÌÐòÔËÐйý³ÌÖУ¬¿Í»§À಻ֱ½ÓʵÀý»¯¾ßÌå·þÎñÀàʵÀý£¬¶øÊǿͻ§ÀàµÄÔËÐÐÉÏÏÂÎÄ»·¾³»òרÃÅ×é¼þ¸ºÔðʵÀý»¯·þÎñÀ࣬Ȼºó½«Æä×¢Èëµ½¿Í»§ÀàÖУ¬±£Ö¤¿Í»§ÀàµÄÕý³£ÔËÐС£¼´¶ÔÏóÔÚ±»´´½¨µÄʱºò£¬ÓÉÒ»¸öÔËÐÐÉÏÏÂÎÄ»·¾³»òרÃÅ×é¼þ½«ÆäËùÒÀÀµµÄ·þÎñÀà¶ÔÏóµÄÒýÓô«µÝ¸øËü¡£Ò²¿ÉÒÔ˵£¬ÒÀÀµ±»×¢Èëµ½¶ÔÏóÖС£ËùÒÔ£¬¿ØÖÆ·´×ªÊÇ£¬¹ØÓÚÒ»¸ö¶ÔÏóÈçºÎ»ñÈ¡ËûËùÒÀÀµµÄ¶ÔÏóµÄÒýÓã¬Õâ¸öÔðÈεķ´×ª¡£ 
StrangeIOC²ÉÓÃMVCS£¨Êý¾ÝÄ£ÐÍ Model£¬Õ¹Ê¾ÊÓͼ View£¬Âß¼¿ØÖÆ Controller£¬·þÎñService£©½á¹¹£¬Í¨¹ýÏûÏ¢/ÐźŽøÐн»»¥ºÍͨÐÅ¡£Õû¸öMVCS¿ò¼Ü¸úflashµÄrobotlegs»ù±¾Ò»Ö£¬£¨ºöÂÔÓïÑÔ²»Ò»Ñù£©ÏêϸµÄ²Î¿¼<http://www.cnblogs.com/skynet/archive/2012/03/21/2410042.html>¡£
1.Êý¾ÝÄ£ÐÍ Model£ºÖ÷Òª¸ºÔðÊý¾ÝµÄ´æ´¢ºÍ»ù±¾Êý¾Ý´¦Àí
2.չʾÊÓͼ View£ºÖ÷Òª¸ºÔðUI½çÃæÕ¹Ê¾ºÍ¶¯»±íÏֵĴ¦Àí
3.Âß¼¿ØÖÆ Controller£ºÖ÷Òª¸ºÔðÒµÎñÂß¼´¦Àí£¬
4.·þÎñService£ºÖ÷Òª¸ºÔð¶ÀÁ¢µÄÍøÂçÊÕ·¢ÇëÇóµÈµÄһЩ¹¦ÄÜ¡£
5.ÏûÏ¢/ÐźţºÍ¨¹ýÏûÏ¢/ÐźÅÈ¥½âñîModel¡¢View¡¢Controller¡¢ServiceÕâËÄÖÖÄ£¿é£¬ËûÃÇÖ®¼äͨ¹ýÏûÏ¢/ÐźŽøÐн»»¥¡£
6.°ó¶¨Æ÷Binder£º¸ºÔð°ó¶¨ÏûÏ¢´¦Àí¡¢½Ó¿ÚÓëʵÀý¶ÔÏó¡¢ViewÓëMediatorµÄ¶ÔÓ¦¹ØÏµ¡£
7.MVCS Context£º¿ÉÒÔÀí½âΪMVC¸÷¸öÄ£¿é´æÔÚµÄÉÏÏÂÎÄ£¬¸ºÔðMVC°ó¶¨ºÍʵÀýµÄ´´½¨¹¤×÷¡£
ÌÚѶ×ÀÇò¿Í»§¶ËÏîÄ¿¿ò¼Ü

8.´úÂëĿ¼µÄ×éÖ¯£ºÒ»°ã¿Í»§¶ËÓõñȽ϶àµÄMVC¿ò¼Ü£¬Ôõô»®·ÖĿ¼£¿
9.ÏȰ´ÒµÎñ¹¦ÄÜ»®·Ö£¬ÔÙ°´ÕÕ MVC À´»®·Ö¡£"µ°¸âÐÄÓï"¾ÍÊÇʹÓõÄÕâÖÖ·½Ê½¡£
10.ÏȰ´ MVC »®·Ö£¬ÔÙ°´ÕÕÒµÎñ¹¦ÄÜ»®·Ö¡£"D9"¡¢"±¦±¦¶·³¡"¡¢"ħ·¨»¨Ô°"¡¢"ÌÚѶ×ÀÇò"¡¢"»¶ÀÖÂ齫"ʹÓõÄÕâÖÖ·½Ê½¡£ 
¸ù¾ÝʹÓÃϰ¹ß£¬¿ÉÒÔ×ÔÐÐÑ¡Ôñ¡£¸öÈËÍÆ¼ö"ÏȰ´ÒµÎñ¹¦ÄÜ»®·Ö£¬ÔÙ°´ÕÕ MVC À´»®·Ö"£¬Ê¹µÃÄ£¿é¸ü¾Û½¹£¨¸ßÄÚ¾Û£©£¬µÚ¶þÖÖ·½Ê½ÓöàÁË·¢ÏÖËæ×ÅÏîÄ¿µÄÔËӪģ¿éÔö¶à£¬Ã»ÓеÚÒ»ÖÖÄÇôºÃά»¤¡£
1.UnityÏîĿĿ¼µÄ×éÖ¯£º½áºÏUnity¹æ¶¨µÄÒ»Ð©ÌØÊâµÄÓÃ;µÄÎļþ¼Ð£¬ÎÒÃǽ¨ÒéUnityÏîÄ¿Îļþ¼Ð×éÖ¯·½Ê½ÈçÏ¡£ 
ÆäÖУ¬PluginsÖ§³ÖPlugins/{Platform}ÕâÑùµÄÃüÃû¹æ·¶£º
1. Plugins/x86
2.Plugins/x86_64
3.Plugins/Android
4.Plugins/iOS
Èç¹û´æÔÚPlugins/{Platform}£¬Ôò¼ÓÔØPlugins/{Platform}Ŀ¼ÏµÄÎļþ£¬·ñÔò¼ÓÔØPluginsĿ¼Ïµģ¬Ò²¾ÍÊÇ˵£¬Èç¹û´æÔÚ{Platform}Ŀ¼£¬Plugins¸ùĿ¼ÏµÄDLLÊDz»»á¼ÓÔØµÄ¡£
ÁíÍ⣬×ÊÔ´×éÖ¯²ÉÓ÷ÖÎļþ¼Ð´æ´¢"³ÉÆ·×ÊÔ´"¼°"ÔÁÏ×ÊÔ´"µÄ·½Ê½´¦Àí£º·ÀÖ¹ÎÞ¹Ø×ÊÔ´²ÎÓë´ò°ü£¬RawResource¼´Ôʼ×ÊÔ´£¬Resource¼´³ÉÆ·×ÊÔ´¡£µ±È»²¢²»ÏÞÓÚRawResourceÕâÖÖÐÎʽ£¬ÆäËûUnity¹æ¶¨µÄÌØÊâÎļþ¼Ð¶¼¿ÉÒÔÕâÑù£¬ÀýÈçRaw Standard Assets¡£
¹«Ë¾×é¼þ
1..msdk£¨sns¡¢Ö§¸¶midas¡¢ÍÆË͵ÆËþ¡¢¼à¿ØBugly£©
2.apollo
3.apollo voice
4.xlua
ĿǰÎÒÃǵÄÌÚѶ×ÀÇò¡¢ËĹú¾üÆå¶¼½ÓÈëÁËapollo£¬µ«ÊÇÈç¹û·þÎñÆ÷²»²ÉÓÃapollo¿ò¼Ü£¬²»½¨Òé¿Í»§¶Ë½Óapollo£¬¶øÊÇÖ±½Ó½Ómsdk¼õÉÙ¶þ´Î·â×°ÐÅÏ¢µÄ¶ªÊ§ºÍ´øÀ´µÄ´íÎ󣬷½±ãÒÔºóÉý¼¶Î¬»¤£¬²¢ÇÒ¼õÉÙµ¼ÈëÎÞÓõĴúÂë¡£
µÚÈý·½²å¼þÑ¡ÐÍ
1.NGUI
2.DoTween
3.GIF
4.GAF
5. VectrosityScripts
6. PoolManager
7. Mad Level Manger
2.ÔÉú²å¼þ/ƽ̨½»»¥
ËäÈ»´ó¶àʱºòʹÓÃUnity3D½øÐÐÓÎÏ·¿ª·¢Ê±£¬Ö»ÐèҪʹÓÃC#½øÐÐÂß¼±àд¡£µ«ÓÐʱºò²»¿É±ÜÃâµÄÐèҪʹÓúͱàдÔÉú²å¼þ£¬ÀýÈçһЩµÚÈý·½²å¼þÖ»ÌṩC/C++ÔÉú²å¼þ¡¢¸´ÓÃÒÑÓеÄC/C++Ä£¿éµÈ¡£ÓÐһЩ¹¦ÄÜÊÇUnity3DʵÏÖ²»ÁË£¬±ØÐëÒªµ÷ÓÃAndroid/iOSÔÉú½Ó¿Ú£¬±ÈÈç»ñÈ¡ÊÖ»úµÄÓ²¼þÐÅÏ¢£¨UnityEngine.SystemInfoûÓÐÌṩµÄ²¿·Ö£©¡¢µ÷ÓÃϵͳµÄÔÉúµ¯´°¡¢ÊÖ»úÕ𶯵ȵÈ
2.1C/C++²å¼þ
±àдºÍʹÓÃÔÉú²å¼þµÄ¼¸¸ö¹Ø¼üµã£º
´´½¨C/C++ÔÉú²å¼þ
1.µ¼³ö½Ó¿Ú±ØÐëÊÇC ABI-compatibleº¯Êý
2.º¯Êýµ÷ÓÃÔ¼¶¨
ÔÚC#ÖбêʶC/C++µÄº¯Êý²¢µ÷ÓÃ
1.±êʶ DLL Öеĺ¯Êý¡£ÖÁÉÙÖ¸¶¨º¯ÊýµÄÃû³ÆºÍ°üº¬¸Ãº¯ÊýµÄ DLL µÄÃû³Æ¡£
2.´´½¨ÓÃÓÚÈÝÄÉ DLL º¯ÊýµÄÀà¡£¿ÉÒÔʹÓÃÏÖÓÐÀ࣬Ϊÿһ·ÇÍйܺ¯Êý´´½¨µ¥¶ÀµÄÀ࣬»òÕß´´½¨°üº¬Ò»×éÏà¹ØµÄ·ÇÍйܺ¯ÊýµÄÒ»¸öÀà¡£
3.ÔÚÍйܴúÂëÖд´½¨ÔÐÍ¡£Ê¹Óà DllImportAttribute ±êʶ DLL ºÍº¯Êý¡£ Óà static ºÍ extern ÐÞÊηû±ê¼Ç·½·¨¡£
4.µ÷Óà DLL º¯Êý¡£Ïñ´¦ÀíÆäËûÈκÎÍйܷ½·¨Ò»Ñùµ÷ÓÃÍйÜÀàÉϵķ½·¨¡£
ÔÚC#Öд´½¨»Øµ÷º¯Êý£¬C/C++µ÷ÓÃC#»Øµ÷º¯Êý
1.´´½¨Íйܻص÷º¯Êý¡£
2.´´½¨Ò»¸öίÍУ¬²¢½«Æä×÷Ϊ²ÎÊý´«µÝ¸ø C/C++º¯Êý¡£Æ½Ì¨µ÷Óûá×Ô¶¯½«Î¯ÍÐת»»Îª³£¼ûµÄ»Øµ÷¸ñʽ¡£
3.È·±£Ôڻص÷º¯ÊýÍê³ÉÆä¹¤×÷֮ǰ£¬À¬»ø»ØÊÕÆ÷²»»á»ØÊÕίÍС£
ÄÇôC#ÓëÔÉú²å¼þÖ®¼äÊÇÈçºÎʵÏÖ»¥Ïàµ÷ÓõÄÄØ£¿ÔÚŪÇå³þÕâ¸öÎÊÌâ֮ǰ£¬ÎÒÃÇÏÈ¿´ÏÂC#´úÂ루.NETÉϵijÌÐò£©µÄÖ´ÐеĹý³Ì£º£¨¸üÏêϸһµãµÄ½éÉÜ¿ÉÒԲμûÎÒ֮ǰдµÄ²©¿Í£ºhttp://www.cnblogs.com/skynet/archive/2010/05/17/1737028.html£©
1.½«Ô´Âë±àÒëΪÍйÜÄ£¿é£»
2.½«ÍйÜÄ£¿é×éºÏΪ³ÌÐò¼¯£»
3.¼ÓÔØ¹«¹²ÓïÑÔÔËÐÐʱCLR£»
4.Ö´ÐгÌÐò¼¯´úÂë¡£
×¢£ºCLR(¹«¹²ÓïÑÔÔËÐÐʱ£¬Common Language Runtime)ºÍJavaÐéÄâ»úÒ»ÑùÒ²ÊÇÒ»¸öÔËÐÐʱ»·¾³£¬Ëü¸ºÔð×ÊÔ´¹ÜÀí£¨ÄÚ´æ·ÖÅäºÍÀ¬»øÊÕ¼¯£©£¬²¢±£Ö¤Ó¦Óú͵ײã²Ù×÷ϵͳ֮¼ä±ØÒªµÄ·ÖÀë¡£
ΪÁËÌá¸ßƽ̨µÄ¿É¿¿ÐÔ£¬ÒÔ¼°ÎªÁË´ïµ½ÃæÏòÊÂÎñµÄµç×ÓÉÌÎñÓ¦ÓÃËùÒªÇóµÄÎȶ¨ÐÔ¼¶±ð£¬CLR»¹Òª¸ºÔðÆäËûһЩÈÎÎñ£¬±ÈÈç¼àÊÓ³ÌÐòµÄÔËÐС£°´ÕÕ.NETµÄ˵·¨£¬ÔÚCLR¼àÊÓÖ®ÏÂÔËÐеijÌÐòÊôÓÚ"ÍйÜ"(managed)´úÂ룬¶ø²»ÔÚCLR֮ϡ¢Ö±½ÓÔÚÂã»úÉÏÔËÐеÄÓ¦ÓûòÕß×é¼þÊôÓÚ"·ÇÍйÜ"(unmanaged)µÄ´úÂë¡£
Õ⼸¸ö¹ý³ÌÎÒ×ܽáΪÏÂͼ£º 
ͼ .NETÉϵijÌÐòÔËÐÐ
»Øµ÷º¯ÊýÊÇÍйܴúÂëC#Öе͍ÒåµÄº¯Êý£¬¶Ô»Øµ÷º¯ÊýµÄµ÷Óã¬ÊµÏÖ´Ó·ÇÍйÜC/C++´úÂëÖе÷ÓÃÍйÜC#´úÂë¡£ÄÇôC/C++ÊÇÈçºÎµ÷ÓÃC#µÄÄØ£¿´óÖ·ÖΪ2²½£¬¿ÉÒÔÓÃÏÂͼ±íʾ£º

1.½«»Øµ÷º¯ÊýÖ¸Õë×¢²áµ½·ÇÍйÜC/C++´úÂëÖУ¨C#Öлص÷º¯ÊýָίÍÐdelegate£©
2.µ÷ÓÃ×¢²á¹ýµÄÍйÜC#º¯ÊýÖ¸Õë
Ïà±È½ÏÍйܵ÷Ó÷ÇÍйܣ¬»Øµ÷º¯Êý·½Ê½ÉÔ΢¸´ÔÓһЩ¡£»Øµ÷º¯Êý·Ç³£ÊʺÏÖØ¸´Ö´ÐеÄÈÎÎñ¡¢Òì²½µ÷ÓõÈÇé¿öÏÂʹÓá£
3.ÓÉÉÏÃæµÄ½éÉÜ¿ÉÒÔÖªµÀCLRÌṩÁËC#³ÌÐòÔËÐеĻ·¾³£¬Óë·ÇÍйܴúÂëµÄC/C++½»»¥µ÷ÓÃÒ²ÓÉËüÀ´Íê³É¡£CLRÌṩÁ½ÖÖÓÃÓÚÓë·ÇÍйÜC/C++´úÂë½øÐн»»¥µÄ»úÖÆ£º
ƽ̨µ÷Óã¨Platform Invoke£¬¼ò³ÆPInvoke»òÕßP/Invoke£©£¬ËüʹÍйܴúÂëÄܹ»µ÷ÓôӷÇÍйÜDLLÖе¼³öµÄº¯Êý¡£
4.COM »¥²Ù×÷£¬ËüʹÍйܴúÂëÄܹ»Í¨¹ý½Ó¿ÚÓë×é¼þ¶ÔÏóÄ£ÐÍ (COM) ¶ÔÏó½»»¥¡£¿¼ÂÇ¿çÆ½Ì¨ÐÔ£¬Unity3D²»Ê¹ÓÃÕâÖÖ·½Ê½¡£
ƽ̨µ÷ÓÃÒÀÀµÓÚÔªÊý¾ÝÔÚÔËÐÐʱ²éÕÒµ¼³öµÄº¯Êý²¢·âËÍ£¨Marshal£©Æä²ÎÊý¡£ ÏÂͼÏÔʾÁËÕâÒ»¹ý³Ì¡£

×¢Ò⣺1.³ýÉæ¼°»Øµ÷º¯ÊýʱÒÔÍ⣬ƽ̨µ÷Ó÷½·¨µ÷ÓôÓÍйܴúÂëÁ÷Ïò·ÇÍйܴúÂ룬¶ø¾ø²»»áÒÔÏà·´·½ÏòÁ÷¶¯¡£ ËäȻƽ̨µ÷Óõĵ÷ÓÃÖ»ÄÜ´ÓÍйܴúÂëÁ÷Ïò·ÇÍйܴúÂ룬µ«ÊÇÊý¾ÝÈÔÈ»¿ÉÒÔ×÷ΪÊäÈë²ÎÊý»òÊä³ö²ÎÊýÔÚÁ½¸ö·½ÏòÁ÷¶¯¡£2.ͼÖÐDLL±íʾ¶¯Ì¬¿â£¬Windowsƽָ̨.dllÎļþ¡¢Linux/AndroidÖ¸.soÎļþ¡¢Mac OS XÖ¸.dylib/frameworkÎļþ¡¢iOSÖÐÖ»ÄÜʹÓÃ.a¡£ºóÎĶ¼Ê¹ÓÃDLL´úÖ¸£¬²¢ÇÒDLLʹÓÃC/C++±àд¡£
µ±"ƽ̨µ÷ÓÃ"µ÷Ó÷ÇÍйܺ¯Êýʱ£¬Ëü½«ÒÀ´ÎÖ´ÐÐÒÔϲÙ×÷£º
1.²éÕÒ°üº¬¸Ãº¯ÊýµÄDLL¡£
2.½«¸ÃDLL¼ÓÔØµ½ÄÚ´æÖС£
3.²éÕÒº¯ÊýÔÚÄÚ´æÖеĵØÖ·²¢½«Æä²ÎÊýÍÆµ½¶ÑÕ»ÉÏ£¬ÒÔ·âËÍËùÐèµÄÊý¾Ý£¨²ÎÊý£©¡£
×¢Òâ
Ö»ÔÚµÚÒ»´Îµ÷Óú¯Êýʱ£¬²Å»á²éÕҺͼÓÔØ DLL ²¢²éÕÒº¯ÊýÔÚÄÚ´æÖеĵØÖ·¡£iOSÖÐʹÓõÄÊÇ.aÒѾ¾²Ì¬´ò°üµ½×îÖÕÖ´ÐÐÎļþÖÐ

4.½«¿ØÖÆÈ¨×ªÒƸø·ÇÍйܺ¯Êý¡£
2.2Android²å¼þ
JavaͬÑùÌṩÁËÕâÑùÒ»¸öÀ©Õ¹»úÖÆJNI£¨Java Native Interface£©£¬Äܹ»ÓëC/C++»¥ÏàͨÐÅ¡£
×¢£º
1.JNI wiki-https://en.wikipedia.org/wiki/Java_Native_Interface£¬ÕâÀï²»ÉîÈë½éÉÜJNI£¬ÓÐÐËȤµÄ¿ÉÒÔ×ÔÐÐÈ¥Ñо¿¡£Èç¹ûÄ㻹²»ÖªµÀJNIÒ²²»ÓÃÅ£¬¾ÍÏñUnity3DʹÓÃC/C++¿âÒ»Ñù£¬ÓÃÆðÀ´»¹ÊDZȽϼòµ¥µÄ£¬Ö»ÐèÒªÖªµÀÕâ¸ö¶«Î÷¼´¿É¡£²¢ÇÒUnity3D¶ÔC/C++ÇŽӯ÷Õâ¿é×öÁË·â×°£¬ÌṩAndroidJNI/AndroidJNIHelper/AndroidJavaObject/AndroidJavaClass/AndroidJavaProxy·½±ãʹÓõȣ¬¾ßÌåʹÓúóÃæÔÚ½éÉÜ¡£JNIÌṩÁËÈô¸ÉµÄAPIʵÏÖÁËJavaºÍÆäËûÓïÑÔµÄͨÐÅ£¨Ö÷ÒªÊÇC&C++£©¡£´ÓJava1.1¿ªÊ¼£¬JNI±ê×¼³ÉΪjavaƽ̨µÄÒ»²¿·Ö£¬ËüÔÊÐíJava´úÂëºÍÆäËûÓïÑÔдµÄ´úÂë½øÐн»»¥£¬±£Ö¤±¾µØ´úÂëÄܹ¤×÷ÔÚÈκÎJava ÐéÄâ»ú»·¾³Ï¡£"
2.×÷Ϊ֪ʶÀ©Õ¹£¬ÌáÒ»ÏÂAndroid JavaÐéÄâ»ú¡£AndroidµÄJavaÐéÄâ»úÓÐ2¸ö£¬×ʼÊÇDalvik£¬ºóÃæGoogleÔÚAndroid 4.4ϵͳÐÂÔöÒ»ÖÖÓ¦ÓÃÔËÐÐģʽART¡£ARTÓëDalvik Ö®¼äµÄÖ÷񻂿±ðÊÇÆä¾ßÓÐÌáǰ (AOT) ±àÒëģʽ¡£ ¸ù¾Ý AOT ¸ÅÄÉ豸°²×°Ó¦ÓÃʱ£¬DEX ×Ö½Ú´úÂëת»»½ö½øÐÐÒ»´Î¡£ Ïà±ÈÓÚ Dalvik£¬ÕâÑù¿ÉʵÏÖÕæÕýµÄÓÅÊÆ £¬ÒòΪ Dalvik µÄ¼´Ê± (JIT) ±àÒë·½·¨ÐèÒªÔÚÿ´ÎÔËÐÐÓ¦ÓÃʱ¶¼½øÐдúÂëת»»¡£ÏÂÎÄÖÐÓÃJavaÐéÄâ»ú´úÖ¸Dalvik/ART¡£
C#/Java¶¼¿ÉÒÔºÍC/C++ͨÐÅ£¬ÄÇôͨ¹ý±àдһ¸öC/C++Ä£¿é×÷ΪÇŽӣ¬¾ÍʹµÃC#ÓëJavaͨÐųÉΪÁË¿ÉÄÜ£¬ÈçÏÂͼËùʾ£º

×¢£ºC/C++ÇŽӯ÷±¾Éí¸úUnity3DûÓÐÖ±½Ó¹ØÏµ£¬²»ÊôÓÚAndroidºÍUnity3D£¬Í¼ÖзÅÔÚUnity3DÖÐÊÇΪÁË´úÖ¸libunity.soÖÐʵÏÖµÄÇŽӯ÷ÒÔ±íÊ¾ÕæÊµµÄÇé¿ö¡£
ͨ¹ýJNI¼È¿ÉÒÔÓÃÓÚJava´úÂëµ÷ÓÃC/C++´úÂ룬Ҳ¿ÉÓÃÓÚC/C++´úÂëÓëJava£¨Dalvik/ARTÐéÄâ»ú£©µÄ½»»¥¡£JNI¶¨ÒåÁË2¸ö¹Ø¼ü¸ÅÄî/½á¹¹£ºJavaVM¡¢JNIENV¡£JavaVMÌṩÐéÄâ»ú´´½¨¡¢Ïú»ÙµÈ²Ù×÷£¬JavaÖÐÒ»¸ö½ø³Ì¿ÉÒÔ´´½¨¶à¸öÐéÄâ»ú£¬µ«ÊÇAndroidÒ»¸ö½ø³ÌÖ»ÄÜÓÐÒ»¸öÐéÄâ»ú¡£JNIENVÊÇÏß³ÌÏà¹ØµÄ£¬¶ÔÓ¦µÄÊÇJavaVMÖеĵ±Ç°Ï̵߳ÄJNI»·¾³£¬Ö»Óи½¼Ó£¨attach£©µ½JavaVMµÄÏ̲߳ÅÓÐJNIENVÖ¸Õ룬ͨ¹ýJNIEVNÖ¸Õë¿ÉÒÔ»ñÈ¡JNI¹¦ÄÜ£¬·ñÔò²»Äܹ»µ÷ÓÃJNIº¯Êý¡£

C/C++Òª·ÃÎʵÄJava´úÂ룬±ØÐëÒªÄÜ·ÃÎʵ½JavaÐéÄâ»ú£¬»ñÈ¡ÐéÄâ»úÓÐ2Öз½·¨£º
1.ÔÚ¼ÓÔØ¶¯Ì¬Á´½Ó¿âµÄʱºò£¬JVM»áµ÷ÓÃJNI_OnLoad(JavaVM* jvm, void* reserved)£¬µÚÒ»¸ö²ÎÊý»á´«ÈëJavaVMÖ¸Õë¡£
2.ÔÚC/C++Öе÷ÓÃJNI_CreateJavaVM(&jvm, (void**)&env, &vm_args)´´½¨JavaVMÖ¸Õë
ËùÒÔ£¬ÎÒÃÇÖ»ÐèÒªÔÚ±àдC/C++ÇŽӯ÷soµÄʱºò¶¨ÒåJNI_OnLoad(JavaVM* jvm, void* reserved)·½·¨¼´¿É£¬È»ºó°ÑJavaVMÖ¸Õë±£´æÆðÀ´×÷ΪÉÏÏÂÎÄʹÓá£
»ñÈ¡µ½JavaVMÖ®ºó£¬»¹²»ÄÜÖ±½ÓÄõ½JNIº¯ÊýÈ¥»ñÈ¡Java´úÂ룬±ØÐëͨ¹ýÏ̹߳ØÁªµÄJNIENVÖ¸ÕëÈ¥»ñÈ¡¡£ËùÒÔ£¬×÷Ϊһ¸öºÃµÄ¿ª·¢Ï°¹ßÔÚÿ´Î»ñȡһ¸öÏ̵߳ÄJNIÏà¹Ø¹¦ÄÜʱ£¬Ïȵ÷ÓÃAttachCurrentThread()£»ÓÖ»òÕßÿ´Îͨ¹ýJavaVMÖ¸Õë»ñÈ¡µ±Ç°µÄJNIENV£ºjava_vm->GetEnv((void**)&jni_env, version)£¬Ò»¶¨ÊÇÒѾ¸½¼Óµ½JavaVMµÄÏ̡߳£Í¨¹ýJNIENV¿ÉÒÔ»ñÈ¡µ½JavaµÄ´úÂ룬ÀýÈçÄãÏëÔÚ±¾µØ´úÂëÖзÃÎÊÒ»¸ö¶ÔÏóµÄ×ֶΣ¨field£©£¬Äã¿ÉÒÔÏñÏÂÃæÕâÑù×ö£º
1. ¶ÔÓÚÀ࣬ʹÓÃjni_env->FindClass»ñµÃÀà¶ÔÏóµÄÒýÓÃ
2.¶ÔÓÚ×ֶΣ¬Ê¹ÓÃjni_env->GetFieldId»ñµÃ×Ö¶ÎID
3.ʹÓöÔÓ¦µÄ·½·¨£¨ÀýÈçjni_env->GetIntField£©»ñÈ¡×ֶεÄÖµ
ÀàËÆµØ£¬Òªµ÷ÓÃÒ»¸ö·½·¨£¬Äãstep1.µÃ»ñµÃÒ»¸öÀà¶ÔÏóµÄÒýÓÃobj£¬step2.ÊÇ·½·¨methodID¡£ÕâЩIDͨ³£ÊÇÖ¸ÏòÔËÐÐʱÄÚ²¿Êý¾Ý½á¹¹¡£²éÕÒµ½ËüÃÇÐèҪЩ×Ö·û´®±È½Ï£¬µ«Ò»µ©Äãʵ¼ÊÈ¥Ö´ÐÐËüÃÇ»ñµÃ×ֶλòÕß×ö·½·¨µ÷ÓÃÊǷdz£¿ìµÄ¡£step3.µ÷ÓÃjni_env->CallVoidMethodV(obj, methodID, args)¡£
´ÓÉÏÃæµÄʾÀý´úÂ룬ÎÒÃÇ¿ÉÒÔ¿´³öʹÓÃÔʼµÄJNI·½Ê½È¥ÓëAndroid£¨Java£©²å¼þ½»»¥ÊǶàµÄ·±Ëö£¬Òª×Ô¼º×öÌ«¶àµÄÊÂÇ飬²¢ÇÒΪÁËÐÔÄÜÐèÒª×Ô¼º¿¼ÂÇ»º´æ²éѯµ½µÄ·½·¨ID£¬×Ö¶ÎIDµÈµÈ¡£ÐÒÔ˵ÄÊÇ£¬Unity3DÒѾΪÎÒÃÇ·â×°ºÃÁËÕâЩ£¬²¢ÇÒ¿¼ÂÇÁËÐÔÄÜÓÅ»¯¡£Unity3DÖ÷ÒªÌṩÁËÒ»ÏÂ2¸ö¼¶±ðµÄ·â×°À´°ïÖú¸ßЧ±àд´úÂ룺

×¢£ºUnity3DÖжÔÓ¦µÄC/C++ÇŽӯ÷°üº¬ÔÚlibunity.soÖС£
1.Level 1£ºAndroidJNI¡¢AndroidJNIHelper£¬ÔʼµÄ·â×°Ï൱ÓÚÎÒÃÇÉÏÃæ×Ô¼º±àдµÄC# Wrapper¡£AndroidJNIHelper ºÍAndroidJNI×Ô¶¯Íê³ÉÁ˺ܶàÈÎÎñ£¨Ö¸ÕÒµ½ÀඨÒ壬¹¹Ôì·½·¨µÈ£©£¬²¢ÇÒʹÓûº´æÊ¹µ÷ÓÃjavaËٶȸü¿ì¡£AndroidJavaObjectºÍAndroidJavaClass»ùÓÚAndroidJNIHelper ºÍAndroidJNI´´½¨£¬µ«ÔÚ´¦Àí×Ô¶¯Íê³É²¿·ÖÒ²Óкܶà×Ô¼ºµÄÂß¼£¬ÕâЩÀàÒ²Óо²Ì¬µÄ°æ±¾£¬ÓÃÀ´·ÃÎÊjavaÀàµÄ¾²Ì¬³ÉÔ±¡£¸üÏêϸ½Ó¿Ú²Î¿¼°ïÖúÎĵµ£ºhttp://docs.unity3d.com/ScriptReference/AndroidJNI.html£¬http://docs.unity3d.com/ScriptReference/AndroidJNIHelper.html
2.Level2£ºAndroidJavaObject¡¢AndroidJavaClass¡¢AndroidJavaProxy£¬Õâ¸ö3¸öÀàÊÇ»ùÓÚLevel1µÄ·â×°ÌṩÁ˸ü¸ß²ã¼¶µÄ·âװʹÓÃÆðÀ´¸ü¼òµ¥£¬Õâ¸öÔÚµÚÈý²¿·ÖÏêϸ½éÉÜ¡£
2.3iOS²å¼þ
iOS±àд²å¼þ±ÈAndroidÒª¼òµ¥ºÜ¶à£¬ÒòΪObjective-CÒ²ÊÇ C-compatibleµÄ£¬ÍêÈ«¼æÈݱê×¼CÓïÑÔ¡£ÕâЩ¾Í¿ÉÒԷdz£¼òµ¥µÄ°üÒ»²ã extern "c"{}£¬ÓÃCÓïÑÔ·â×°µ÷ÓÃiOS¹¦ÄÜ£¬±©Â¶¸øUnity3Dµ÷Óᣲ¢ÇÒ¿ÉÒÔ¸úÔÉúC/C++¿âÒ»Ñù±à³É.a²å¼þ¡£C#ÓëiOS£¨Objective-C£©Í¨ÐŵÄÔÀí¸úC/C++ÍêȫһÑù£º

³ý´ËÖ®Í⣬Unity iOSÖ§³Ö²å¼þ×Ô¶¯¼¯³É·½Ê½¡£ËùÓÐλÓÚAsset/Plugings/iOSÎļþ¼ÐÖкó׺ÃûΪ.m , .mm , .c , .cppµÄÎļþ¶¼½«×Ô¶¯²¢Èëµ½ÒÑÉú³ÉµÄXcodeÏîÄ¿ÖС£È»¶ø£¬×îÖÕ±à½øÖ´ÐÐÎļþÖС£ºó׺Ϊ.hµÄÎļþ²»Äܱ»°üº¬ÔÚXcodeµÄÏîÄ¿Ê÷ÖУ¬µ«ËûÃǽ«³öÏÖÔÚÄ¿±êÎļþϵͳÖУ¬´Ó¶øÊ¹.m/.mm/.c/.cppÎļþ±àÒë¡£ÕâÑù±àдiOS²å¼þ£¬³ýÁËÐèÒª¶ÔiOS Objective-CÓÐÒ»¶¨Á˽âÖ®Í⣬ÓëC/C++²å¼þûÓвîÒ죬·´¶ø¸ü¼òµ¥¡£
3.°æ±¾Óë²¹¶¡
ÈκÎÓÎÏ·£¨¶ËÓΡ¢ÊÖÓΣ©¶¼Ó¦¸ÃÌṩÓÎÏ·ÄÚ¸üеÄ;¾¶¡£Ò»°ãÓÎÏ··ÖΪȫÁ¿¸üÐÂ/Õû°ü¸üС¢ÔöÁ¿¸üС¢×ÊÔ´¸üС£
È«Á¿
androidÓÎÏ·ÄÚÍêÕû°²×°°üÏÂÔØ£¨iosÌø×ªµ½AppStoreÏÂÔØ£©
ÔöÁ¿£ºÖ÷ÒªÖ¸androidÊ¡Á÷Á¿¸üÐÂ
1.¿ÉÒÔʹÓÃbsdiffÉú³Épatch°ü
2.Ó¦Óñ¦Ò²ÌṩÔöÁ¿¸üÐÂsdk¿É¹©½ÓÈë
×ÊÔ´
Unity3Dͨ¹ýʹÓÃAssetBundle¼´¿ÉʵÏÖ¶¯Ì¬¸üÐÂ×ÊÔ´µÄ¹¦ÄÜ¡£
ÊÖÓÎÔÚʵÏÖÕâ¿éʱÐèҪעÒâµÄ¼¸µã£º
1.ÓÎÏ··¢²¼³öÒ»¶¨ÒªÌṩÓÎÏ·ÄÚ¸üеÄ;¾¶¡£¼´Ê¹ÊÇɾµô²âÊÔ£¬±£²»×¼ÕâÆÚ¼äÐèÒª½øÐÐ×ÊÔ´»òÕßBUGÐÞ¸´¸üС£ºÜ¶àÍæ¼Ò²¢²»ÖªµÀÈçºÎ¸üУ¬¶øÇÒAndroidÊÖ»úÓ¦Ó÷ַ¢Æ½Ì¨¶àÑù£¬·Ö·¢Æ½Ì¨±¾ÉíÒ²²»»á¸ú¹Ù·½Í¬²½¸üУ¨ÌرðÊÇСµÄ·Ö·¢Æ½Ì¨£©¡£
2.¸üй¦ÄÜÒªÌá¹©Ç¿ÖÆ¸üС¢·ÇÇ¿ÖÆ¸üÐÂÅäÖû¯Ñ¡Ï²¢Ö¸¶¨ÄÄЩ°æ±¾¿ÉÒÔ²»Ç¿¸ü£¬ÄÄЩ°æ±¾±ØÐëÇ¿¸ü¡£
3.µ±ÓÎÏ·Ìṩ·ÇÇ¿ÖÆ¸üй¦ÄÜÖ®ºó£¬ÏÖÍøÒ»¶¨»á´æÔÚ¶à¸ö°æ±¾¡£Èç¹ûÐèÒªÕë¶Ô²»Í¬°æ±¾×ö²»Í¬µÄ¸üУ¬ÀýÈçÅäÖÃÎļþAÕë¶Ô1.0.0.1ÐÞ¸ÄÁËÒ»ÏÕë¶Ô1.0.0.2ÐÞ¸ÄÁËÁíÒ»Ï2¸ö°æ±¾ÐèÒª·Ö±ð¸üжÔÓ¦µÄÐ޸ģ¬ÐèÒª×Ô¼ºÊµÏÖ¸üвßÂÔIIPS²»ÌṩÕâ¸ö¹¦ÄÜ¡£µ±ÐèÒª¸´ÔӵĸüвßÂÔ£¬ÍƼö×Ô¼º±àд¸üзþÎñÆ÷ºÍ¿Í»§¶ËÂß¼£¬²»Ê¹ÓÃiips×é¼þ£¨Æäʵ×Ô¼ºÊµÏÖÒ²ºÜ¼òµ¥£©¡£

ûÓÐÔËÓª¾ÑéµÄÈË»áÑ¡Ôñ¶þ½øÖÆ£¬ÈÏΪ¶þ½øÖư²È«¡¢¸üС£¬Õâ¶Ô¶ËÓÎ/ÊÖÓÎÍâÍøÖ»´æÔÚÒ»¸ö°æ±¾µÄÓÎÏ·Êʺϣ¬¶ÔÒ»°ã²»Ç¿Éý°æ±¾µÄÊÖÓβ¢²»Êʺϣ¬·´¶ø»á¶Ô¸üкÍά»¤´øÀ´ºÜ´óµÄÂé·³¡£
4.ÅäÖÃʹÓÃXML»òÕßJSONµÈÎı¾¸ñʽ£¬¸üÀûÓÚ¶à°æ±¾µÄ¼æÈݺ͸üС£×ʼÌÚѶ×ÀÇò¿Í»§¶ËʹÓõĶþ½øÖƸñʽ£¨ÓÉexcelת»»¶øÀ´£©£¬µ«ÊÇËæ×ÅÔËÓªÅäÖøñʽÐèÒªÔö¼Ó×ֶΣ¬ÕâÑùÀϰ汾³ÌÐò¾Í½âÎö²»ÁËеĶþ½øÖÆÊý¾Ý£¬¸ø¼æÈݺ͸üдøÀ´Á˺ܴóµÄÂé·³¡£ÕâÑù¾ÍÒªÇóÉÏÃæÌáµ½µÄÕë¶Ô²»Í¬²½×ö²»Í¬¸üУ¬ÓÖ»òÕßÅäÖÃÒ»¿ªÊ¼¾ÍÔ¤ÁôºÃ×ã¹»µÄÀ©Õ¹ÏÆäʵ²»¹ÜÔõôԤÁôÀ©Õ¹Ò²ºÜÄѸúÉÏÐèÇóµÄ±ä»¯£¬¶øÇÒÒ»¿ªÊ¼»á°ÑÅäÖÃ±í¸´ÔÓ»¯µ«ÊÇÆäʵֻÓÐÒ»ÕÅ»òÕß¼¸ÕŲŻá±ä¸ü½á¹¹¡£
5.iOS°æ±¾µÄËÍÉó°æ±¾ÐèÒªÁ¬½ÓÌØ¶¨µÄ°üº¬ÐÂÄÚÈݵķþÎñÆ÷£¬ÏÖÍø·þÎñÆ÷»¹²»°üº¬ÐÂÄÚÈÝ¡£ËÍÉóͨ¹ýÖ®ºó£¬ÉϼÜÓÎÏ·ÏÖÍø·þÎñÆ÷»á½øÐиüУ¬iOS°æ±¾ÐèÒªÁ¬½ÓÏÖÍø·þÎñÆ÷¶ø·ÇËÍÉó·þÎñÆ÷£¬µ«ÊÇÕâÆÚ¼äÓÖ²»ÄÜÐ޸Ŀͻ§¶È£¬Õâ¸öÇл»ÐèҪͨ¹ý·þÎñÆ÷Ï·¢¿ª¹Ø½øÐпØÖÆ¡£ÀýÈçͨ¹ýÖ¸¶¨ËÍÉóµÄiOSÓÎÏ·°æ±¾ºÅ£¬¿Í»§¶ËÅжϱ¾µØ°æ±¾ºÅÊÇ·ñΪËÍÉó°æ±¾£¬Èç¹ûÊÇÁ¬½ÓËÍÉó·þÎñÆ÷£¬·ñÔòÁ¬½ÓÏÖÍø·þÎñÆ÷¡£
4.Óýű¾£¬»¹ÊDz»Óã¿ÕâÊÇÒ»¸öÎÊÌâ
·½±ã¸üУ¬¼õÉÙCrash£¨ÌرðÊÇʹÓÃC++µÄcocosÒýÇæ£©
ͨ¹ýÉÏÃæÒ»½Ú¡¾°æ±¾Óë²¹¶¡¡¿ÖªµÀҪʵÏÖ´úÂë¸üÐÂÊǷdz£À§Äѵģ¬ÕýʽÕâ¸öÔÒò¿Í»§¶Ë¿ª·¢µÄѹÁ¦ÊDZȽϴóµÄ£¬Èç¹û³öÏÖÁ˱ȽÏÑÏÖØµÄBUG±ØÐë·¢Ç¿ÖÆ¸üа汾£¬Ê¹Óýű¾¿ÉÒÔ½â¾öÕâ¸öÎÊÌâ¡£
ÓÉÓÚUnity3DÊÖÓθüгɱ¾±È½Ï´ó£¬¶øÇÒĿǰÌÚѶ×ÀÇòÒªÇó²»ÄÜÇ¿ÖÆ¸üУ¬Õâµ¼ÖÂа汾µÄ»î¶¯¸²¸ÇÂÊÌáÉý±È½ÏÂý¡¢³öÏÖÎÊÌâÖ®ºóÄÑÒÔÐÞ¸´¡£Õë¶ÔÕâ¸öÇé¿ö£¬¿¼ÂÇÒýÈëlua½øÐл¿ª·¢£¬ºóÐø·¢²¼»î¶¯¼°ÐÞ¸´bugÖ»ÐèÒª·¢²¼lua×ÊÔ´£¬½øÐÐ×ÊÔ´¸üм´¿É£¬´ó´ó½µµÍÁË·¢²¼ºÍÐÞ¸´ÎÊÌâµÄ³É±¾¡£
¿ÉÑ¡·½°¸»¹ÓÐʹÓÃHtml5½øÐл¿ª·¢£¬Ä¿Ç°ÓÎÏ·ÖÐÒѾԤÂñÁËHtml5»î¶¯Èë¿Ú£¬²¢ÇÒÒѾÓÃÀ´·¢¹ý"Íæ¼Òµ÷²é"¡¢"ÌÚѶÆåÅÆÐû´«"µÈ¡£µ«ÊÇÓëlua¶Ô±È£¬²»ÄÜ×öµ½ÓëUnity3DµÄÉî¶ÈÈںϣ¬ÌåÑé²»ÈçʹÓÃlua£¬ÀýÈç²»ÄܲÙ×÷ÓÎÏ·ÖеÄui¡¢²»ÄÜÍê³É¸´ÔÓ½çÃæµÄÖÆ×÷¡¢²»Äܸ´ÓÃÒÑÓеŦÄÜ¡¢Íæ¼Ò¸¶·Ñ³äÖµ¸úÒÑÓеÄÒ²»áÓвîÒì
ÓÎÏ·½Å±¾Ö®Íõ¡ª¡ªLua
ÔÚ¹«Ë¾ÄÚ²¿Ä§·½±È½Ïϲ»¶ÓÃlua£¬»ðÒþÈÌÕߣ¨ÊÖÓΣ©unity+ulua£¬È«ÃñË®ä°cocos2d-x+luaµÈµÈ¶¼ÓÐʹÓÃlua½øÐпª·¢¡£ÎÒÃÇ¿ÉÒÔʹÓù«Ë¾ÄÚ²¿µÄxlua×é¼þ£¬Ò²¿ÉÒÔʹÓÃulua<http://ulua.org/>¡¢UniLua<https://github.com/xebecnan/UniLua>µÈµÈ¡£
5.×ÊÔ´¹ÜÀí
5.1×ÊÔ´¹ÜÀíÆ÷
ÒµÎñ²»ÒªÖ±½ÓʹÓÃÒýÇæ»òÕßϵͳÔÉú½Ó¿Ú£¬¶øÊÇ·â×°Ò»¸ö×ÊÔ´¹ÜÀíÆ÷¸ºÔð£º×ÊÔ´¼ÓÔØ¡¢Ð¶ÔØ
¼æÈÝResource.LoadÓëAssetBundle×ÊÔ´»¥Ïà±ä¸üÐèÇ󣬿ª·¢ÆÚ¼äʹÓÃResource.Load·½Ê½¶ø²»±Ø´òAB°üЧÂʸü¸ß
¼ÓÔØ×ÊԴʱ£¬²»¹ÜÊÇͬ²½¼ÓÔØ»¹ÊÇÒì²½¼ÓÔØ£¬×îºÃÊÇʹÓÃÒì²½±àÂ뷽ʽ£¨»Øµ÷º¯Êý»òÕßÏûϢ֪ͨ»úÖÆ£©¡£Èç¹ûÄÄÒ»Ìì×ÊÔ´Óɱ¾µØ¼ÓÔØ¸ÄΪ´Ó·þÎñÆ÷°´Ðè¼ÓÔØ£¬¶øÓÎÏ·ÖеÄÂß¼¶¼ÊÇͬ²½·½Ê½±àÂëµÄ£¬¸ÄÆðÀ´½«·Ç³£Í´¿à¡£ÆäʵÒì²½±àÂ뷽ʽºÜ¼òµ¥£¬²»±Èͬ²½·½Ê½¸´ÔÓ¡£
5.2×ÊÔ´ÀàÐÍ
ͼƬ/ÎÆÀí£¨¶ÔÐÔÄÜ¡¢°üÌåÓ°Ïì×î´óÒòËØ£©
񙮵
1.±³¾°ÒôÀÖ£¬ÌÚѶ×ÀÇòʹÓÃ.ogg/.mp3
2. ÒôЧ£¬ÌÚѶ×ÀÇòʹÓÃ.wav
Êý¾Ý
1.Îı¾
2.¶þ½øÖÆ
¶¯»/ÌØÐ§
5.3ͼƬ-Îļþ¸ñʽÓëÎÆÀí¸ñʽ
³£ÓõÄͼÏñÎļþ¸ñʽÓÐBMP£¬TGA£¬JPG£¬GIF£¬PNGµÈ£»
³£ÓõÄÎÆÀí¸ñʽÓÐR5G6B5£¬A4R4G4B4£¬A1R5G5B5£¬R8G8B8, A8R8G8B8µÈ¡£
Îļþ¸ñʽÊÇͼÏñΪÁË´æ´¢ÐÅÏ¢¶øÊ¹ÓõĶÔÐÅÏ¢µÄÌØÊâ±àÂ뷽ʽ£¬Ëü´æ´¢ÔÚ´ÅÅÌÖУ¬»òÕßÄÚ´æÖУ¬µ«ÊDz¢²»Äܱ»GPUËùʶ±ð£¬ÒòΪÒÔÏòÁ¿¼ÆËã¼û³¤µÄGPU¶ÔÓÚÕâЩ¸´ÔӵļÆËãÎÞÄÜΪÁ¦¡£ÕâЩÎļþ¸ñʽµ±±»ÓÎÏ·¶ÁÈëºó£¬»¹ÊÇÐèÒª¾¹ýCPU½âѹ³ÉR5G6B5£¬A4R4G4B4£¬A1R5G5B5£¬R8G8B8, A8R8G8B8µÈÏñËØ¸ñʽ£¬ÔÙ´«Ë͵½GPU¶Ë½øÐÐʹÓá£
ÎÆÀí¸ñʽÊÇÄܱ»GPUËùʶ±ðµÄÏñËØ¸ñʽ£¬Äܱ»¿ìËÙѰַ²¢²ÉÑù¡£¾Ù¸öÀý×Ó£¬DDSÎļþÊÇÓÎÏ·¿ª·¢Öг£ÓõÄÎļþ¸ñʽ£¬ËüÄÚ²¿¿ÉÒÔ°üº¬A4R4G4B4µÄÎÆÀí¸ñʽ£¬Ò²¿ÉÒÔ°üº¬A8R8G8B8µÄÎÆÀí¸ñʽ£¬ÉõÖÁ¿ÉÒÔ°üº¬DXT1µÄÎÆÀí¸ñʽ¡£ÔÚÕâÀïDDSÎļþÓеãÈÝÆ÷µÄÒâζ¡£OpenGL ES 2.0Ö§³ÖÒÔÉÏÌáµ½µÄR5G6B5£¬A4R4G4B4£¬A1R5G5B5£¬R8G8B8£¬A8R8G8B8µÈÎÆÀí¸ñʽ£¬ÆäÖÐ R5G6B5£¬A4R4G4B4£¬A1R5G5B5ÿ¸öÏñËØÕ¼ÓÃ2¸ö×Ö½Ú(BYTE)£¬R8G8B8ÿ¸öÏñËØÕ¼ÓÃ3¸ö×Ö½Ú£¬A8R8G8B8ÿ¸öÏñËØÕ¼Óà 4¸ö×Ö½Ú¡£
»ùÓÚOpenGL ESµÄѹËõÎÆÀíÓг£¼ûµÄÈçϼ¸ÖÖʵÏÖ£º
1£©ETC1£¨Ericsson texture compression)£¬ETC1¸ñʽÊÇOpenGL ESͼÐαê×¼µÄÒ»²¿·Ö£¬²¢ÇÒ±»ËùÓеÄAndroidÉ豸ËùÖ§³Ö¡£
2£©PVRTC (PowerVR texture compression)£¬Ö§³ÖµÄGPUΪImagination TechnologiesµÄPowerVR SGXϵÁС£
3£©ATITC (ATI texture compression)£¬Ö§³ÖµÄGPUΪQualcommµÄAdrenoϵÁС£
4£©S3TC (S3 texture compression)£¬Ò²±»³ÆÎªDXTC£¬ÔÚPCÉϹ㷺±»Ê¹Ó㬵«ÊÇÔÚÒÆ¶¯É豸ÉÏ»¹ÊÇÊôÓÚÐÂÏÊÊÂÎï¡£Ö§³ÖµÄGPUΪNVIDIA TegraϵÁС£

5.4×ÊÔ´¹¤¾ß
ÓÐÁ˹淶¾Í¿ÉÒÔ×ö¹¤¾ß¼ì²é£¬´ÓÔ´Í·µ½´ò°ü
1.×ÊÔ´µ¼Èë¼ì²é
2.×ÊÔ´´ò°ü¼ì²é
6.ÐÔÄÜÓÅ»¯

µôÖ¡Ö÷ÒªÕë¶ÔGPUºÍCPU×ö·ÖÎö£»ÄÚ´æÕ¼ÓôóÖ÷ÒªÕë¶ÔÃÀÊõ×ÊÔ´£¬ÒôЧ£¬ÅäÖÃ±í£¬»º´æµÈ·ÖÎö£»¿¨¶ÙÒ²ÐèÒª¶ÔGPUºÍCPU·åÖµ·ÖÎö£¬ÁíÍâIO»òÕßGCÒ²Ò×µ¼Ö¡£
6.1¹¤ÓûÉÆÆäÊ£¬±ØÏÈÀûÆäÆ÷
1.Unity Profiler
2. XCode instruments
3. Qualcomm Adreno Profiler
4.NVIDIA PerfHUD ES Tegra
6.2CPU£º×î¼ÑÔÔò¼õÉÙ¼ÆËã
¸´Óã¬UIScrollView Item¸´Ó㬱ÜÃâÆµ·±´´½¨Ïú»Ù¶ÔÏó
»º´æ£¬ÀýÈçTransform
ÔËËã²Ã¼ô£¬ÀýÈçÅöײ¼ì²â²Ã¼ô
1.´ÖÂÔÅöײ¼ì²â£¨»®·Ö¿Õ¼ä¡ª¡ª¶þ·Ö/ËIJæÊ÷/°Ë²æÊ÷/Íø¸ñµÈ£¬½µµÍÅöײ¼ì²âµÄÊýÁ¿£©
2.¾«È·Åöײ¼ì²â£¨¼ì²éºòÑ¡Åöײ½á¹û£¬½ø¶øÈ·¶¨¶ÔÏóÊÇ·ñÕæÊµ·¢ÉúÅöײ£©
3.ÐÝÃß»úÖÆ£º±ÜÃâÄ£Äâ¾²Ö¹µÄÇò
Âß¼Ö¡ÓëäÖȾ֡·ÖÀë
·ÖÖ¡´¦Àí
Òì²½/¶àÏ̴߳¦Àí
6.3GPU£º×î¼ÑÔÔò¼õÉÙäÖȾ
ÎÆÀíѹËõ
1.Åú´¦Àí¼õÉÙDrawCall£¨unity-Static BatchingºÍDynamic Batching£¬cocos SpriteBatchNode£©
2.¼õÉÙÎÞЧ/²»±ØÒª»æÖÆ£ºÆÁÄ»ÍâµÄ²Ã¼ô£¬FlashÔà¾ØÕóËã·¨£¬
3.LOD/ÌØÐ§·Öµµ
4. NGUI¶¯¾²·ÖÀ루UIPanel.LateUpdateµÄÏûºÄ£©
5. ¿ØÖƽÇÉ«¹Ç÷ÀÊý¡¢Ä£ÐÍÃæÊý/¶¥µãÊý
6.½µÖ¡£¬²¢·ÇËùÓг¡¾°¶¼ÐèÒª60Ö¡£¨ÌÚѶ×ÀÇòÓÎÏ·³¡¾°60Ö¡£¬ÆäËû³¡¾°30Ö¡£»ÌìÌì¿áÅÜ£¬ÔÚ¿ªÊ¼ÓÎϷǰ£¬FPS±»ÏÞÖÆÎª30£¬ÓÎÏ·¿ªÊ¼Ö®ºóFPS²ÅΪ60¡£ÌìÌì·É³µµÄFPSΪ30£¬µ«Êǵ±Óû§Ò»¶Îʱ¼ä²»µã»÷½çÃæºó£¬FPS×Ô¶¯½µ£©
6.4Äڴ棺×î¼ÑÔÔò¼õÉÙÄÚ´æ·ÖÅä/Ë鯬¡¢¼°Ê±ÊÍ·Å
1.ÎÆÀíѹËõ-Android ETC1¡¢iOS PVRTC 4bpp¡¢windows DXT5
2.¶ÔÏó³Ø-PoolManager
3.ºÏ²¢¿ÕÏÐͼ¼¯
4.UI¾Å¹¬¸ñ
5.ɾ³ý²»ÓõĽű¾£¨Ò²»áÕ¼ÓÃÄڴ棩
6.5IO£º×î¼ÑÔÔò¼õÉÙ/Òì²½io
1.×ÊÔ´Òì²½/¶àÏ̼߳ÓÔØ
2.Ô¤¼ÓÔØ
3.ÎļþѹËõ
4.ºÏÀí¹æ»®×ÊÔ´ºÏ²¢´ò°ü£¬²¢·Çtexturepacker´ò°ü³É´óͼ¼¯Ò»¶¨ºÃ£¬»áÔö¼ÓÎļþioʱ¼ä
6.6ÍøÂ磺ÆäʵҲÊÇIOµÄÒ»ÖÖ
ʹÓõ¥Ï̡߳ª¡ª¹²ÓÃUIỊ̈߳¬Í¨¹ýʼþ/UIÑ»·Çý¶¯£»»¹ÊǶàÏ̡߳ª¡ªµ¥¶ÀµÄÍøÂçỊ̈߳¿
µ¥Ị̈߳ºÓÉÓÎÏ·Ñ»·£¨Ê¼þ£©Çý¶¯£¬µ¥Ïß³Ìģʽ±ÈʹÓöàÏß³Ìģʽ¿ª·¢¡¢Î¬»¤¼òµ¥ºÜ¶à£¬µ«ÊÇÐÔÄܱȶàÏß³ÌÒª²îһЩ£¬ËùÒÔÔÚÍøÂçIOµÄʱºò£¬ÐèҪעÒâ±ð×èÈûµ½ÓÎÏ·Ñ»·¡£ËµÃ÷£¬Èç¹ûÍøÂçIO²»¸´ÔÓµÄÇé¿öÏ£¬ÍƼöʹÓøÃģʽ¡£
1.ÔÚUIÏß³ÌÖУ¬±ðµ÷ÓÿÉÄÜ×èÈûµÄÍøÂ纯Êý£¬ÓÅÏÈ¿¼ÂÇ·Ç×èÈûIO
2.ÕâÊÇÍøÂ翪·¢Õß¾³£·¸µÄ´íÎóÖ®Ò»¡£±ÈÈ磺×öÒ»¸ö¼òµ¥Èç gethostbyname() µÄµ÷Óã¬Õâ¸ö²Ù×÷ÔÚС·¶Î§Öв»»á´æÔÚÈκÎÎÊÌ⣬µ«ÊÇÔÚÓÐЩÇé¿öÖÐÏÖʵÊÀ½çµÄÍæ¼ÒÈ´»áÒò´Ë×èÈûÊý·ÖÖÓÖ®¾Ã£¡Èç¹ûÄãÔÚ GUI Ïß³ÌÖе÷ÓÃÕâÑùÒ»¸öº¯Êý£¬¶ÔÓÚÓû§À´Ëµ£¬ÔÚº¯Êý×èÈûʱ£¬GUI Ò»Ö±¶¼´¦ÓÚ frozen »òÕß hanged ״̬£¬Õâ´ÓÓû§ÌåÑéµÄ½Ç¶ÈÊǾø¶Ô²»ÔÊÐíµÄ¡£
¶àỊ̈߳ºµ¥¶ÀµÄÍøÂçỊ̈߳¬Ê¹ÓöÀÁ¢µÄÍøÂçÏß³ÌÓÐÒ»¸ö·Ç³£Ã÷ÏԵĺô¦£¬Ö÷Ï߳̿ÉÒÔ½«Ôà»î¡¢Àۻ¸øÍøÂçÏß³Ì×öʹµÃUI¸üÁ÷³©£¬ÀýÈçÏûÏ¢µÄ±à½âÂë¡¢¼Ó½âÃܹ¤×÷£¬ÕâЩ¶¼ÊǷdz£ºÄʱµÄ¡£µ«ÊÇʹÓöàỊ̈߳¬¸ø¿ª·¢ºÍά»¤´øÀ´Ò»¶¨³É±¾£¬²¢ÇÒÈç¹ûûÓÐÒ»¶¨µÄ¾Ñéд³öÀ´µÄÍøÂç¿â²»ÄÇôÎȶ¨£¬ÈÝÒ׳ö´í£¬ÉõÖÁµ¼ÖÂÓÎÏ·±ÀÀ£¡£ÏÂÃæÊǼ¸µã×¢ÒâÊÂÏ
1.ǧÍòǧÍò±ðÔÚÍøÂçÏß³ÌÖУ¬»Øµ÷Ö÷Ị̈߳¨UIỊ̈߳©µÄ»Øµ÷º¯Êý¡£¶øÊÇÍøÂçÏ߳̽«Êý¾Ý×¼±¸ºÃ£¬ÈÃÖ÷Ïß³ÌÖ÷¶¯È¥È¡£¬Òà»òÕßËµÍøÂçÏ߳̽«ÍøÂçÊý¾Ý×÷Ϊһ¸öʼþÇý¶¯Ö÷Ïß³Ìȥȡ¡£µ±ÄêÎÒÔÚÓÃCocos2d-x + Lua×öħ·¨»¨Ô°µÄÊÖ»údemoʱ£¬¾Í²ÉÓõĶàÏß³Ìģʽ£¬×î³õÔÚÍøÂçÏß³ÌÖ±½Óµ÷ÓÃÖ÷Ï̻߳ص÷º¯Êý£¬¾³£»áµ¼ÖÂĪÃûÆäÃîµÄCrash¡£ÒòÎªÍøÂçÏß³ÌÖÐûÓÐäÖȾËù±ØÐëµÄopenglÉÏÏÂÎÄ£¬»áµ¼ÖÂäÖȾ³öÎÊÌâ¶øCrash¡£
6.6°ü´óС
1.ʹÓÃѹËõ¸ñʽµÄÎÆÀí/ÒôƵ
2.¾¡Á¿²»ÒªÊ¹ÓÃSystem.Xml¶øÊ¹ÓýÏСµÄMono.Xml
3.ÆôÓÃStrippingÀ´¼õС¿âµÄ´óС
4.Unity strip level£¨strip by byte code£©
5. Unity3DÊä³öAPK£¬È¡ÏûX86¼Ü¹¹
6..iOS Xcode strip¿ªÆô
6.7ºÄµç
ÏÂÃæÓ°ÏìºÄµçµÄ¼¸¸öÒòËØºÍÓ°Ïì¶ÈÕª×Ô¹«Ë¾ÄÚ²¿µÄһƪÎÄÕ¡£

7.Òì³£ÓëCrash
7.1·ÀÓùʽ±à³Ì
·Ç·¨µÄÊäÈëÖб£»¤ÄãµÄ³ÌÐò
1.¼ì²éÿһÊäÈë²ÎÊý
2.¼ì²éÀ´×ÔÍⲿµÄÊý¾Ý/×ÊÔ´
¶ÏÑÔ
´íÎó´¦Àí
¸ôÀ¸
·À²»Ê¤·À£¬²»¹ÜÈçºÎ·ÀÓù×ÜÓÐʧÊÖµÄʱºò£¬Õâ¾ÍÐèÒªÒì³£²¶»ñºÍÉϱ¨¡£
7.2Òì³£²¶»ñ
Òì³£²¶»ñÒѾÓкܶàµÚÈý×é¼þ¿É¹©½ÓÈ룬ÕâÀï²»½éÉÜ×é¼þµÄ¶ø½ÓÈ룬¶øÊǼòµ¥Ì¸Ò»ÏÂÒì³£²¶»ñµÄÔÀí¡£

ÓÉÓںܶà´íÎó²¢²»ÊÇ·¢ÉúÔÚ¿ª·¢¹¤×÷Õßµ÷ÊԽ׶Σ¬¶øÊÇÔÚÓû§»ò²âÊÔ¹¤×÷ÕßʹÓý׶Σ»Õâ¾ÍÐèÒªÏà¹Ø´úÂëά»¤¹¤×÷Õß¶ÔÓÚ³ÌÐòÒì³£²¶»ñÊÕ¼¯ÏÖ³¡ÐÅÏ¢¡£Òì³£ÓëCrashµÄ¼à¿ØºÍÉϱ¨£¬ÕâÀï²»½éÉÜBuglyµÄʹÓ㬰´ÕÕapollo»òÕßmsdkµÄÎĵµ½ÓÈë¼´¿É£¬Ã»ÓÐÌ«¶à¿ÉÒÔ˵µÄ¡£ÕâÀïÖ÷Ҫ͸¹ýBugly½éÉÜÊÖÓεļ¸ÀàÒì³£µÄ²¶»ñºÍ·ÖÎö£º
1. Unity3D C#²ãÒì³£²¶»ñ£º±È½Ï¼òµ¥Ê¹ÓÃApplication.RegisterLogCallback/Application.RegisterLogCallbackThreaded£¨ÔÚÒ»¸öеÄÏß³ÌÖе÷ÓÃίÍУ©×¢²á»Øµ÷º¯Êý¡£Ìرð×¢Ò⣺±£Ö¤ÏîÄ¿ÖÐÖ»ÓÐÒ»¸öApplication.RegisterLogCallback×¢²á»Øµ÷£¬·ñÔòºóÃæ×¢²áµÄ»á¸²¸ÇÇ°Ãæ×¢²áµÄ»Øµ÷£¡»Øµ÷º¯ÊýÖÐstackTrace²ÎÊý°üÒì³£µ÷ÓÃÕ»¡£
public void HandleLog(string logString, string stackTrace, LogType type)
{
if (logString == null || logString.StartsWith(cLogPrefix))
{
return;
}
ELogLevel level = ELogLevel.Verbose;
switch (type)
{
case LogType.Exception:
level = ELogLevel.Error;
break;
default:
return;
}
if (stackTrace != null)
{
Print(level, ELogTag.UnityLog, logString + "\n" + stackTrace);
}
else
{
Print(level, ELogTag.UnityLog, logString);
}
}
|
2.Android Java²ãÒì³£²¶»ñ
try¡catchÏÔʽµÄ²¶»ñÒì³£Ò»°ãÊDz»ÒýÆðÓÎÏ·CrashµÄ£¬ËüÓÖ³ÆÎª±àÒëʱÒì³££¬¼´ÔÚ±àÒë½×¶Î±»´¦ÀíµÄÒì³£¡£±àÒëÆ÷»áÇ¿ÖÆ³ÌÐò´¦ÀíËùÓеÄCheckedÒì³££¬ÒòΪJavaÈÏΪÕâÀàÒì³£¶¼ÊÇ¿ÉÒÔ±»´¦Àí£¨ÐÞ¸´£©µÄ¡£Èç¹ûûÓÐtry¡catchÕâ¸öÒì³££¬Ôò±àÒë³ö´í£¬´íÎóÌáʾÀàËÆÓÚ"Unhandled exception type xxxxx"¡£
UnCheckedÒì³£ÓÖ³ÆÎªÔËÐÐʱÒì³££¬ÓÉÓÚûÓÐÏàÓ¦µÄtry¡catch´¦Àí¸ÃÒì³£¶ÔÏó£¬ËùÒÔJavaÔËÐл·¾³½«»áÖÕÖ¹£¬³ÌÐò½«Í˳ö£¬Ò²¾ÍÊÇÎÒÃÇËù˵µÄCrash¡£ÄÇΪʲô²»»á¼ÓÔÚtry¡catchÄØ£¿
1. ÎÞ·¨½«ËùÓеĴúÂë¶¼¼ÓÉÏtry¡catch
2.UnCheckedÒ쳣ͨ³£¶¼ÊǽÏΪÑÏÖØµÄÒì³££¬»òÕß˵ÒÑ¾ÆÆ»µÁËÔËÐл·¾³µÄ¡£±ÈÈçÄÚ´æµØÖ·£¬¼´Ê¹ÎÒÃÇtry¡catchסÁË£¬Ò²²»ÄÜÃ÷È·ÖªµÀÈçºÎ´¦Àí¸ÃÒì³££¬²ÅÄܱ£Ö¤³ÌÐò½ÓÏÂÀ´µÄÔËÐÐÊÇÕýÈ·µÄ¡£
UncaughtÒì³£»áµ¼ÖÂÓ¦ÓóÌÐò±ÀÀ£¡£ÄÇôµ±±ÀÀ£ÁË£¬ÎÒÃÇÊÇ·ñ¿ÉÒÔ×öÐ©Ê²Ã´ÄØ£¬¾ÍÏñApplication.RegisterLogCallback×¢²á»Øµ÷´òÓ¡ÈÕÖ¾¡¢Éϱ¨·þÎñÆ÷¡¢µ¯´°ÌáʾÓû§£¿JavaÌṩÁËÒ»¸ö½Ó¿Ú¸øÎÒÃÇ£¬¿ÉÒÔÍê³ÉÕâЩ£¬Õâ¾ÍÊÇUncaughtExceptionHandler£¬¸Ã½Ó¿Úº¬ÓÐÒ»¸ö´¿Ð麯Êý£º
public abstract void uncaughtException (Thread thread, Throwableex) |
UncaughtÒì³£·¢Éúʱ»áÖÕÖ¹Ị̈߳¬´Ëʱ£¬ÏµÍ³±ã»á֪ͨUncaughtExceptionHandler£¬¸æËßËü±»ÖÕÖ¹µÄÏß³ÌÒÔ¼°¶ÔÓ¦µÄÒì³££¬È»ºó±ã»áµ÷ÓÃuncaughtExceptionº¯Êý¡£Èç¹û¸ÃhandlerûÓб»ÏÔʽÉèÖã¬Ôò»áµ÷ÓöÔÓ¦Ïß³Ì×éµÄĬÈÏhandler¡£Èç¹ûÎÒÃÇÒª²¶»ñ¸ÃÒì³££¬±ØÐëʵÏÖÎÒÃÇ×Ô¼ºµÄhandler£¬²¢Í¨¹ýÒÔϺ¯Êý½øÐÐÉèÖãº
public static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler handler) |
ÌØ±ð×¢Ò⣺¶à´Îµ÷ÓÃsetDefaultUncaughtExceptionHandlerÉèÖÃhandler£¬ºóÃæ×¢²áµÄ»á¸²¸ÇÇ°Ãæ×¢²áµÄ£¬ÒÔ×îºóÒ»´ÎΪ׼¡£ÊµÏÖ×Ô¶¨ÒåµÄhandler£¬Ö»ÐèÒª¼Ì³ÐUncaughtExceptionHandler¸Ã½Ó¿Ú£¬²¢ÊµÏÖuncaughtException·½·¨¼´¿É¡£
static class MyCrashHandler implements UncaughtExceptionHandler{
@Override
public void uncaughtException(Thread thread, final Throwable throwable) {
// Deal this exception
}
}
|
ÔÚÈκÎÏß³ÌÖУ¬¶¼¿ÉÒÔͨ¹ýsetDefaultUncaughtExceptionHandlerÀ´ÉèÖÃhandler£¬µ«ÔÚAndroidÓ¦ÓóÌÐòÖУ¬È«¾ÖµÄApplicationºÍActivity¡¢Service¶¼Í¬ÊôÓÚUIÖ÷Ị̈߳¬Ïß³ÌÃû³ÆÄ¬ÈÏΪ"main"¡£ËùÒÔ£¬ÔÚApplicationÖÐÓ¦¸ÃΪUIÖ÷Ïß³ÌÌí¼ÓUncaughtExceptionHandler£¬ÕâÑùÕû¸ö³ÌÐòÖеÄActivity¡¢ServiceÖгöÏÖµÄUncaughtExceptionʼþ¶¼¿ÉÒÔ±»´¦Àí¡£
²¶»ñExceptionÖ®ºó£¬ÎÒÃÇ»¹ÐèÒªÖªµÀ±ÀÀ£¶ÑÕ»µÄÐÅÏ¢£¬ÕâÑùÓÐÖúÓÚÎÒÃÇ·ÖÎö±ÀÀ£µÄÔÒò£¬²éÕÒ´úÂëµÄBug¡£Òì³£¶ÔÏóµÄprintStackTrace·½·¨ÓÃÓÚ´òÓ¡Òì³£µÄ¶ÑÕ»ÐÅÏ¢£¬¸ù¾ÝprintStackTrace·½·¨µÄÊä³ö½á¹û£¬ÎÒÃÇ¿ÉÒÔÕÒµ½Òì³£µÄÔ´Í·£¬²¢¸ú×Ùµ½Ò쳣һ·´¥·¢µÄ¹ý³Ì¡£
public static String getStackTraceInfo(final Throwable throwable) {
String trace = ""; try {
Writer writer = new StringWriter();
PrintWriter pw = new PrintWriter(writer);
throwable.printStackTrace(pw);
trace = writer.toString();
pw.close();
} catch (Exception e) { return "";
} return trace;
} |
1. Android Native Crash£ºÇ°ÃæÎÒÃÇÖªµÀ¿ÉÒÔ±àдºÍʹÓÃC/C++ÔÉú²å¼þ£¬³ý·ÇC++ʹÓÃtry...catch²¶»ñÒì³££¬·ñÔòÒ»°ã»áÖ±½Ócrash£¬Í¨¹ý²¶»ñÐźŽøÐд¦Àí¡£
2.iOS Òì³£²¶»ñ£º
¸úAndroid¡¢UnityÀàËÆ£¬iOSÒ²ÌṩNSSetUncaughtExceptionHandler À´×öÒì³£´¦Àí¡£
#import "CatchCrash.h"
@implementation CatchCrash
void uncaughtExceptionHandler(NSException *exception)
{
// Òì³£µÄ¶ÑÕ»ÐÅÏ¢
NSArray *stackArray = [exception callStackSymbols];
// ³öÏÖÒì³£µÄÔÒò
NSString *reason = [exception reason];
// Òì³£Ãû³Æ
NSString *name = [exception name];
NSString *exceptionInfo = [NSString stringWithFormat:@"Exception reason£º%@\nException name£º
%@\nException stack£º%@",name, reason, stackArray];
NSLog(@"%@", exceptionInfo);
NSMutableArray *tmpArr = [NSMutableArray arrayWithArray:stackArray];
[tmpArr insertObject:reason atIndex:0];
[exceptionInfo writeToFile:[NSString stringWithFormat:@"%@/Documents/error.log",NSHomeDirectory()]
atomically:YES encoding:NSUTF8StringEncoding error:nil];
}
@end |
µ«ÊÇÄÚ´æ·ÃÎÊ´íÎó¡¢Öظ´ÊͷŵȴíÎóÒýÆð±ÀÀ£¾ÍÎÞÄÜΪÁ¦ÁË£¬ÒòΪÕâÖÖ´íÎóËüÅ׳öµÄÊÇÐźţ¬ËùÒÔ»¹±ØÐëҪרÃÅ×öÐźŴ¦Àí¡£
windows crash£ºÍ¬ÑùwindowsÌṩSetUnhandledExceptionFilterº¯Êý£¬ÉèÖÃ×î¸ßÒ»¼¶µÄÒì³£´¦Àíº¯Êý£¬µ±³ÌÐò³öÏÖÈκÎδ´¦ÀíµÄÒì³££¬¶¼»á´¥·¢ÄãÉèÖõĺ¯ÊýÀȻºóÔÚÒì³£´¦Àíº¯ÊýÖлñÈ¡³ÌÐòÒ쳣ʱµÄµ÷ÓöÑÕ»¡¢ÄÚ´æÐÅÏ¢¡¢Ïß³ÌÐÅÏ¢µÈ¡£
8.ÊÊÅäÓë¼æÈÝ
8.1UIÊÊÅä
1.êµã£¨UIAnchor¡¢UIWidgetAnchorÊôÐÔ£©
2.NGUI UIRootͳһÉèÖÃËõ·Å±ÈÀý
3.UIStretch
8.2¼æÈÝ 1.shader¼æÈÝ£ºÀýÈçifÓï¾äÓеĻúÐÍÖ§³Ö²»ºÃ£¬Google nexus 6ÔÚshaderÖÐʹÓÃÁËif¾Í»ácrash
2.×ÖÌ弿ÈÝ£ºandroid¸´ÔӵĻ·¾³£¬ÓеÄÊÖ»ú³§É̺Írom»á¶Ô×ÖÌå½øÐÐÓÅ»¯£¬È¥µôandroidĬÈÏ×ÖÌ壬Èç¹û²»´ò°ü×ÖÌå»á²»ÏÖʵÖÐÎÄ×Ö
9.µ÷ÊÔ¼°¿ª·¢¹¤¾ß
9.1ÈÕÖ¾¼°¸ú×Ù
ÊÂʵ֤Ã÷£¬´òÓ¡ÈÕÖ¾£¨printfµ÷ÊÔ·¨£©ÊǷdz£ÓÐЧµÄ·½·¨¡£Ò»¸öºÃÓõÄÈÕÖ¾µ÷ÊÔ£¬±Ø±¸ÒÔϼ¸¸ö¹¦ÄÜ£º
1.ÈÕÖ¾Ãæ°å/¿ØÖÆÌ¨£¬¸ñʽ»¯Êä³ö
2.Èß³¤¼¶±ð£¨verbosity level£©£ºERROR¡¢WARN¡¢INFO¡¢DEBUG
3. ƵµÀ£¨channel£©£º°´¹¦ÄܵȽøÐÐÄ£¿é»®·Ö£¬ÈçÍøÂçÆµµÀÖ»½ÓÊÕ/ÏÔÊ¾ÍøÂçÄ£¿éµÄÏûÏ¢£¬ÆµµÀ½¨ÒéʹÓÃö¾Ù½øÐÐÃüÃû¡£
4.ÈÕ־ͬʱ»áÊä³öµ½ÈÕÖ¾Îļþ
5.ÈÕÖ¾Éϱ¨
9.2µ÷ÊÔÓûæÍ¼¹¤¾ß
µ÷ÊÔ»æÍ¼Óù¤¾ßÖ¸¿ª·¢¼°µ÷ÊÔÆÚ¼äΪÁË¿ÉÊÓ»¯µÄ»æÍ¼Óù¤¾ß£¬ÈçÌÚѶ×ÀÇò¿ª·¢µ÷ÊÔʱ»áʹÓÃVectrosityScripts¿ÉÊÓ»¯Çò×ÀµÄÎïÀíÄ£ÐÍ£¨Êµ¼ÊÅöײÏߣ©°ïÖúµ÷ÊÔ¡£ÕâÀ๤¾ß¿ÉÒÔ½ÚÊ¡´óÁ¿Ê±¼ä¼°¿ìËÙ¶¨Î»ÎÊÌ⡣ͨ³£µ÷ÊÔÓûæÍ¼¹¤¾ß°üº¬£º
1.Ö§³Ö»æÖÆ»ù±¾Í¼ÐΣ¬ÈçÖ±Ïß¡¢ÇòÌå¡¢µã¡¢×ø±êÖá¡¢°üΧºÐµÈ
2.Ö§³Ö×Ô¶¨ÒåÅäÖã¬ÈçÑÕÉ«¡¢Á£¶È£¨ÏߵĴÖϸ/ÇòÌå°ë¾¶/µãµÄ´óС£©µÈ
9.3ÓÎÏ·ÄÚÖò˵¥/×÷±×¹¤¾ß
ÔÚ¿ª·¢µ÷ÊÔÆÚ¼äÌṩÓÎÏ·½øÐÐÖеÄһЩÅäÖÃÑ¡Ïî¼°×÷±×¹¤¾ß£¬ÒÔ·½±ãµ÷ÊÔºÍÌá¸ßЧÂÊ¡£ÀýÈçÌÚѶ×ÀÇòÓÎÏ·ÖÐÌṩ£º
1.ÓÎÏ·ÄÚÎïÀíÒýÇæ²ÎÊýµ÷Õû²Ëµ¥£»
2.ÐÞ¸ÄÇò¸ËÃé×¼Ïß³¤¶È/·´ÉäÏßÊýÁ¿¡¢ÐÞ¸ÄÇ©µ½½±ÀøÁìÈ¡ÌìÊýµÈ×÷±×¹¤¾ß
×¢ÒâÓÎÏ·ÄÚµÄËùÓпª·¢µ÷ÊÔÓõŤ¾ß£¬¶¼ÐèҪͨ¹ý±àÒëºê¿ª¹Ø£¬±£Ö¤·¢²¼°æ±¾²»»á°Ñ¹¤¾ß´úÂë°üº¬½øÈ¥¡£
9.4UnityÀ©Õ¹
UntiyÒýÇæÌṩÁ˷dz£Ç¿´óµÄ±à¼Æ÷À©Õ¹¹¦ÄÜ£¬»ùÓÚUnity Editor¿ÉÒÔʵÏַdz£¶àµÄ¹¦ÄÜ¡£¹«Ë¾ÄÚ²¿¡¢Íⲿ¶¼Óзdz£µÄ¿ªÔ´À©Õ¹¿ÉÓÃ
¹«Ë¾Íⲿ£¬ÈçGitHubÉϵģº
UnityEditor-MiniExtension
Unity-Resource-Checker
UnityEditorHelper
MissingReferencesUnity
Unity3D-ExtendedEditor
¡
¹«Ë¾ÄÚ²¿£º
TUT¡¢BeautyUnity¡¢UnityDependencyBy
10.ÏîÄ¿ÔËÓª
×Ô¶¯¹¹½¨
1.°æ±¾ºÅ¡ª¡ªÖ÷°æ±¾ºÅ.ÌØÐÔ°æ±¾ºÅ.ÐÞÕý°æ±¾ºÅ.¹¹½¨°æ±¾ºÅ
£¨1£©¹¹½¨°æ±¾ºÅ]Ó¦Ó÷ַ¢Æ½Ì¨Éý¼¶Åжϻù×¼
2.×Ô¶¯¹¹½¨
£¨1£©Android
£¨2£©iOS ¡ª XUPorter
¹«Ë¾ÄÚ²¿½ÓÈëSODA¼´¿É£¬½¨Òé´î½¨×Ô¼ºµÄ¹¹½¨»ú£¬¿ª·¢ÆÚ¼äÿÈÕN BuildÅŶӻáËÀÈ˵ģ¬ÁíÍâÒ²¿ÉÒԴ×Ô¼ºµÄ´î½¨¹¹½¨Æ½Ì¨
ͳ¼ÆÉϱ¨
1.TlogÉϱ¨
£¨1£©Íæ¼Òת»¯¹Ø¼ü²½Öèͳ¼Æ£¨ÖØÒª£©
£¨2£©Pingͳ¼ÆÉϱ¨
£¨3£©ÓÎÏ·ÒµÎñµÄͳ¼ÆÉϱ¨£¨ÀýÈç×ÀÇòÇò¾ÖÏà¹ØµÄͳ¼ÆÉϱ¨£©
2.µÆËþ×Ô¶¨ÒåÉϱ¨
ÔËӪģ°å
1.ÅäÖû¯
2.·þÎñÆ÷¶¯Ì¬Ï·¢
3.CDNÀȡͼƬ²¢»º´æ

ÉÏÏßǰµÄchecklist
ÏîÄ¿ |
񻵋 |
˵Ã÷ |
Ö¸±ê |
µÆËþÉϱ¨ |
1. µÆËþ×Ô´øÍ³¼ÆÐÅÏ¢
2. ×Ô¶¨ÒåÐÅÏ¢Éϱ¨ |
µÆËþÀïÃæ°üº¬ºÜ¶àͳ¼ÆÊý¾Ý£¬ÐèÒª¼ì²éÊÇ·ñok |
1. °æ±¾/ÇþµÀ·Ö²¼
2. ʹÓÃÆµÂÊͳ¼Æ
3. Áô´æÍ³¼Æ£¨1ÌìÁô´æ¡¢3ÌìÁô´æ¡¢7ÌìÁô´æ¡¢14ÌìÁô´æ£©
4. Óû§½á¹¹Í³¼Æ£¨ÓÐЧÓû§¡¢³ÁĬÓû§¡¢Á÷ʧÓû§¡¢»ØÁ÷Óû§¡¢Éý¼¶Óû§¡¢ÐÂÔöÓû§£©
5. Ó²¼þͳ¼Æ£¨»úÐÍ+°æ±¾¡¢·Ö±æÂÊ¡¢²Ù×÷ϵͳ¡¢ÄÚ´æ¡¢cpu¡¢gpu£©
6. Crashͳ¼Æ£¨Crash°æ±¾¡¢CrashÓ²¼þ¡¢Crash´ÎÊýµÈ£©
µÈµÈ |
ПëÍÆËÍ |
|
|
Äܹ»Õë¶Ôµ¥¸öÍæ¼Ò£¬ËùÓÐÍæ¼ÒÍÆËÍÏûÏ¢ |
Ã×´óʦ֧¸¶ |
|
|
Õý³£Ö§¸¶ |
°²È«×é¼þ |
1. TSS×é¼þ½ÓÈë
2. Òþ²ØÄÚ²¿·ûºÅ±í£ºC++¿ª·¢µÄ´úÂëʹÓÃstrip±àÒïÑ¡ÏĨ³ý³ÌÐòµÄ·ûºÅ
3. ¹Ø¼üÊý¾Ý¼ÓÃÜ£¬ÈçÓ°×Ó±äÁ¿+Òì»ò¼ÓÃÜËã·¨ |
¸ù¾Ý°²È«ÖÐÐÄÌṩµÄÎĵµÍê³ÉËùÓÐÏî |
½ÓÈ밲ȫ×é¼þ£¬²¢Í¨¹ý°²È«ÖÐÐĵÄÑéÊÕ |
Îȶ¨ÐÔ |
crashÂÊ |
Óû§crashÂÊ£º·¢ÉúCRASHµÄÓû§Êý/ʹÓÃÓû§Êý
Æô¶¯crashÂÊ£ºÆô¶¯5SÄÚ·¢ÉúcrashÓû§Êý/ʹÓÃÓû§Êý |
µÍÓÚ3% |
ÈõÍøÂç |
|
¶ÏÏßÖØÁ¬¿¼ÂÇ£¬»º´æÏûÏ¢£¬ÖØ·¢»úÖÆµÈµÈ |
¿Í»§¶ËµÄºËÐij¡¾°±ØÐëÓжÏÏßÖØÁ¬»úÖÆ£¬²¢ÔÚÓÐÍøÂç¶¶¶¯¡¢ÑÓʱ¡¢¶ª°üµÄÍøÂ糡¾°Ï£¬¿Í»§¶ËÐè´ïµ½ÒÔÏÂÒªÇó£º
Ò». ²»ÄܳöÏÖÒÔÏÂÏÖÏó£º
1¡¢ÓÎÏ·Öв»ÄܳöÏÖÊÕÖ§²»µÈ¡¢¿Í»§¶Ë¿¨ËÀ/±ÀÀ£µÈÒì³£Çé¿ö£»
2¡¢ÓÎÏ·ºËÐŦÄÜ£¨ÈçµÇ¼¡¢µ¥¾Ö¡¢Ö§¸¶µÈ£©²»ÄÜÓе¼ÖÂÓÎÏ·ÎÞ·¨Õý³£½øÐеÄUI¡¢½»»¥ÎÊÌ⣻
3¡¢²»ÄÜÓÐËðº¦Íæ¼ÒÀûÒæ»ò¿É±»Íæ¼Ò¶îÍâ»ñÀûµÄÎÊÌ⣻
4¡¢ÐèÒªÓкÏÀíµÄÖØÁ¬»úÖÆ£¬±ÜÃâÿ´ÎÖØÁ¬¶¼·µ»Øµ½µÇ¼½çÃæ¡£
¶þ. ÐèÒª¶ÔÑÓʱµÄÇé¿öÓÐÏàÓ¦µÄÌáʾ |
¼æÈÝÐÔ |
|
|
ͨ¹ýÊÊÅä²âÊÔ |
ÓÎÏ·¸üР|
1. Õû°ü¸üÐÂ
2. ÔöÁ¿¸üР|
|
ÌØ±ð˵Ã÷£ºiOSËÍÉó°æ±¾Ö§³ÖÁ¬Ìض¨»·¾³£¬ÓëÕýʽ»·¾³Çø±ð¿ª£¬ÐèҪͨ¹ý·þÎñÆ÷¿ª¹Ø¿ØÖÆ |
ÐÔÄÜ |
ÄÚ´æ¡¢CPU¡¢Ö¡ÂÊ¡¢Á÷Á¿¡¢°²×°°ü´óС |
|
¡¾ÄÚ´æÕ¼ÓÃÒªÇó¡¿
Androidƽ̨£ºÔÚ¶ÔÓ¦µµ´Î¿Í»§¶Ë×îµÍÅäÖÃÒÔÉÏ£¬¾ùÐèÂú×ãÒÔÏÂÄÚ´æÏûºÄÖ¸±ê£¨PSS£©£º
1µµ»úÐÍÖ¸±ê£º×î¸ßPSS<=300MB £¨PSS¸ßÓÚÕâ¸ö±ê×¼»áÓ°Ïì28%Óû§µÄÌåÑ飬Լ1800Íò£©
2µµ»úÐÍÖ¸±ê£º×î¸ßPSS<=200MB£¨PSS¸ßÓÚÕâ¸ö±ê×¼»áÓ°Ïì45%Óû§µÄÌåÑ飬Լ3000Íò£©
3µµ»úÐÍÖ¸±ê£º×î¸ßPSS<=150MB£¨PSS¸ßÓÚÕâ¸ö±ê×¼»áÓ°Ïì27%Óû§µÄÌåÑ飬Լ1800Íò£©
iOSƽ̨£ºÔÚ¶ÔÓ¦µµ´Î¿Í»§¶Ë×îµÍÅäÖÃÒÔÉÏ£¬¾ùÐèÂú×ãÒÔÏÂÄÚ´æÏûºÄÖ¸±ê£¨PSS£©£º
1µµ»úÐÍÖ¸±ê£ºÏûºÄÄڴ棨real mem£©²»´óÓÚ250MB£¨¸ßÓÚÕâ¸ö±ê×¼»áÓ°Ïì53%Óû§µÄÌåÑ飬Լ1900Íò£©
2µµ»úÐÍÖ¸±ê£ºÏûºÄÄڴ棨real mem£©²»´óÓÚ200MB£¨¸ßÓÚÕâ¸ö±ê×¼»áÓ°Ïì47%Óû§µÄÌåÑ飬Լ1700Íò£©
¡¾CPUÕ¼ÓÃÒªÇó¡¿
Androidƽ̨£ºCPUÕ¼ÓÃ(90%)СÓÚ60%
iOSƽ̨£ºCPUÕ¼ÓÃ(90%)СÓÚ80%
¡¾Ö¡ÂÊÒªÇó¡¿
1µµ»úÐÍ£¨CPUΪËĺË1.4GHZ£¬RAMΪ2G£©»òÒÔÉÏ»úÐÍ£ºÓÎÏ·ºËÐÄÍæ·¨ÖУ¬×îСFPSÓ¦²»Ð¡ÓÚ25Ö¡/Ãë
2µµ»úÐÍ£¨CPUΪÁ½ºË1.1GHZ£¬RAMΪ768M£©»òÒÔÉÏ»úÐÍ£ºÓÎÏ·ºËÐÄÍæ·¨ÖУ¬×îСFPSÓ¦²»Ð¡ÓÚ25Ö¡/Ãë
3µµ»úÐÍ£¨CPUΪ1GHZ£¬RAMΪ768M£©»òÒÔÉÏ»úÐÍ£ºÓÎÏ·ºËÐÄÍæ·¨ÖУ¬×îСFPSÓ¦²»Ð¡ÓÚ18Ö¡/Ãë
¡¾Á÷Á¿ÏûºÄÒªÇó¡¿
ÓÎÏ·ºËÐÄÍæ·¨Á÷Á¿ÏûºÄÇé¿ö£¨·ÇÒ»´ÎÐÔÏûºÄ£©Ó¦Âú×ãÒÔÏÂÌõ¼þ£º
1.¶ÔÓÚ·Ö¾ÖµÄÓÎÏ·³¡¾°£¬µ¥¾ÖÏûºÄÁ÷Á¿²»³¬¹ý200KB
2.¶ÔÓÚ²»·Ö¾ÖÓÎÏ·³¡¾°»òÁ÷Á¿Óë¾ÖʱÓйصij¡¾°£¬10·ÖÖÓÏûºÄÁ÷Á¿²»³¬¹ý500KB |
|