æè¿ãéçºäžã®Unity 3Dã®1ã€ã®ã²ãŒã ã§ã¯ã
DLCã·ã¹ãã ãè¿œå ããå¿
èŠããããŸããã ããã¯åœåã®ããã«åçŽã§ã¯ãããŸããã§ããããçºçããåé¡ã«ããŸã察åŠããã²ãŒã ã¯ãŽãŒã«ãã«ãªããŸããã ãã®èšäºã§ã¯ãDLCå®è£
ã®ããŒãžã§ã³ã玹ä»ããçºçããåé¡ãšãã®è§£æ±ºæ¹æ³ã«ã€ããŠèª¬æããŸãã
åé¡ã®å£°æ
ã²ãŒã ã«ã¯ããã¬ã€ã€ãŒãã²ãŒã ãå®éã®é貚ã®ããã«ç©ãè²·ãåºããããŸãã ã¹ãã¢ã«ã¯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) {
åæ§ã«ããã¯ã¹ãã£ããªã¯ãšã¹ããããšãã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ããã¥ã¢ã«ã®ã³ãŒãã«åŸã£ãŠãããè¡ããŸãã 次ã«ãããŠã³ããŒãããããŒã¿ãå°æ¥äœ¿çšããããã«ãã£ã¹ã¯äžã®ãã¡ã€ã«ã«æžã蟌ã¿ãŸãã
ãã®ã³ãŒãã䜿çšãããšãiPhone 3GSã®ãããªäœãããã€ã¹ã§ã¡ã¢ãªã¯ã©ãã·ã¥ãçºçããå¯èœæ§ãéåžžã«é«ããªããŸãã WWWã¯ã©ã¹ã¯ãããã¡ãªã³ã°ãããèªã¿èŸŒã¿ããµããŒããããèªã¿èŸŒãŸãããã¹ãŠã®æ
å ±ãã¡ã¢ãªã«ä¿åããŸãã ãã®åé¡ã«ã€ããŠã¯åŸã»ã©èª¬æããŸãã ãã®ç¬éãæãåºããŠå
ã«é²ã¿ãŸãã
- DLCãããªãœãŒã¹ãããŒãããŠããŸãã
次ã«ãGetTextureFromDLCïŒïŒãGetAssetFromDLCïŒïŒãããã³GetTextFileFromAllDLCsïŒïŒé¢æ°ãå®çŸ©ããå¿
èŠããããŸãã åŸè
ã®å®çŸ©ã¯çç¥ããŸãããªããªã ããŒãããããªãœãŒã¹ã®ã¿ã€ããé€ããŠãæåã®ãã®ãšã»ãšãã©å€ãããŸããã
GetTextureFromDLCé¢æ°ã®äž»ãªã¿ã¹ã¯ã¯ãDLCããååã§ãã¯ã¹ãã£ãåæçã«ããŒãããããšã§ãã
次ã®ããã«å®çŸ©ããŠã¿ãŸãããã
public Texture GetTextureFromDLC(String textureName) {
äžèšã®ã³ãŒãã¯ããããŸã§ã®ãšããã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ãããŒããŠã³ïŒé
延ïŒã§ããã ã¢ããªã±ãŒã·ã§ã³ã®ã¡ã¢ãªæ¶è²»ã®ããŒã¯å€ããããã«å¢å ããŸããã
ãæž
èŽããããšãããããŸããã ã質åã«ãçãã§ããããšãå¬ããæããŸãã