å 責äºé ïŒãã®èšäºã¯ã䌌ããããªããšããã人ã®ã¿ã察象ãšããŠããŸã-éåžžã«æè¡çã§ãããUnityåºæã®çšèªã䜿çšããŠããŸãã
1.ãªãã¬ã¯ã·ã§ã³ã«ããã¿ã€ãã®ããŒã
æåã®åé¡ïŒãã®åçŽãªã³ãŒãã¯æ£ããåäœããŸããïŒ
var type = Type.GetType("TypeName");
åäœããŸãããåã¯æ£ãããªãã空ããè¿ããŸãã ãã®åã䜿çšãããšåé¡ãçºçããŸã-ã»ãšãã©ãã¹ãŠã®ã¡ãœããã空ã®å€ãè¿ããŸãã ãã¹ãŠãæ£ããããã«ã¯ã次ã®ããã«æžãå¿ èŠããããŸãã
var assembly = Assembly.Load("Assembly-CSharp"); // assembly var type = assembly.GetType("TypeName");
ããã§ã¯ããããäºæ³ãããåäœã§ãããšè¿°ã¹ãããŠããŸãã
2.åçãªãªãœãŒã¹ã®èªã¿èŸŒã¿
Resources.LoadãŸãã¯Resources.LoadAllã¡ãœããã䜿çšãããšã次ã®åé¡ãçºçããŸãã ãããã®ã¡ãœããã¯éæ¹ããªãé·ãæ©èœããŸãã ã·ã³ã°ã«ã¹ã¬ãããã©ãŠã¶ã®å Žåãããã¯ç°¡åã«éèŠã«ãªããŸãã ãããã®ã¡ãœããããã³åæ§ã®ã¡ãœããã䜿çšããåçãªãœãŒã¹ã®ããŒãã¯ããŸã£ãã䜿çšããªãæ¹ãããã§ãããã å¯èœãªå Žåã¯ãéçã«å€æŽããå¿ èŠããããŸãïŒäºåã«å¿ èŠãªãã¬ãããžã®ãªã³ã¯ãé 眮ããŸãïŒã ãããžã§ã¯ãã®èªã¿èŸŒã¿æéã®å·®ã¯10ç§ã«éããŸããã
3.ãã¡ã€ã«ã·ã¹ãã ã®åæ
ãã¡ã€ã«ã·ã¹ãã ã䜿çšããå Žåããã©ãŠã¶ã«çµã¿èŸŒãŸããããŒã¿ããŒã¹ã®ã©ãããŒãšããŠå®è£ ãããŠããããšãç¥ã£ãŠããå¿ èŠããããŸãã ããããæãéèŠãªããšã¯ããã©ãŠã¶ãŒãçŽæ¥javascriptã³ãã³ãã«ãã£ãŠã®ã¿ãã®ããŒã¿ããŒã¹ãšåæãããããšã§ãã
FS.syncfs(false,function (err) { //alert('syncing fs'); }); }
åŒã³åºããªããšããã©ãŠã¶ããªãã«ããåŸãããŒã¿ãä¿åãããªãå ŽåããããŸãã 次ã®ããã«åŒã³åºãããšãã§ããŸãã
1ïŒãããWebGLãã³ãã¬ãŒãã«è¿œå ããŸãïŒ
<script type = "text/javascript" language = "javascript" > function SyncFiles() { FS.syncfs(false,function (err) { //alert('syncing fs'); }); } </script>
2ïŒcïŒããåŒã³åºããŸãïŒ
private void Sync() { #if UNITY_WEBGL Application.ExternalCall("SyncFiles"); #endif }
4. WebGLã®åæåãšã·ã§ãŒããŒã®ã³ã³ãã€ã«
ã¢ããªã±ãŒã·ã§ã³ã®èµ·åæã«ãWebGLã®åæåã«ã¯ããªãã®æéããããå ŽåããããŸãã ããã¯éåžžã«éèŠã§ãããªããªãããã®æéã¯ãã¹ã¯ãªãããé£ç¶ããŠå®è¡ãããåèšæéã§ãã©ãŠã¶ãŒã«èæ ®ãããããã§ãïŒFirefoxã§ã¯ãããã©ã«ãã§ã¯10ç§ã§ãïŒã
WebGLãåæåããäž»ãªæéã¯ãã·ã§ãŒããŒã®ã³ã³ãã€ã«ã§ãã ããã«ãã¹ããŒãžäžãŸãã¯ã·ãŒã³ããåç §ããããã¬ããå ã«ããã·ã§ãŒããŒã®ã¿ãã³ã³ãã€ã«ãããŸãã ïŒç§ã®ããã«ïŒããŸããŸãªãœãŒã¹ããããŸããŸãªã¢ã»ãããã²ãŒã ã«åã蟌ãã å Žåãã·ã§ãŒããŒã倧éã«ãªãããã®ã³ã³ãã€ã«ã«10ç§ä»¥äžãããããšããããŸãã
äœãããå¿ èŠããããŸããïŒ
1ïŒãããžã§ã¯ãã§äœ¿çšãããããŸããŸãªã·ã§ãŒããŒã®æ°ãæå°éã«ããŸãã å€ãã®å Žåããããžã§ã¯ãã§ã¯ãè³Œå ¥ããããŸããŸãªã¢ã»ããããååŸããã»ãŒåãã·ã§ãŒããŒã䜿çšããŸãã
2ïŒããã§ååã§ãªãå Žåãäžéšã®ã¢ã»ãããåçã«ããŒãããããªãœãŒã¹ãŸãã¯ãã³ãã«ã«è»¢éããå¿ èŠããããŸãã ã¯ããéçããŒããããé·ããªããŸãã ãã ããåçãªããŒããé 延ãããŠã¢ã»ãããããŒãã«ããŒããããšãåããŒãã®ããŒãã«æ£ç¢ºã«10ç§ããããããŸããã ãã®çµæãåèšèªã¿èŸŒã¿æéãé·ããªããŸãã ãã ããå°ãªããšããã©ãŠã¶ã¯ããã³ã°ããã¹ã¯ãªãããåæ¢ããããã®ãã¬ãŒã€ãŒã®äŸµå ¥ãæäŸããããšãåæ¢ããŸãã
ã©ã®ã·ã§ãŒããŒãã©ã®ã¢ã»ããã§äœ¿çšãããŠããããç解ããã«ã¯ãã¹ã¯ãªãããæžãã®ã䟿å©ã§ãã
5. Firefoxãã£ãã·ã¥
ããŒã«ã«ãµãŒããŒãšFirefoxã䜿çšããŠãããžã§ã¯ãããããã°ããå Žåããã©ãŠã¶ãŒãWebGLãããžã§ã¯ãã®äžéšã誀ã£ãŠãã£ãã·ã¥ãããšããäºå®ã«ééããŸãã
ã·ããªãªã¯æ¬¡ã®ãšããã§ãã
ããŒãžã§ã³1ãäœæããŠå®è¡ããŸããåäœããŸãã 次ã«ãããŒãžã§ã³2ãäœæããŸããèµ·åãããšãç解ã§ããªããšã©ãŒãçºçããŠã¯ã©ãã·ã¥ããŸãã
次ã®å Žæã§FFãã£ãã·ã¥ãæåã§ã¯ãªãŒãã³ã°ããããšã§åŠçãããŸãã
1ïŒCïŒ\ Users \ {NAME} \ Application Data \ Mozilla \ Firefox \ Profiles \ {PROFILE NAME} \ storage \ temporary \
ããã§ã¯ããã¹ãŠããã¹ãŠåé€ã§ããŸãã
2ïŒCïŒ\ãŠãŒã¶ãŒ\ {åå} \ã¢ããªã±ãŒã·ã§ã³ããŒã¿\ Mozilla \ Firefox \ãããã¡ã€ã«\ {ãããã¡ã€ã«å} \ã¹ãã¬ãŒãž\ããã©ã«ã\
ããã§ã¯ããµã€ãã®ã¿ãåé€ããå¿ èŠããããŸãã äŸãã°
ãHttp +++ 127.0.0.1 + 7888ã
泚ïŒããã¯ãHTTPãµãŒããŒã§äœæ¥ããŠããå Žåã«ã®ã¿çºçããŸãã ãã¡ã€ã«ãããããžã§ã¯ããéå§ããå Žåãåãã¡ã€ã«ãã¹ã®ãã£ãã·ã¥ãç°ãªãããããšã©ãŒã¯çºçããŸããã ãã ãããµãŒããŒã®å Žåããã¹ã«é¢ä¿ãªã1ã€ã®ãã£ãã·ã¥ã
6.ã¹ã¯ãªãããé·æéå¿çããŸããã ãããŠïŒ
Firefoxã¯ã»ãŒç¢ºå®ã«ããã«ã€ããŠå°ããŸãã ãããžã§ã¯ãã倧ããå Žåã¯ãäœåºŠãå°ããããšããããŸãã
ãã®åé¡ã®äžéšã¯ãWebGLã®åæåã«é¢ãã段èœã§èª¬æããŸããã ãã ããWebGLãããžã§ã¯ããã©ã®ããã«èªã¿èŸŒãŸããããªãŒãºãããã¹ã¯ãªãããæ®åœ±ãããã©ããããã©ãŠã¶ãèæ ®ããæéãç解ããããšãéèŠã§ãã
ã¹ã¿ãŒãã¢ããã¹ããŒãžïŒ
1ïŒãã©ãŠã¶ããµãŒããŒããããŒã¿ãããŠã³ããŒãããŠããŸãã ããã§ã¯äœãå éã§ããŸããããä»åã¯ãã©ãŠã¶ãå¶éããŸããã
2ïŒããŒã¿ã®å§çž®è§£é€ãé²è¡äžã§ãã
äŸïŒ
解åãªãªãŒã¹/ 100msã§w69.memgzã gzipå§çž®ã䜿çšããŠãã¡ã€ã«ããã¹ãããããã«WebãµãŒããŒãæ§æããå Žåããã®é 延ãåé€ã§ããŸãã UnityLoader.jsïŒ1ïŒ775
解åããããªãªãŒã¹/ 391msã§w69.jsgzã gzipå§çž®ã䜿çšããŠãã¡ã€ã«ããã¹ãããããã«WebãµãŒããŒãæ§æããå Žåããã®é 延ãåé€ã§ããŸãã UnityLoader.jsïŒ1ïŒ775
2764msã§è§£åããããªãªãŒã¹/ w69.datagzã gzipå§çž®ã䜿çšããŠãã¡ã€ã«ããã¹ãããããã«WebãµãŒããŒãæ§æããå Žåããã®é 延ãåé€ã§ããŸãã
説æãããããããã«ãé©åãªãµãŒããŒæ§æã䜿çšãããšã解åã¯ãã®å Žã§è¡ããããã®æéã¯ãŒãã«ãªããŸãã ãããã«ããããããå¶éãããŠããŸããã
3ïŒAsm.jsãã³ã³ãã€ã«ãããŠããŸãã
æ£åžžã«ã³ã³ãã€ã«ãããasm.jsã³ãŒãïŒåèšã³ã³ãã€ã«æé9088msããã£ãã·ã¥ã«ä¿åïŒ1 56937f89-a8fd-4b65-94aa-453e33be78d8
ã²ãŒã ã³ãŒãã¯ãŸã éå§ãããŠããªãããã5ã10ç§ããããŸããããã©ãŠã¶ã«éå®ãããŸããã
4ïŒãããŠãã²ãŒã ã³ãŒããå§ãŸããŸã
ãŸãããã©ãŠã¶ãŒã®èŠ³ç¹ããèŠããšãUnityã³ãŒãïŒWebGLåæåãªã©ïŒã¯ã²ãŒã èªäœã®ã³ãŒããšå€ãããŸããã ããã«ããããã¯1ã€ã®ããŒã¹ã§é£ç¶ããŠå®è¡ãããŸãã ãããã£ãŠãWebGLã®åæåãšãŠãŒã¶ãŒã³ãŒãã¯10ç§ã§æž¡ãããŸãã WebGLã®åæåæéã¯éåžžãåªããã³ã³ãã¥ãŒã¿ãŒã§ã¯4ã5ç§ä»¥äžççž®ã§ããªãããšãèæ ®ãããšããªã¹ã¯ãåé¿ãããŠãŒã¶ãŒã³ãŒãã®åæåæéãæå°éã«æããããšããå§ãããŸãã çæ³çã«ã¯ã圌ã¯äœãããã¹ãã§ã¯ãããŸããã ããããã²ãŒã ãåæåããæ¹æ³ã¯ïŒ 延æããããšãã§ããŸãã ããšãã°ã次ã®ããã«ïŒ
void Awake() { DontDestroyOnLoad(gameObject); StartCoroutine(Init()); } IEnumerator Init() { yield return new WaitForSeconds(0.1f); // }
ãã€ã³ãã¯ãããã«å¶åŸ¡ããã©ãŠã¶ã«æ»ãã0.1ç§ã§ã³ãŒããå®è¡ããããšã§ãã ãã®ãããªããªãã¯ã®åŸããã©ãŠã¶ã¯åã³10ç§ã®ã«ãŠã³ãããŠã³ãéå§ããŸãã ãããã£ãŠãåæåãé·ãå Žåã¯ãåãæ¹æ³ã§éšåã«åå²ãç¶ããããšãã§ããŸãïŒãã ããåæåãæžããããšããå§ãããŸã-ãŠãŒã¶ãŒã¯åŸ ã€ã®ãå«ããŸãïŒã
æåŸã«ãé£ç¶ã¹ã¯ãªããå®è¡ã®10ç§ã®å¶éã¯ãåæåäžã ãã§ãªãé©çšãããŸãã
7.ãã³ãã«ã®äœ¿çš
ã¢ã»ãããã³ãã«ã䜿çšããå Žåãã²ãŒã èªäœãšåããµãŒããŒããããŠã³ããŒãããå¿ èŠãããããšã«æ³šæããããšãéèŠã§ãã ããããªããšãåäžãªãªãžã³ããªã·ãŒã«éåããããæ©èœããŸããã
2çªç®ã®ãã€ã³ãã¯ãããŒãåŸã®ãã³ãã«ã®è§£åã®é 延ãåé¿ããããã«ããã³ãã«ã®äœææã«gzïŒããã©ã«ãïŒã§ã¯ãªãlz4ã䜿çšããããšããå§ãããŸãã
// ChunkBasedCompression ( lz4) BuildPipeline.BuildAssetBundles (outputPath, BuildAssetBundleOptions.ChunkBasedCompression, EditorUserBuildSettings.activeBuildTarget);
8. 512 mbã®å¶é
ç§ã®ãã·ã³ã§ã¯ããã©ãŠã¶ã¯ã²ãŒã ã«512MB以äžãå²ãåœãŠãããšãã§ããŸããã§ããã ãã·ã³ã«ã¯å€ãã®ã¡ã¢ãªããããŸããã WebGLã§ã³ã³ãã€ã«ãããã²ãŒã ã«512MB以äžã®ã¡ã¢ãªãå²ãåœãŠãå¿ èŠã¯ãªããšæããŸãã ãããŠãã²ãŒã èªäœã¯ãããååã§ããããã«è¡ãããå¿ èŠããããŸãã çæ³çã«ã¯ãéåžžã¯ããã©ã«ãã§256MBã®ãŸãŸã«ããŸãã
9.ã¹ããªãããšã³ãžã³ã³ãŒã
ã¹ããªãããšã³ãžã³ã³ãŒãã¯ãã«ãèšå®ã®ãã§ãã¯ããŒã¯ã§ãããUnityã¯ã¢ã»ã³ããªããæªäœ¿çšã®ã·ã¹ãã ã¹ã¯ãªãããç Žæ£ããŸãã
ããã«ãããã¢ã»ã³ããªã®ç·äœç©ãå€§å¹ ã«åæžã§ããŸãã ããã§ã®åé¡ã¯ãäžéšã®ã³ãŒãããã³ãã«ã«å ¥ãã¢ã»ããã«ãã£ãŠã®ã¿äœ¿çšãããå Žåããããã¹ããŒãããããšã§ãã ãããŠãæçµã¢ã»ã³ããªã¯æ©èœããŸããã ãããŠäŸå€ã¯çµ¶å¯Ÿã«ç解ã§ããªãã§ãããã
çµè«ïŒ
1ïŒç解ã§ããªãäŸå€ãçºçããå Žåã¯ããã®ãã§ãã¯ããŒã¯ãå€ããŠåéããŠã¿ãŠãã ããã
2ïŒã³ãŒãå ã®ãã³ãã«ã®ã¢ã»ããã«å¿ èŠãªã¹ã¯ãªãããçŽæ¥äœ¿çšããããç¹å¥ãªUnityæ©èœã§ããlink.xmlãã¡ã€ã«ã䜿çšã§ããŸãã
10.éçºè ãã«ã-é«éãã«ãã¯ãããŸããïŒ
éçºè ãã«ãããã«ãããå Žåãã¯ã€ãã¯ãã«ããšé«éå®è¡ã®ãããããéžæã§ããŸãã å®éãé«éã¢ã»ã³ããªã¯ã»ãŒåãïŒèšå€§ãªïŒæéãèŠããåæã«ãã¡ã¢ãªäžè¶³ã®ããã«å€§èŠæš¡ãªãããžã§ã¯ãã§ã¯ãŸã£ããæ©èœããªãããšããããããŸãã 䜿ããªãã»ãããã
11.ã¯ã©ã³ããã¯ã¹ãã£
WebGLã®ãããžã§ã¯ãã§ã¯ãåžžã«ã¯ã©ã³ããã¯ã¹ãã£ã䜿çšããŸãã ããããªããšãã²ãŒã ã®ããªã¥ãŒã ãWebã¢ããªã±ãŒã·ã§ã³ã«å¯ŸããŠäžåœã«å€§ãããªããŸãã
åãã¯ã¹ãã£ã®ã¿ã€ããæåã§èšå®ããªãããã«ããã®ææ³ã䜿çšã§ããŸãïŒOnPostprocessTextureã¡ãœããããªãŒããŒããŒãããå¿ èŠããããŸãïŒã
ãããã12çªç®ã®åé¡ã¯ãããŸãããã12åã®åé¡ãã¯11åãããé©åã«èãããŸãã
2017幎6æ1æ¥ããã®æŽæ°ïŒ
ãŸã 12çªç®ã®åé¡ããããŸãã Unityãã©ã°ã€ã³ãšWebGLãã©ã°ã€ã³éã§æååãã©ã¡ãŒã¿ãŒãæž¡ãããšã«é¢é£ä»ããããŠããŸãã Unityããwebglã«æååãæž¡ãããšã¯ããŸãæ©èœããŠããŸãã ããããå察ã«-åžžã«ã§ã¯ãããŸããã
Unityã¯ã次ã®ãããªã¹ããããã®äœ¿çšãæšå¥šããŠããŸãã
var buffer = _mallocïŒval.length + 1ïŒ;
writeStringToMemoryïŒvalãbufferïŒ;
ããã§ãvalã¯javascriptã®æååã§ãã
ããã¯ãæååã®é·ãããã®äžã®ãã€ãæ°ãšäžèŽããéãæ©èœããŸãã è¡ã«éãã€ãæåïŒãã·ã¢èªãªã©ïŒãèŠã€ãããšããã«ããã®ã³ãŒãã«ãããå²ãåœãŠãããã¡ã¢ãªã®å€åŽã«æžã蟌ã¿ãè¡ãããŸããããã¯ãä»»æã®å Žæã§ã¢ããªã±ãŒã·ã§ã³ãã©ã³ãã ã«ã¯ã©ãã·ã¥ããããšã§è¡šãããŸãã
ãã®ãããæååãlatin1ã®æåã®ã¿ã䜿çšããããã«ãšã³ã³ãŒãã䜿çšããããæååå ã®æåã§ã¯ãªããã€ãæ°ã䜿çšããããã«ãã®ã¹ãããããæžãæããŸãã