ãUnityã§3æéã§ã²ãŒã ãäœæããæ¹æ³ãããå€æ¹ã«ã«ãŠã³ã¿ãŒã¹ãã©ã€ã¯ãè¡ãããªã©ã®ããã¥ã¢ã«ã¯ããã€ãããŸããïŒ äœããšã³ããªãŒãããå€ã¯ãééããªãUnityã®äž»ãªãã©ã¹ãšãã€ãã¹ã§ãã å®éããã¢ã»ããããæããããã€ãã®åçŽãªãã¹ã¯ãªããããè¿œå ããããããéãé»æ°ããŒãã§å ããšãã©ããããããæ©èœããŸãã ãããããããžã§ã¯ããè€éãªåäœããžãã¯ã§ããã²ãŒã ã¡ã«ãã¯ã¹ã§å€§ãããªããããå Žåããã®ã¢ãããŒãã®åé¡ã¯éªã ããŸã®ããã«å¢å ããŸãã æ°ããã¡ã«ããºã ã®å°å ¥ã«ã¯ãå€ãã®å Žæã§ã³ãŒããæžãçŽããããžãã¯ã³ã³ããŒãã³ããžã®ãªã³ã¯ãå£ããŠããããããã¬ããã絶ãããã§ãã¯ããŠããçŽãå¿ èŠããããŸãããã¡ãããããããã¹ãŠã®æé©åãšãã¹ãã¯å¿ èŠã§ãã ãã¡ãããã¢ãŒããã¯ãã£ã¯æåã«èãåºãããšãã§ããŸãããå®éã«ã¯ããã¯åžžã«éæäžå¯èœãªç®æšã§ã-èšèšããã¥ã¡ã³ãã¯é »ç¹ã«å€æŽãããäžéšã¯ç Žæ£ããããŸã£ããæ°ãããã®ãè¿œå ãããå€ãåäœããžãã¯ãšã¯é¢ä¿ãããŸããã Unityã®ã³ã³ããŒãã³ãã¯ãã³ãŒããåé¢ããããããã¯ã«å解ãããšãã圢ã§ã®æ£ããæ¹åãžã®äžæ©ã§ãããå®è£ æ©èœã§ã¯å¿ èŠãªæè»æ§ããããŠæãéèŠãªããã©ãŒãã³ã¹ãéæããããšã¯ã§ããŸããã éçºè ã¯ç¬èªã®ãã¬ãŒã ã¯ãŒã¯ãšãã€ã¯ãèæ¡ããŸãããã»ãšãã©ã®å ŽåãECSïŒãšã³ãã£ãã£ã³ã³ããŒãã³ãã·ã¹ãã ïŒã«çŠç¹ãåœãŠãŸãã ECSã¯ãUnityã³ã³ããŒãã³ãã¢ãã«ã®ã¢ã€ãã¢ãç¶ç¶ãããœãªã¥ãŒã·ã§ã³ã®1ã€ã§ãããçŸåšã®ã³ãŒããå€§å¹ ã«å€æŽããããšãªããæè»æ§ãé«ãããªãã¡ã¯ã¿ãªã³ã°ãå€§å¹ ã«ç°¡çŽ åããæ°ããæ©èœã§ã¢ããªã±ãŒã·ã§ã³ãããã«æ¡åŒµããŸãã
ECSãšã¯
ECSã¯Entity Component Systemãã¶ã€ã³ãã³ãã¬ãŒãã§ãããElastic Cloud Storageãšæ··åããªãã§ãã ãã:)ã ç°¡åã«èšãã°ãã€ãŸããã ãšã³ãã£ã㣠ãã¯ããããã£ãæããªããããã³ã³ããŒãã³ããã®ãªããžããªãšããŠæ©èœããã³ã³ãããªããžã§ã¯ãã§ãã ã ã³ã³ããŒãã³ã ãã¯ãã²ãŒã ãªããžã§ã¯ããŸãã¯ã€ãã³ãã®ããããçš®é¡ã®ããããã£ãå®çŸ©ããããŒã¿ãããã¯ã§ãã ã³ã³ããã«ã°ã«ãŒãåããããã®ããŒã¿ã¯ãã¹ãŠãç¹å®ã®å®è¡ã¡ãœãããæã€ã ã·ã¹ãã ã-ãçŽç²ãã¯ã©ã¹ã®åœ¢åŒã§ã®ã¿ååšããããžãã¯ã«ãã£ãŠåŠçãããŸãã ãã®ãã¿ãŒã³ã¯ããšã³ãžã³ãã«äŸåãããããŸããŸãªæ¹æ³ã§å®è£ ã§ããŸãã ãã¹ãŠã®ããšã³ãã£ãã£ãããã·ã¹ãã ããããã³ãã³ã³ããŒãã³ããã¯ã©ããã«ä¿åããäœããã®æ¹æ³ã§åæåããå¿ èŠããããŸãããããã¯ãã¹ãŠãç¹å®ã®ããšã³ãžã³ãã«å¯ŸããåECSãœãªã¥ãŒã·ã§ã³ã®å®è£ ã®æ©èœã§ãã
åŸ ã£ãŠãã ããããšèšããŸãããUnityã§ã¯ããã§ãïŒ å®éãUnityã§ã¯ã ã Essence ãã¯GameObjectã§ããã ã Component ããšã System ãã¯MonoBehaviourã®çžç¶äººã§ãã ãããããããUnityã³ã³ããŒãã³ãã·ã¹ãã ãšECSã®äž»ãªéãã§ããECSã®ããžãã¯ã¯ããŒã¿ããåé¢ããå¿ èŠããããŸã ã ããã«ãããããŒã¿ãå£ãããšãªããããžãã¯ãéåžžã«æè»ã«å€æŽã§ããŸãïŒåé€/è¿œå ãå¯èœïŒã ãã1ã€ã®ããŒãã¹ã¯ãããŒã¿ãåã·ã¹ãã ã®ãã¹ããªãŒã ãã«ãã£ãŠåŠçãããããšã³ãžã³ãã§ã®å®è£ ã«é¢ä¿ãªããMonoBehaviourã®å Žåãããã€ãã£ããéšåãšã®çžäºäœçšãå€ããããã©ãŒãã³ã¹ã®äžéšã䜿ãæããããšã§ãã Unityã®å ¬åŒããã°ã§MonoBehaviourã®çžç¶äººããã¡ãœãããåŒã³åºãå éšããã€ã¹ã®æ©èœã«ã€ããŠèªãããšãã§ããŸãïŒ UpdateïŒïŒãžã®10000åŒã³åºã
ECSæäœã®äŸ
ãã¶ã€ããŒããã®ã¿ã¹ã¯ïŒããã¬ã€ã€ãŒããã€ã³ãXã«å°éãããããã¬ã€ã€ãŒã移åãããŠæ¬¡ã®ã¬ãã«ãããŒãããå¿
èŠããããŸããã
ã¿ã¹ã¯ããã·ã¹ãã ãããšã«1ã€ã®ãµãã¿ã¹ã¯ã«åå²ããŸãã
- UserInputSystem-ãŠãŒã¶ãŒå ¥åã
- MovePlayerSystem-å ¥åã«åºã¥ããŠãã¬ãŒã€ãŒã移åããŸãã
- CheckPointSystem-ãã¬ãŒã€ãŒããã€ã³ãã«å°éããããšã確èªããŸãã
- LoadLevelSystem-é©åãªã¿ã€ãã³ã°ã§ã¬ãã«ãããŒãããŸãã
ã³ã³ããŒãã³ããå®çŸ©ããŸãã
- UserInputEvent-ããŒã¿ã«é¢ãããŠãŒã¶ãŒå ¥åã®ååšã«é¢ããã€ãã³ãã ã¯ããã€ãã³ããã³ã³ããŒãã³ãã§ãïŒ
- ãã¬ãŒã€ãŒ - ãã¬ãŒã€ãŒã®çŸåšã®äœçœ®ãšåœŒã®é床ã®ã¹ãã¬ãŒãžã
- CheckPoint-ãããäžã®çžäºäœçšç¹ã
- LoadLevelEvent-æ°ããã¬ãã«ãããŒãããå¿ èŠæ§ã«é¢ããã€ãã³ãã
ãããŠããããã©ã®ããã«å€§ãŸãã«åäœãããã§ãïŒ
- ã·ãŒã³ãããŒãããããã¹ãŠã®ã·ã¹ãã ãäžèšã®ã·ãŒã±ã³ã¹ã§åæåãããŸãã ã¯ããã·ã¹ãã ã®åŠçé åºã¯è€éãªåããªãã§å¶åŸ¡ã§ããŸã-ããã¯ããäžã€ã®çŽ æŽãããããŒãã¹ã§ãã
- Playerãšã³ãã£ãã£ïŒ Playerã³ã³ããŒãã³ããè¿œå ïŒãšã³ã³ãããŒã«ãã€ã³ãã®ãšã³ãã£ãã£ïŒ CheckPointã³ã³ããŒãã³ããè¿œå ïŒãäœæãããŸãã
- ããã§ãåŠçã·ã¹ãã ã®ã¡ã€ã³ãµã€ã¯ã«ãéå§ãããŸã-åºæ¬çã«MonoBehaviour.Updateã¡ãœããã«é¡äŒŒããŠããŸãã
- UserInputSystemã¯ãæšæºã®Unity-apiãä»ãããŠãŒã¶ãŒå ¥åãæ€èšŒãã UserInputEventã³ã³ããŒãã³ããšå ¥åããŒã¿ïŒååšããå ŽåïŒãæã€æ°ãããšã³ãã£ãã£ãäœæããŸãã
- MovePlayerSystemã¯ã UserInputEventã³ã³ããŒãã³ããæã€ãšã³ãã£ãã£ããããã©ãããããã³Playerã³ã³ããŒãã³ããæã€ãšã³ãã£ãã£ããããã©ããã確èªããŸãã ãŠãŒã¶ãŒå ¥åãããå ŽåãèŠã€ãã£ããã¹ãŠã®ããã¬ãŒã€ãŒããïŒåä¿¡ããããŒã¿ã§ãã£ãŠãïŒåŠçãã UserInputEventã³ã³ããŒãã³ããæã€ãšã³ãã£ãã£ãå®å šã«åé€ããŸãã ã¯ããéåžžã«é«éã«åäœããã¬ããŒãžã³ã¬ã¯ã¿ãŒã¯åäœããŸãã-ãã¹ãŠãå éšããŒã«ã«éããããã®åŸåå©çšãããŸãã
- CheckPointSystemã¯ã CheckPointã³ã³ããŒãã³ããæã€ãšã³ãã£ãã£ããããã©ãããããã³Playerã³ã³ããŒãã³ããæã€ãšã³ãã£ãã£ããããã©ããã確èªããŸãã ãããšããã®äž¡æ¹ãããå Žå-ãµã€ã¯ã«ã§åãã¬ã€ã€ãŒãšãã€ã³ãéã®è·é¢ããã§ãã¯ããŸãã ããã¬ãŒã€ãŒãã®1ã€ãããªã¬ãŒããã®ã«ååè¿ãå Žåã LoadLevelEventã³ã³ããŒãã³ãã䜿çšããŠæ°ãããšã³ãã£ãã£ãäœæããŸãã
- LoadLevelSystemã¯ã LoadLevelEventã³ã³ããŒãã³ããæã€ãšã³ãã£ãã£ããããã©ããã確èªããååšããå Žåã¯æ°ããã·ãŒã³ãããŒãããŸãã ãã®ãããªã³ã³ããŒãã³ããæã€ãã¹ãŠã®ãšã³ãã£ãã£ã¯ããã®åã«åé€ãããŸãã
- åŠçã·ã¹ãã ã®ã¡ã€ã³ãµã€ã¯ã«ãç¹°ãè¿ããŸãã
UPDïŒ josinSbazin ããã®ãã¹ãã¿ã¹ã¯ã®å®è£ ãè¡ããŸãã ã
10è¡ã®1ã€ã®ãMonoBehaviourãã¯ã©ã¹ãšæ¯èŒãããšãã³ãŒããè€éãããããã«èŠããŸãããæåã¯æ¬¡ã®ãšããã§ãã
- å ¥åãä»ã®ããžãã¯ããåé¢ã§ããŸãã ããŒããŒãå ¥åã¢ãã«ãããŠã¹ãã³ã³ãããŒã©ãŒãã¿ããã¹ã¯ãªãŒã³ã«å€æŽããããšãã§ããæ®ãã®ã³ãŒãã¯å£ããŸããã
- çŸåšã®æ¹æ³ãå£ãããšãªãããã¬ãŒã€ãŒã®åŠçåäœãæ°ããæ¹æ³ã§æ¡åŒµã§ããŸãã ããšãã°ã1ã€ä»¥äžã®ã·ã¹ãã ãè¿œå ããç¹å®ã®ãšã³ãã£ãã£ã®Playerã³ã³ããŒãã³ãã§é床ãã©ã¡ãŒã¿ãŒãå€æŽããããšã«ããããããã«æžé/å éãŸãŒã³ãè¿œå ã§ããŸãã
- èšèšè ãèŠæ±ããããã«ã1ã€ã ãã§ãªãããããäžã«ä»»æã®æ°ã®ã³ã³ãããŒã«ãã€ã³ããé 眮ã§ããŸãã
- è€æ°ã®ãã¬ãŒã€ãŒã1ã€ã®æ¹æ³ã§å¶åŸ¡ããããšãã§ããŸãã BinaryLandã®ããã«ãã²ãŒã ã¡ã«ãã¯ã¹ã®äžéšã«ãªãããšããããŸãã
ECSæ©èœ
äžèšã®äŸã«åºã¥ããŠãUnityã³ã³ããŒãã³ãã¢ãã«ã«é¢ããECSã®äž»ãªæ©èœãæšæž¬ã§ããŸãã
é·æ
- æè»æ§ãšã¹ã±ãŒã©ããªãã£ïŒæ°ããã·ã¹ãã ã®è¿œå ãå€ãã·ã¹ãã ãšã³ã³ããŒãã³ãã®åé€ïŒã
- ã¡ã¢ãªã®å¹ççãªäœ¿çšïŒå®è£ ã®ç¹æ§ããMonoBehaviorããšã¯ç°ãªãããçŽç²ãªãCïŒã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã奜ããªããã«åå©çšã§ããŸãïŒã
- ãªããžã§ã¯ããžã®ç°¡åãªã¢ã¯ã»ã¹ïŒç¹å®ã®ã³ã³ããŒãã³ããæã€ãšã³ãã£ãã£ã®éžæïŒãã£ã«ã¿ãªã³ã°ïŒã¯ãé床ãšã¡ã¢ãªå²ãåœãŠã倱ãããšãªãECSã³ã¢ã«ãã£ãŠå®è¡ãããŸã-ããã¯ãŸãã«Unityã³ã³ããŒãã³ãã·ã¹ãã ã«æ¬ ããŠãããã®ã§ãïŒã
- ããžãã¯ãšããŒã¿ã®æ確ãªåé¢ã
- ãã¹ããç°¡åïŒãã¹ãç°å¢ã®åçŸãç°¡åïŒã
- Unityãªãã§ãµãŒããŒã§ããžãã¯ã䜿çšããæ©èœïŒããšã³ãžã³ãèªäœã«äŸåããªãïŒã
çæ
- ããå€ãã®ã³ãŒã
- Unityèªäœã®ã€ãã³ãã«ã€ããŠã¯ããMonoBehaviorãã©ãããŒãä»ããŠäœããã®æ¹æ³ã§ããããECSç°å¢ã«æå ¥ããå¿ èŠããããŸãã
Unityã§é·ãéåããŠããŠãECSã䜿çšããããšããªãå€ãã®äººã«ãšã£ãŠãæåã¯ãã®ã¢ãããŒãã«æ £ããã®ã¯é£ããã§ãããã ãããããã«ãã³ã³ããŒãã³ã/ã·ã¹ãã ããèããå§ãããMonoBehaviorãã«åºã¥ããŠåŒ·åã«æ¥ç¶ãããã³ã³ããŒãã³ãã䜿çšãããããããã¹ãŠããã°ããç°¡åã«åéãããŸãã
Unityã®çµã¿èŸŒã¿ECSãœãªã¥ãŒã·ã§ã³
Unityã®éçºè ã§ãããã¢ããªã±ãŒã·ã§ã³ã·ã¹ãã ã®ããã©ãŒãã³ã¹ãæ¹åããããã«ã³ã³ããŒãã³ãã·ã¹ãã ã®äœããå€æŽããæã ãšæ°ã¥ããŸããã çŽ1幎åãç¬èªã®ECSããã³CïŒãžã§ãã·ã¹ãã ã®éçºãé²è¡äžã§ããããšãçºè¡šãããŸããã ãããŠä»ã2018.1ããŒãžã§ã³ã§ã¯ã ãã¬ãã¥ãŒã¹ããŒã¿ã¹ã§ãã£ãŠã ãå°æ¥çã«ã©ããªããããã§ã«å€§ãŸãã«æ³åã§ããŸã ã
æšæºã®Unity ECSã§ã¯ããŸã æ確ãªãã®ã¯ãããŸããã éçºè ã¯ãéãããç¯å²ã®ã¿ã¹ã¯ã«ã®ã¿é©ããŠãããšã¯æžããŠããŸããããä»ã®ECSãœãªã¥ãŒã·ã§ã³ããã³ããŒããçµæãšããŠè³ªåãçºçããå ŽåããECSã誀ã£ãŠäœ¿çšããŠããããšããã¹ã¿ã€ã«ã§çããŸãã ã€ãŸã å®éãããã¯ãå€ç®çããœãªã¥ãŒã·ã§ã³ã§ã¯ãªããããªãå¥åŠã§ãã ãªãªãŒã¹ã¯ãããŸããã§ããããæ°åå€æŽãããå¯èœæ§ããããåç §åïŒããšãã°ãæååïŒã®è»¢éã«åé¡ããããããçŸåšã®ç¶æ ã®éåžžã®ECSã§äœã倧ããªããšãããããšã¯ãå§ãã§ããŸããã
Unityã®ä»£æ¿ECSãœãªã¥ãŒã·ã§ã³
ECSãã¿ãŒã³ã¯æšæ¥çºæããããã®ã§ã¯ãªãã httpsïŒ//github.comã§Unityã®ããŒãžã§ã³ãå«ããã®å®è£ ã®å€ããèŠã€ããããšãã§ããŸãã æ¯èŒçæ°é®®ã§æŽæ°ãããïŒ
æåã®2ã€ã®ãªãã·ã§ã³ã®ã¿ãæ±ããŸããã
Entitasã¯æã人æ°ãããã倧èŠæš¡ãªã³ãã¥ããã£ãœãªã¥ãŒã·ã§ã³ã§ãµããŒããããŠããŸãïŒæåã®ãœãªã¥ãŒã·ã§ã³ã§ããããïŒã ããã¯ååã«é«éã§ãããECSãªããžã§ã¯ããèŠèŠåããUnityãšãã£ã¿ãŒãšã®çµ±åããããã«ã¹ã¿ã ã³ã³ããŒãã³ãã®äžã«äŸ¿å©ãªAPIã§ã©ãããŒãäœæããããã®ã³ãŒãçæããããŸãã éå»1幎éãã³ãŒããžã§ãã¬ãŒã¿ãŒã¯ç¬ç«ãããããžã§ã¯ãã«åãããŠææã«ãªã£ããããããã¯ããªããã€ãã¹ã§ãã ãã1ã€ã®ããªãéèŠãªãã€ãã¹ç¹ïŒç¹ã«ã¢ãã€ã«ãã©ãããã©ãŒã ã®å ŽåïŒã¯ãåãšã³ãã£ãã£ã®ãã¹ãŠã®å¯èœãªã³ã³ããŒãã³ããªãã·ã§ã³ã«ã¡ã¢ãªãå²ãåœãŠãããããšã§ããããã¯ããŸãè¯ããããŸããã ããããäžè¬çã«ã¯ãé©åã§ãååã«ææžåãããŠãããå®éã®ãããžã§ã¯ãã§ããã«äœ¿çšã§ããŸãã ãµã€ãºïŒ0.5mb + 3mbãšãã£ã¿ãŒã®ãµããŒãã
Entitasã䜿çšããäŸã¯ãããããããŸããããããžã§ã¯ãã¯é·ãéååšãã æšé²ãããŠããŸããã ãœãŒã¹ãå«ãäŸããã Match 1ã確èªã§ããŸã ã
Entitasã®å
šäœçãªããã©ãŒãã³ã¹ã¯ã次ã®ããã«æšå®ãããŸãã
LeoECSãããç¥ã£ãŠããã®ã¯ãæ°ããã²ãŒã ããã£ãŠããããã§ãã ã³ã³ãã¯ãã§ãå€éšã¢ã»ã³ããªã®åœ¢åŒã§éããã³ãŒããå«ãŸããUnity 2017ããã®ã¢ã»ã³ããªå®çŸ©ããµããŒãããã¡ã¢ãªäœ¿çšéãããæé©åãããGCãã»ãŒãŒãïŒãã©ã€ããªããŒã«ã»ããã®ã¿ïŒãäŸåé¢ä¿ãªãããªãã·ã§ã³ã®ã€ã³ã©ã€ã³ãµããŒããåããCïŒv3.5 FW4.6ã ãã°ãããç¹ïŒå±æ§ããŒã¯ã¢ããã«ããDIãECSãªããžã§ã¯ããèŠèŠåããUnityãšãã£ã¿ãŒãšã®çµ±åãuGUIã€ãã³ãã®æ¢è£œã®ãã€ã³ãã£ã³ã°ã ãµã€ãºïŒ18kb + 16kbãšãã£ã¿ãŒãµããŒãã
ãœãŒã¹ã®æ¢è£œã®äŸãšããŠãå€å
žçãªã²ãŒã ãSnakeããèŠãããšãã§ããŸã ã
EntitasãšLeoECSã®é床ã®æ¯èŒ ïŒçµæã¯éåžžã«è¿ããäž¡æ¹åã«ããããªããŒãžã³ããããŸãã
ãããã«
ç§ã¯ãã®åé¡ã®å°é家ã§ã¯ãããŸããïŒæè¿ãUnityãECSãšçµã¿åãããŠäœ¿çšââãå§ããã°ããã§ãïŒããã®ãããäž»ã«ããããã®ã¹ã¯ãªããã䜿çšããŠã¢ã»ããããUnityã²ãŒã ããåéããã人ãšèŠ³å¯ãšèããå ±æããããšã«ããŸããã ã¯ããåäœããŸãã ãããªæãã§ããã ãããããµããŒãããããªãéçºãå¿ èŠãšããã«ãããã¿ã€ãã1åéãã®ã²ãŒã ãäœæããŠããªãå Žåã¯ã10åèããŠã¿ãŠãã ããããããç解ããŠããã¹ãŠããçŽãå¿ èŠããããŸãã
ECSã䜿çšããŠããªãã¡ã¯ã¿ãªã³ã°ããã»ã¹ã楜ããã§ããŸã:)æ°ããæ©èœãã²ãŒã ã«ç°¡åã«è¿œå ãããå€ãæ©èœãå€æŽãããŸã-ãã¹ãŠãååã«ãã¬ã€ããåŸãæ°ããççãªã¡ã«ããã¯ãè¿œå ããããå€ããã®ãåé€ããããšã決ãããã¶ã€ããŒãšã®èŠçãšè¡çªãªãã«ããã¹ãŠãæ©èœããŸãã