åé¡ã®å£°æ
ã²ãŒã ã«ã¯ããã¬ã€ã€ãŒãã²ãŒã ãå®éã®é貚ã®ããã«ç©ãè²·ãåºããããŸãã ã¹ãã¢ã«ã¯200ãè¶ ããã¢ã€ãã ããããŸãã ãã¬ã€ã€ãŒãã²ãŒã ã«åå ãããšãã¹ãã¢ã§20åã®ã¢ã€ãã ãå ¥æã§ããŸãã ã€ã³ã¿ãŒããããããå ŽåããŠãŒã¶ãŒã®ç¥èã®ãªãã²ãŒã ã¯ãµãŒããŒã«DLCãããŒãªã³ã°ããããããã°ãããã¯ã°ã©ãŠã³ãã§ããŠã³ããŒãããŸãã ãã¬ã€ã€ãŒãã¹ãã¢ã«åå ¥åºãããšãDLCã®ãã¹ãŠã®æ°ããã¢ã€ãã ã衚瀺ãããŸãã
ãŸã å Žæã®ã»ããããããŸãã åå Žæã«ã¯ããã¯ã¹ãã£ãš.assetãã¡ã€ã«ã®ã»ããããããŸãã DLCãéããŠæ°ããå Žæãè¿œå ããå¿ èŠããããŸãã
DLCããã®ãªãœãŒã¹ã®ããŒãã¯åæããå¿ èŠããããŸãã
ãã©ãããã©ãŒã ïŒiOSïŒiPhone 3GS以éïŒããã³AndroidïŒSamsung Galaxy S以éïŒã
DLCã³ã³ãã³ããšã²ãŒã å ã§ã®äœæ¥
ã²ãŒã ã§ã¯ãç©äºã¯ã¢ã€ãã ããŒã¿ãšãã®ãã¯ã¹ãã£ã«é¢ããæ å ±ãå«ãitemdata.txtãã¡ã€ã«ã«ãã£ãŠå®å šã«æ±ºå®ãããŸãã ããã¯ãåDLCã«ããããã®äºæã®DLC +ãã¹ãã«å«ãŸããŠããäžé£ã®äºæãå«ãitemdata.txtãã¡ã€ã«ãããããšãæå³ããŸãã ã¹ãã¢ãç©äºã®ããŒã¿ããŒã¹ãèŠæ±ãããšããã¹ãŠã®DLCããã®ãã¹ãŠã®ããã¹ããã¡ã€ã«ãæ¥çãããã®ãã¡ã€ã«ãæäŸããŸãã
åæ§ã«ãå Žæã«ã€ããŠã¯ãå Žæã®ãªã¹ããšç¹æ§ãå«ãlocationdata.txtãã¡ã€ã«ãšããããã®ãã¯ã¹ãã£ãšã¢ã»ãããã¡ã€ã«ããããŸãã
ã²ãŒã ããžãã¯ã§ãªãœãŒã¹ãããŒãããããã®å¯Ÿå¿ããCïŒã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
public String GetItemDataBase() { if(DLCManager.isDLCLoaded() == true) { // itemdata.txt DLC string String itemListStr = DLCManager.GetTextFileFromAllDLCs(âitemdataâ); return itemListStr; } else { // TextAsset itemTextFile = Resources.Load(âitemdataâ) as TextAsset; return itemTextFile.text; } return String.Empty; }
åæ§ã«ããã¯ã¹ãã£ããªã¯ãšã¹ããããšããDLCã§ãã®ååšããã§ãã¯ããŸãã ååšããå Žåã¯ãã²ãŒã ãªãœãŒã¹ããããŒãããŸãã ååšããªãå Žåã¯ãããã©ã«ãã®ãã®ãããŒãããŸãã
public Texture GetTexture(string txname) { Texture tx = null; if(DLCManager.isDLCLoaded() == true) { tx = DLCManager.GetTextureFromDLC(txname); } if(tx == null) { tx = Resources.Load(txname) as Texture; } if(tx == null) { Assert(tx, âTexture not find: â + txname); tx = Resources.Load(kDefaultItemTexturePath) as Texture; } return tx; }
åæ§ã«ã.assetãã¡ã€ã«ã®å ŽåãGetAssetïŒstring assetNameïŒé¢æ°ããããŸãã ãã®å®è£ ã¯äŒŒãŠããã®ã§ãã¹ãããããŠãã ããã
DLCãã¡ã€ã«
DLCã®å 容ã決å®ããŸããã æ ŒçŽãããã®ãäœã§ãããã決å®ããããšã¯æ®ã£ãŠããŸãã
æåã®ãªãã·ã§ã³ã¯ãDLCãzipã¢ãŒã«ã€ããšããŠä¿åããããšã§ãã åã¢ãŒã«ã€ã-ããã¹ããã¡ã€ã«+ Nãã¯ã¹ãã£ã ãããªã¡ã¢ãªãç¯çŽããã«ã¯ããã¯ã¹ãã£ãPVRTC圢åŒã«ããå¿ èŠããããŸãã ããããããã§æåã®åé¡ããããŸã-Unityã¯ãPNGãŸãã¯JPG圢åŒã®ãã¡ã€ã«ã·ã¹ãã ããã®ãã¯ã¹ãã£ã®ããŠã³ããŒãã®ã¿ããµããŒãããŠããŸã[ link ]ã ãã®åŸããã¯ã¹ãã£ãPVRTCãã¯ã¹ãã£[ link ]ã«æžã蟌ãããšãã§ããŸãã ããã¯é ãããã»ã¹ã§ã ãªã¢ã«ã¿ã€ã ã§PVRã«å€æããå¿ èŠããããŸãã ãŸãã .assetã¿ã€ãã®ãã¡ã€ã«ãDLCã«ãããããã²ãŒã ã¬ãã«ïŒ.sceneïŒã«ä¿åããããšãèšç»ãããŠããããããã®ãããªæ¹æ³ã¯å®å šã«äžé©åã§ãã
2çªç®ã®ãªãã·ã§ã³ã¯ã AssetBundleã䜿çšããããšã§ã ã ãã®ãœãªã¥ãŒã·ã§ã³ã¯ãã²ãŒã ã®DLCã«æé©ã§ãã
ããã¥ã¡ã³ãããå€æãããšãå€ãã®å©ç¹ããããŸãã
- å¿ èŠãªãã¯ã¹ãã£åœ¢åŒã«å§çž®ããããã®ãå«ããUnityãªãœãŒã¹ãä¿åã§ããŸãã
- ããã¯å§çž®çã®é«ãã¢ãŒã«ã€ãã§ãã
- ã·ã³ãã«ã§äœ¿ããããã
- ããŒãžã§ã³ãã©ã¡ãŒã¿ãŒãšããã·ã¥éïŒLoadFromCacheOrDownloadé¢æ°ã«ãã£ãŠèªã¿èŸŒãŸããå ŽåïŒããµããŒãããŸããããã¯ãDLCã®ããŒãžã§ã³ç®¡çã«äŸ¿å©ã§ãã
ãã€ãã¹ã®ãã¡ããã®AssetBundleã®ã¿ãUnityã®ProããŒãžã§ã³ãå¿ èŠãšãã æå·åããµããŒãããŠããŸãã ã ç§ãã¡ã¯ãã®æ±ºå®ã«ãã ããããšã«ããŸããã æããã«é åçã§ããããã¹ãŠã®åé¡ã解決ã§ããŸãã
å®è£ ïŒãªãã·ã§ã³1ïŒ
ãŸããæãåºæ¬çãªæ©èœãåããDLCã·ã¹ãã ã®ãã¹ãããŒãžã§ã³ãäœæãããŸããã
æåã«ãã¹ãã¢ã¢ã€ãã ãšãã±ãŒã·ã§ã³ãã¡ã€ã«ã®200å¥æ°ã®ãã¯ã¹ãã£ããã¹ãŠ1ã€ã®AssetBundleã«ããã¯ããããµãŒããŒã«ã¢ããããŒããããŸããã ãã¡ã€ã«ã¯çŽ200 mbã§ããããšãå€æããŸããã AssetBundleã§ã®ããã±ãŒãžåã¯ããšãã£ã¿ãŒã®ã¹ã¯ãªããã«ãã£ãŠå®è¡ãããŸããã AssetBundleã§ãªãœãŒã¹ããã±ãŒãžãäœæããæ¹æ³ã¯ãããã¥ã¡ã³ãã§è©³ãã説æãããŠããŸãã ãŸããã¹ã¯ãªããã䜿çšããŠAssetBundleãäœæããããšãã§ããŸã ã
次ã«ãã²ãŒã ãéå§ããåŸã次ã®æé ãå®è¡ããŸãã
- ãŸãããµãŒããŒããDLCãããŠã³ããŒãããå¿
èŠããããŸãã Unityããã¥ã¢ã«ã®ã³ãŒãã«åŸã£ãŠãããè¡ããŸãã 次ã«ãããŠã³ããŒãããããŒã¿ãå°æ¥äœ¿çšããããã«ãã£ã¹ã¯äžã®ãã¡ã€ã«ã«æžã蟌ã¿ãŸãã
// Start a download of the given URL using assetBundle version and CRC-32 Checksum WWW www = WWW.LoadFromCacheOrDownload (urlToAssetBundle, version, crc32Checksum); // Wait for download to complete yield return www; // Get the byte data byte[] byteData = www.bytes; // , byteData = MyDescriptionMethod(byteData); // byteData .unity3d ... // Frees the memory from the web stream www.Dispose(); //DLC DLCManager.SetDLCLoaded(true);
ãã®ã³ãŒãã䜿çšãããšãiPhone 3GSã®ãããªäœãããã€ã¹ã§ã¡ã¢ãªã¯ã©ãã·ã¥ãçºçããå¯èœæ§ãéåžžã«é«ããªããŸãã WWWã¯ã©ã¹ã¯ãããã¡ãªã³ã°ãããèªã¿èŸŒã¿ããµããŒããããèªã¿èŸŒãŸãããã¹ãŠã®æ å ±ãã¡ã¢ãªã«ä¿åããŸãã ãã®åé¡ã«ã€ããŠã¯åŸã»ã©èª¬æããŸãã ãã®ç¬éãæãåºããŠå ã«é²ã¿ãŸãã
- DLCãããªãœãŒã¹ãããŒãããŠããŸãã
次ã«ãGetTextureFromDLCïŒïŒãGetAssetFromDLCïŒïŒãããã³GetTextFileFromAllDLCsïŒïŒé¢æ°ãå®çŸ©ããå¿ èŠããããŸãã åŸè ã®å®çŸ©ã¯çç¥ããŸãããªããªã ããŒãããããªãœãŒã¹ã®ã¿ã€ããé€ããŠãæåã®ãã®ãšã»ãšãã©å€ãããŸããã
GetTextureFromDLCé¢æ°ã®äž»ãªã¿ã¹ã¯ã¯ãDLCããååã§ãã¯ã¹ãã£ãåæçã«ããŒãããããšã§ãã
次ã®ããã«å®çŸ©ããŠã¿ãŸãããã
public Texture GetTextureFromDLC(String textureName) { // DLC . . AssetBundle asset = AssetBundle.CreateFromFile(pathToAssetBundle); // DLC Texture texture = asset.Load(textureName) as Texture; // texture asset.Unload(false); return texture; }
äžèšã®ã³ãŒãã¯ããããŸã§ã®ãšãããAssetBundleãããªãœãŒã¹ãåæçã«ããŒãããå¯äžã®æ¹æ³ã§ãã çµå±ã®ãšãããå€ãã®ãã¥ã¢ã³ã¹ããããŸãã é çªã«äžŠã¹æ¿ããŸãããã
ããã¥ã¡ã³ãã«åŸã£ãŠ
AssetBundle.CreateFromFile
é¢æ°ã¯ããã£ã¹ã¯ããã¢ã»ãããåæçã«ããŠã³ããŒãããŸãã ãã ããããã®é¢æ°ã§ã¯éå§çž®ã®ã¢ã»ãããã³ãã«ã®ã¿ããµããŒããããŸããããšããèŠåã1ã€ãããŸãããããã£ãŠãéå§çž®ã®AssetBundleã®ã¿ãåæçã«ããŒãã§ããŸãã ããã«ããããµãŒããŒããã®ãã©ãã£ãã¯ãšDLCã®èµ·åæéãå€§å¹ ã«å¢å ããŸãã ããã«ãUnityã¯AssetBundleãå§çž®ããéå§çž®ã«å€æããããšããµããŒãããŠããªããããå§çž®ããããã³ãã«ãããŠã³ããŒãããŠã¯ã©ã€ã¢ã³ãã§è§£åããããšã¯ã§ããŸããã
èªè ã¯ãããšãã°LoadFromCacheOrDownloadé¢æ°ã䜿çšããŠAssetBundleãéåæã«ããŒãããå¿ èŠãªãªãœãŒã¹ãåæçã«ååŸããªãã®ã¯ãªãããšæããããããŸããã çµå±ã®ãšãããAssetBundleã¯ããã¡ã€ã«ã·ã¹ãã ããããŒããããšãã«ããã¡ã€ã«ããããŒã®ã¿ãããŒãããå¿ èŠããããããã¡ã¢ãªã§å°ãå æããå¿ èŠãããã®ã¯è«ççã§ãã
ããããããã§ã¯ãããŸããã§ããã ããŒããããAssetBundleã¯ããã¹ãŠã®ã³ã³ãã³ããå±éãããç¶æ ã§ã¡ã¢ãªã«ä¿åãããŸãã ãããã£ãŠã200ãã1ã€ã®ãã¯ã¹ãã£ãããŒãããã«ã¯ãUnityã¯200ã®ãã¯ã¹ãã£ãã¹ãŠãã¡ã¢ãªã«ããŒããã1ã€ãåããæ®ãã®199ã®ãã¯ã¹ãã£ã®ããã«ã¡ã¢ãªã解æŸããŸãã ããã¯ãããã€ã¹ã®ã¡ã¢ãªã枬å®ããããšã§å®éšçã«ããããŸããã
æããã«ãããã¯ã¢ãã€ã«ããã€ã¹ã§ã¯åãå ¥ããããŸããã
ãŸãšã
äžãããããªãã·ã§ã³ã¯ãDLCãšããããã®ãªãœãŒã¹ã®åæããŒããå®è£ ããããã®å¯äžã®æ¹æ³ã§ãã
éå§çž®ã®AsssetBundleãå¿ èŠã§ãããDLCã®ããŒãæã«æéãšãã©ãã£ãã¯ãå€§å¹ ã«å€±ãããŸãã
ãã®ãªãã·ã§ã³ã¯ãæ¯èŒçå°ããªAssetBundlesã«é©ããŠããŸãã 倧éã®RAMãæ¶è²»ããŸãã
ãã°ã®åŠçïŒãªãã·ã§ã³2ïŒ
以åã®åé¡ããã¹ãŠèæ ®ã«å ¥ããŠããããã®è§£æ±ºçãèŠã€ããŸãããã
倧èŠæš¡ãªAssetBundleã®ããŒãã«é¢ããåé¡ã¯ã2ã€ã®æ¹æ³ã§è§£æ±ºã§ããŸãã
1ã€ç®ã¯ãWebClientã¯ã©ã¹ã䜿çšããããšã§ãã ãã ããiOSã§ã¯åé¡ããããŸããã WebClientã¯äœãããŠã³ããŒãã§ããŸããã§ãããããã¹ã¯ãããäžã§ã¯å®å šã«æ©èœããŸããã
2çªç®ã®ãªãã·ã§ã³ã¯ããã€ãã£ãOSæ©èœã䜿çšããããšã§ãã ããšãã°ãiOSã®NSURLConnectionãšAndroidã®URLConnectionã¯ãããããããã£ã¹ã¯äžã®ãã¡ã€ã«ãžã®çŽæ¥çãªãããã¡ãŒããŒãããµããŒãããŠããŸãã
ããããããã¯ããã»ã©å€§ããªåé¡ã§ã¯ãããŸããã ãããã®å Žåã§ããåæããŒãã®ããã«AssetBundleã®ãµã€ãºãå°ããããå¿ èŠããããŸãã ãããã£ãŠãä»ã®ãšããããµãŒããŒãããã³ãã«ãããŠã³ããŒãããçŸåšã®æ¹æ³ã¯æ®ããŸããã
ããã«æ·±å»ãªåé¡ã¯ãAssetBundleã®åæããŒãã§ãã ãªããªã å§çž®ãããŠããªãã ãã§ãªããã¡ã¢ãªé åãã»ãšãã©å æããªãããã1ã€ã®å€§ããªDLCãã¡ã€ã«ãããã€ãã®å°ããªãã¡ã€ã«ã«åå²ããå¿ èŠããããŸãã ãã ããããŸãã«ãå°ããªãã¡ã€ã«ã«åå²ãããšããããã®ãã¡ã€ã«ãå€ããªããããŒãæéãå€§å¹ ã«å¢å ããŸãã ãã¡ã€ã«ããšã«åæ¥ç¶ããå¿ èŠããããŸãã ãã®ãããããŒãæéãšãã©ãã£ãã¯ãç¯çŽããããã«ãå§çž®ãããŸãŸã«ããå¿ èŠããããŸãã
ãã®åé¡ã解決ããããã«ãç¬èªã®ã¢ãŒã«ã€ãã䜿çšããããšã決å®ãããŸããã CïŒçšã®ãªãŒãã³ã¢ãŒã«ã€ãã©ã€ãã©ãªãéžæãããŸãããããã¯ãåŽåããããã«ãUnityã®Monoã®äžã§ãã«ããããããšãå€æããŸããã
ããã«ãã¢ã¯ã·ã§ã³ã®ã¢ã«ãŽãªãºã ã¯æ¬¡ã®ãšããã§ãã
- ãã³ãã«ãäœæãããšãã«ãéå§çž®ãã³ãã«ãååŸããããã«BuildOptions.UncompressedAssetBundleãªãã·ã§ã³ãæå®ãããŸããã
- 次ã«ãã¢ãŒã«ã€ãã«ãã£ãŠãã³ãã«ãã¢ãŒã«ã€ãããã³æå·åããããµãŒããŒã«ã¢ããããŒããããŸããã
- ã¢ããªã±ãŒã·ã§ã³ã®å®è¡äžã«ãå¥ã®ã¹ããªãŒã ãäœæãããããã¯ã°ã©ãŠã³ãã§ãã³ãã«ããã³ãã§åãåºãããã¢ã³ããã¯ãããŠç¹å¥ãªãã©ã«ããŒã«é 眮ãããŸããã
ããã§å¥ã®åé¡ããããŸããã ãªããªã ã¢ãŒã«ã€ãã«ãã£ãŠå§çž®ããããã³ãã«ã䜿çšããããã«ãªã£ããããLoadFromCacheOrDownloadé¢æ°ã§å§çž®ããããšã¯ã§ããªããªããŸããã ãããã£ãŠãDLCçšã«ç¬èªã®ããŒãžã§ã³ç®¡çã·ã¹ãã ãå®çŸ©ããå¿ èŠããããŸãã
DLCããŒãžã§ã³ç®¡çã·ã¹ãã ã§ã¯ã次ã®ãœãªã¥ãŒã·ã§ã³ãéžæãããŸããã ãµãŒããŒã§ãDLCãã¡ã€ã«ãé 眮ãããŠãããã©ã«ããŒã§ãdlcversionããã¹ããã¡ã€ã«ãéå§ããŸããã ãã©ã«ããŒå ã®DLCã®ãªã¹ããšãããã®md5ããã·ã¥ãå«ãŸããŠããŸããã ãããã®ããã·ã¥ã¯ããµãŒããŒãžã®DLCã¢ãã¬ããã®æ®µéã§èæ ®ãããŸããã ã¯ã©ã€ã¢ã³ãã¯ãŸã£ããåããã¡ã€ã«ãæã£ãŠããŠãã¢ããªã±ãŒã·ã§ã³ã®èµ·åæã«ãã¯ã©ã€ã¢ã³ãã¯ãã®ãã¡ã€ã«ããµãŒããŒäžã®ãã¡ã€ã«ãšæ¯èŒããŸããã DLCãã¡ã€ã«ã«åªããããã·ã¥ãå«ãŸããŠããããããã·ã¥ããŸã£ãããªãå Žåãã¯ã©ã€ã¢ã³ãäžã®ãã¡ã€ã«ã¯å€ããã¯ã©ã€ã¢ã³ãã¯ãµãŒããŒããæ°ããDLCãã¡ã€ã«ããã«ãããšèããããŠããŸããã
æ°ããDLCãã¡ã€ã«ãããŠã³ããŒããããŠè§£åãããåŸããã®ããã·ã¥ããµãŒããŒ1ã§ããäžåºŠãã§ãã¯ããããã®åŸãå€ããã¡ã€ã«ãæ°ãããã¡ã€ã«ã§çœ®ãæãããã察å¿ãããšã³ããªãã¯ã©ã€ã¢ã³ãdlcversionãã¡ã€ã«ã«äœæãããŸããã
説æããã·ã¹ãã ã¯æ£åžžã«å®è£ ãããæ£åžžã«æ©èœããŠããŸãã å¯äžã®æ¬ ç¹ã¯ãããã¯ã°ã©ãŠã³ãã§DLCãããŠã³ããŒãããã³ã¢ã³ããã¯ããéã®å°ããªfpsãããŒããŠã³ïŒé 延ïŒã§ããã ã¢ããªã±ãŒã·ã§ã³ã®ã¡ã¢ãªæ¶è²»ã®ããŒã¯å€ããããã«å¢å ããŸããã
ãæž èŽããããšãããããŸããã ã質åã«ãçãã§ããããšãå¬ããæããŸãã