翻蚳è
ãã
ããã«ã¡ã¯ãHabrïŒ
ç§ã¯åœã®æº¶æ¥å·¥ã§ãããèšäºã翻蚳ããã®ãé£ããã£ãã®ã§ã圌ã«ç¡æã§é»è©±ããŸã-ãªãªãžãã«ãã©ããã§èšãããããè¯å¿ãäºåã«ã¯ãªã¢ããŸãã ç¿»èš³ãææ³ãªã©ã®èª€ããèŠã€ããŠããããã§ãã ååŸã
èè
ã®ãšãã¥ã¢ã«ãã»ãã£ã¢ã¹ã»ãã»ã³ã¹ã¿ã®ãªãªãžãã«ãæ²èŒãããŠããToptalã®ãŠã§ããµã€ãã®èš±å¯ãåŸãŠç¿»èš³ãå
¬éããŠããŸãã
éåžžãHello Worldããå§ããŠãããã°ã©ããŒã¯è·æ¥ãç¥ãããã«ãªããŸãã ãã®åŸã圌ãã¯ãŸããŸãå€ãã®ç®æšãèšå®ããããããã®æ°ããã¿ã¹ã¯ã¯éèŠãªæèšã«ã€ãªãããŸãããããžã§ã¯ãã倧ãããªãã°ãªãã»ã©ãã³ãŒããæ··ä¹±ããŸãã

ãŸãã倧å°ã®ããŒã ã§ã¯ã誰ãã奜ããªããã«ã³ãŒãã£ã³ã°ããããšã¯ãããŸããã ã³ãŒãã¯ãµããŒããããæ¡åŒµå¯èœã§ãªããã°ãªããŸããã çµå±ã®ãšãããããªããåããŠããäŒç€Ÿã¯ãããªãããã°ãä¿®æ£ãããã³ãŒããæ¹åãããããå¿
èŠããããšãã«ã¯ãã€ã§ãããªãã«é£çµ¡ããŸããã ã¯ããã»ãšãã©å¿
èŠãããŸããã
ãããã£ãŠãèšèšãã¿ãŒã³ãååšããŸãã ãããã¯ãæšæºåããããããžã§ã¯ãæ§é åã®ããã®ã«ãŒã«ã®ã³ã¬ã¯ã·ã§ã³ã§ãããå€§èŠæš¡ãªã³ãŒãããŒã¹ãå
±æããã³æŽçãã銎æã¿ã®ãªãã³ãŒãã§ã®äœæ¥ãç°¡çŽ åããã®ã«åœ¹ç«ã¡ãŸãã

ãããã®ã«ãŒã«ã¯ããã¹ãŠã®ãããžã§ã¯ãéçºè
ãåŸããšããµããŒãã容æã«ãªããå€ãã³ãŒããããã²ãŒãããæ°ããã³ãŒããäœæããŸãã éçºã¢ãããŒãã®èšç»ã«è²»ããæéãççž®ãããŸãã ããããåé¡ã¯ã±ãŒã¹ããšã«ç°ãªãããããã¿ãŒã³ã¯ç¹å¹è¬ã§ã¯ãããŸããã ç¹å®ã®ç¶æ³ã«é©ãããã®ãéžæããåã«ãããããã®é·æãšçæãæ
éã«æ€èšããå¿
èŠããããŸãã
ãã®ãã¥ãŒããªã¢ã«ã§ã¯ã人æ°ã®ããUnity3Dã²ãŒã ãšã³ãžã³ã§ã®çµéšãšãModel-View-ControllerïŒMVCïŒãã³ãã¬ãŒãã®äœ¿çšã«ã€ããŠèª¬æããŸãã 7幎éã®ä»äºãšã²ãŒã ãããžã§ã¯ãã§ã®ã¹ãã²ããã£ã³ãŒããšã®æŠãã§ãç§ã¯ããã䜿çšããããšã§åªããã³ãŒãæ§é ãšéçºé床ãéæããŸããã
ãŸããUnityã®åºæ¬ã¢ãŒããã¯ãã£ã§ããEntity-ComponentïŒECïŒãã³ãã¬ãŒãã«ã€ããŠèª¬æããæ¬¡ã«MVCããã®äžã«ã©ã®ããã«æ§ç¯ããããã説æããŸãã ãããŠãå°ããªã¢ãã¯ã¢ãããããžã§ã¯ãã®äŸã瀺ããŸãã
ããæ°
æ¢åã®èšèšãã¿ãŒã³ãç¹å®ã®ã¿ã¹ã¯ã«é©åãããããã«ãããã°ã©ããŒã¯ãããã倿Žããå¿
èŠããããŸãã ãã®ããã°ã©ãã³ã°ã®èªç±ã¯ãçã®ãœãããŠã§ã¢ã¢ãŒããã¯ãã£ãèŠã€ããããªãã£ãããšã®èšŒæã§ãã ãã®èšäºã¯ããã¹ãŠã®åé¡ã®è§£æ±ºçãæå³ãããã®ã§ããããŸããã ECãšMVCã®2ã€ã®ããç¥ãããèšèšãã¿ãŒã³ã®æ©èœã瀺ããŠããŸãã
ãšã³ãã£ãã£ã³ã³ããŒãã³ããã³ãã¬ãŒã
Entity-ComponentïŒECïŒ-ãã¶ã€ã³ãã¿ãŒã³ãæåã®ããšã¯ãã¢ããªã±ãŒã·ã§ã³ïŒãšã³ãã£ãã£ïŒãæ§æããèŠçŽ ã®éå±€ãæ±ºå®ããåèŠçŽ ïŒã³ã³ããŒãã³ãïŒã®ããžãã¯ãšããŒã¿ã瀺ãããšã§ãã ãããã°ã©ãã³ã°ãã®çšèªã§ã¯ããšã³ãã£ãã£ã¯0å以äžã®ã³ã³ããŒãã³ãã®é
åãæã€ãªããžã§ã¯ãã«ãªããŸãã ãã®ããã«èšè¿°ããŸãïŒ some-entity [component0, component1, ...]
åçŽãªECããªãŒã®äŸïŒ
- app [Application] - game [Game] - player [KeyboardInput, Renderer] - enemies - spider [SpiderAI, Renderer] - ogre [OgreAI, Renderer] - ui [UI] - hud [HUD, MouseInput, Renderer] - pause-menu [PauseMenu, MouseInput, Renderer] - victory-modal [VictoryModal, MouseInput, Renderer] - defeat-modal [DefeatModal, MouseInput, Renderer]
è€éãªã¯ã©ã¹æ§é ããã€ã€ã¢ã³ãã®åé¡ã®ãããªåé¡ãåŒãèµ·ããå¯èœæ§ãããå ŽåãECã¯å€éç¶æ¿ã®åé¡ã軜æžããããã®è¯ããã³ãã¬ãŒãã§ãïŒBãšCããç¶æ¿ããã¯ã©ã¹Dã«å
±éã®ã¯ã©ã¹AããããBã¯ã©ã¹ã«ããAã®æ©èœã®ç°ãªãåå®çŸ©ã«ããç«¶åãå«ãŸããå ŽåããããŸãããã³C.

åæ§ã®åé¡ã¯ãç¶æ¿ãç©æ¥µçã«äœ¿çšããå Žåã«ããçºçããŸãã
ã¿ã¹ã¯ãšããŒã¿ãã³ãã©ãŒãå°ããªã³ã³ããŒãã³ãã«åè§£ãããšããããã¯ãšã³ãã£ãã£ã«ã¢ã¿ãããããè€æ°ã®ç¶æ¿ãªãã§åå©çšã§ããŸããããã¯ãCïŒãšJavaScriptïŒã¡ã€ã³ããã°ã©ãã³ã°èšèªUnityïŒã«ã¯ãããŸããã
ãšã³ãã£ãã£ã³ã³ããŒãã³ããæåŸ
ã©ããã«æ©èœããªãå Žå
OOPãè¶
ããã¬ãã«ã§ã¯ãECã¯ã³ãŒãã¢ãŒããã¯ãã£ã®æé©åãšæŽçãæ¯æŽããŸãã ããããå€§èŠæš¡ãªãããžã§ã¯ãã§ã¯ããäœãã«ãèªç±ãã§ããããæ©äŒã®æµ·ãã§ã¯ããšã³ãã£ãã£ãšã³ã³ããŒãã³ããæ£ããåé¢ãããããã®çžäºäœçšãæŽçããããšã¯å°é£ã§ãã ãšã³ãã£ãã£ãšã³ã³ããŒãã³ããæ§ç¯ããããã®ãªãã·ã§ã³ã¯ç¡éã«ãããŸãã

æ··ä¹±ãåé¿ãã1ã€ã®æ¹æ³ã¯ãECã«å ããŠè¿œå ã®ååã«åŸãããšã§ãã ããã°ã©ã ã3ã€ã®ã«ããŽãªã«åããŸãã
- çããŒã¿ãåŠçããããããäœæãåä¿¡ãæŽæ°ãåé€ãæ€çŽ¢ã§ããããã«ãããã®ããããŸãïŒCRUDãªã©ïŒã
- ä»ã®ãã®ã¯ãã€ã³ã¿ãŒãã§ãŒã¹ãå®è£
ããŸãïŒãœãããŠã§ã¢ã§ã¯ãªãããŠãŒã¶ãŒããšïŒãä»ã®èŠçŽ ãšããåãããããã«ã責任ç¯å²ã«é¢é£ããã€ãã³ããæ€åºãããããã®ã€ãã³ãã«é¢ããéç¥ãéä¿¡ããŸãã
- ããã«ããããã®éç¥ãåä¿¡ããããžãã¹ããžãã¯ãå®è£
ããããŒã¿ã®å€æŽæ¹æ³ã決å®ãã責任è
ãããŸãã
幞ããªããšã«ããã®åäœã説æãããã¶ã€ã³ãã¿ãŒã³ãæ¢ã«ååšããŸãã
ã¢ãã«è¡šçŸã³ã³ãããŒã©ãŒïŒMVCïŒãã³ãã¬ãŒã
Model-View-Controllerã¯ãããã°ã©ã ã3ã€ã®äž»èŠã³ã³ããŒãã³ãã«åå²ããŸãïŒã¢ãã«ïŒCRUDïŒããã¥ãŒïŒã€ã³ã¿ãŒãã§ãŒã¹/æ€åºïŒãã³ã³ãããŒã©ãŒïŒæ±ºå®/ã¢ã¯ã·ã§ã³ïŒã MVCã¯ååãªæè»æ§ããããECããã³OOPã®äžã«å®è£
ãããŠããŸãã
ã²ãŒã ãšãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®éçºã§ã¯ããŠãŒã¶ãŒã®å
¥åãåŸ
ã£ããããªã¬ãŒãããªã¬ãŒããããã€ãã³ãã«é¢ããéç¥ãéä¿¡ããããã€ãã³ãã«å¿çããããããŒã¿ãæŽæ°ãããããæ¯æ¥ã®ææ®µããããŸãã ãããã®æé ã¯ãMVCãšã¢ããªã±ãŒã·ã§ã³ã®äºææ§ã瀺ããŠããŸãã
ãã®æ¹æ³è«ã§ã¯ããœãããŠã§ã¢ã®èšç»ãšå€§èŠæš¡ãããžã§ã¯ãã§ãæ°ããéçºè
ã®æäœã«åœ¹ç«ã€æœè±¡åã®å¥ã®ã¬ã€ã€ãŒãå°å
¥ãããŸãã ããŒã¿ãã€ã³ã¿ãŒãã§ã€ã¹ãããã³ããžãã¹ããžãã¯ã«åé¢ããããšã§ãã¢ããªã±ãŒã·ã§ã³æ©èœã远å ãŸãã¯å€æŽããããã«éçºè
ãè§Šããå¿
èŠã®ãããã¡ã€ã«ã®æ°ãæžããŸãã
UnityãšEC
ã§ã¯ãUnityã®æ©èœã詳ããèŠãŠã¿ãŸãããã
Unityã¯ECããŒã¹ã®ãã©ãããã©ãŒã ã§ã GameObject
ã€ã³ã¹ã¿ã³ã¹ããšã³ãã£ãã£ãšããŠè¡šç€ºãããã€ã³ã¹ã¿ã³ã¹ã衚瀺ãç§»åãªã©ããæ©èœããããŸãã Component
ã¯ã©ã¹ã®åå«ã«ãã£ãŠæäŸãããŸãã
éå±€ããã«ãšã€ã³ã¹ãã¯ã¿ãŒããã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã¢ã»ã³ãã«ãã³ã³ããŒãã³ãã®ãšã³ãã£ãã£ãžã®å²ãåœãŠãåæåç¶æ
ã®èšå®ãã²ãŒã ã®ããŒããè¡ãããã®åŒ·åãªããŒã«ã§ãã ãããããªããã°ãã¯ããã«å€ãã®ã³ãŒããå¿
èŠã§ããã

å³åŽã«4ã€ã®GameObjectãããéå±€ããã«ã

GameObjectã³ã³ããŒãã³ããåããã€ã³ã¹ãã¯ã¿ãŒããã«ã
äžèšã§èª¬æããããã«ãæ©äŒãå€ããããšããåé¡ã«ééããããžãã¹ããžãã¯ããã¡ãã¡ã«æ£ãã°ã巚倧ãªéå±€ã«ãªã£ãŠããŸãå¯èœæ§ããããŸãã
ãã ããMVCã¯åœ¹ç«ã¡ãŸããã¹ã¯ãªãŒã³ã·ã§ããã«ç€ºãããã«ããšã³ãã£ãã£ãç®çãšã¢ããªã±ãŒã·ã§ã³ã®æ§é ã«å¿ããŠåå²ããŸãã
ã²ãŒã éçºåãã®MVCã®é©å¿
MVCã䜿çšããUnityã«åºæã®ç¶æ³ã«åãããŠãäžè¬çãªMVCãã¿ãŒã³ã2ã€ä¿®æ£ãããšããæ¥ãŸããã
- MVCã¯ã©ã¹ãžã®åç
§ã¯ç°¡åã«ã³ãŒãã£ã³ã°ã§ããã¯ãã§ãã
- å¥ã®ãªããžã§ã¯ãã«ã€ã³ã¹ã¿ã³ã¹ãžã®ã¢ã¯ã»ã¹ãèš±å¯ããã«ã¯ãUnityã§ãéçºè
ã¯ãšãã£ã¿ãŒå
ã®ãªããžã§ã¯ããžã®ãªã³ã¯ããã©ãã°ã¢ã³ãããããããããããã°ãïŒãããŠé
ãããããïŒ
GetComponent(...)
åŒã³åºããGetComponent(...)
ããGetComponent(...)
ã - Unityãã¯ã©ãã·ã¥ããå ŽåããŸãã¯ãšãã£ã¿ãŒã«çµã¿èŸŒãŸãããªã³ã¯ãç Žæããããã«ãæ¬åœã®å°çãå§ãŸããŸãã
- ãã®ããã ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšããããã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ã«ã¢ã¯ã»ã¹ã§ããã«ãŒããªããžã§ã¯ããå¿
èŠã§ãã
- äžéšã®èŠçŽ ã¯ãMVCã«ããŽãªã®ãããã«ãå±ããªãããžãã¯ãã«ãã»ã«åããå€ãã®å Žååå©çšãããŸãã ããããComponentsãšåŒã³ãŸã ã ãããã¯Entity-Componentæ§é ã®ã³ã³ããŒãã³ãã§ããããŸãããMVCãã¬ãŒã ã¯ãŒã¯ã§ã¯åãªãè£å©ã¯ã©ã¹ã§ãã
- äŸïŒãªããžã§ã¯ããåçŽã«å転ããã
Rotator
ã³ã³ããŒãã³ãã ãã ããéç¥ã¯éä¿¡ããããäœãä¿åããããããžãã¹ããžãã¯ã¯å«ãŸããŸããã
ãããã®åé¡ã解決ããããã«ãå
ã®ãã³ãã¬ãŒãã倿Žãã AMVCCãŸãã¯Application-Model-View-Controller-Componentãšããååãä»ããŸããã

- ã¢ããªã±ãŒã·ã§ã³ -ãã¹ãŠã®éèŠãªã€ã³ã¹ã¿ã³ã¹ãšã¢ããªã±ãŒã·ã§ã³äŸåããŒã¿ã®ã¢ããªã±ãŒã·ã§ã³ãšã³ã³ãããžã®åäžã®ãšã³ããªãã€ã³ãã
- MVC-ããã§äœã§ããããããããŸãã:)
- ã³ã³ããŒãã³ãã¯ãèªå·±å®çµåã§ç°¡åã«åå©çšå¯èœãªå°ããªã¹ã¯ãªããã§ãã
ç§ã®ãããžã§ã¯ãã§ã¯ããããã®2ã€ã®ã€ãããŒã·ã§ã³ã§ååã§ãã
äŸïŒ10ããŠã³ã¹
AMVCCãã³ãã¬ãŒããå°ããªã²ãŒã ã«é©çšããã10ããŠã³ã¹ããšåŒã³ãŸãããã ã²ãŒã ã®SphereCollider
ã¯åçŽã§ãïŒ SphereCollider
ãšRigidbody
ãSphereCollider
ããBall
ã¯ãã²ãŒã ã®éå§æã«èœäžãå§ããŸãã åå°ãšããŠã®Cube
ãšAMVCCãäœæãã5ã€ã®ã¹ã¯ãªããã
éå±€
ã³ãŒããéå§ããåã«ãAMVCCã¹ã¿ã€ã«ã«åŸã£ãŠãã¯ã©ã¹ãšã¢ã»ããã®éå±€ãã¹ã±ããããŸãã

GameObject view
ã¯ããã¹ãŠã®èŠèŠèŠçŽ ãšView
ã¹ã¯ãªãããå«ãŸããŠããŸãã éåžžãå°èŠæš¡ãããžã§ã¯ãã®model
ããã³controller
ãªããžã§ã¯ãã«ã¯ã察å¿ããã¹ã¯ãªããã1ã€ã ãå«ãŸããŸããå€§èŠæš¡ãããžã§ã¯ãã§ã¯ãç¹å®ã®ã¢ã¯ã·ã§ã³ãããŒã¿ãªã©ãæ
åœããå€ãã®ã¹ã¯ãªããããããŸãã
誰ããã¢ã¯ã»ã¹ããããšãïŒ
- ããŒã¿å¥ ïŒ
application > model > ...
åŸã£ãŠãã ããapplication > model > ...
- ããžãã¯/ã¯ãŒã¯ãã㌠ïŒ
application > controller > ...
- ã¬ã³ããªã³ã°/ã€ã³ã¿ãŒãã§ãŒã¹/æ€åº ïŒ
application > view > ...
ãã¹ãŠã®ããŒã ããããã®3ã€ã®ã«ãŒã«ã«åŸãå Žåãã¬ã¬ã·ãŒãããžã§ã¯ãã¯åé¡ã«ãªããŸããã
éå±€ã«ã¯ãç°ãªãèŠçŽ ã§åå¥ã«äœ¿çšã§ããããã Component
åå¥ã®ã³ã³ããããªãããšã«æ³šæããŠãã ããã
ã¹ã¯ãªããã£ã³ã°
泚æ ïŒä»¥äžã«ç€ºãã¹ã¯ãªããã¯ãå®éã®ã³ãŒããäžè¬åãããã®ã§ãã 質åãããã«è©³ãã調ã¹ããå Žå㯠ãUnity MVC MVCãã¬ãŒã ã¯ãŒã¯ãžã®ãªã³ã¯ãã芧ãã ãã ã AMVCCã®äžã§æ§é åãããŠãããããã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ã«å¿
èŠãªåºæ¬ã¯ã©ã¹ããããŸãã
次ã«ã10åã®ããŠã³ã¹ã¹ã¯ãªããã®æ§é ãèŠãŠã¿ãŸãããã
Unityããã€ã¹ã«äžæ
£ããªæ¹ã®ããã«ãGameObjectãã©ã®ããã«çžäºäœçšããããç°¡åã«èª¬æããŸãã Entity-Componentãã³ãã¬ãŒãã®ãã³ã³ããŒãã³ããã¯ã MonoBehaviour
ã¯ã©ã¹ã§è¡šãããŸãã ã¢ããªã±ãŒã·ã§ã³ã®å®è¡äžã«äœ¿çšå¯èœã«ããã«ã¯ãéçºè
ã¯ãã©ãã°ã¢ã³ããããããœãŒã¹ãã¡ã€ã«ãAddComponent<YourMonobehaviour>()
ECãã³ãã¬ãŒãã®ããšã³ãã£ãã£ãïŒã«ãã©ãã°ã¢ã³ããããããããã AddComponent<YourMonobehaviour>()
ã³ãã³ãã䜿çšããå¿
èŠããããŸãã ãã®åŸãã¹ã¯ãªãããã€ã³ã¹ã¿ã³ã¹åããã䜿çšã§ããç¶æ
ã«ãªããŸãã
2ã€ã®ã¯ã©ã¹ã宣èšããŸãã
Application
ïŒAMVCCã®ãAãïŒãã¡ã€ã³ã¯ã©ã¹ã§ãããã²ãŒã ã§ã€ã³ã¹ã¿ã³ã¹åããããã¹ãŠã®èŠçŽ ãžã®ãªã³ã¯ãå«ãã€ã³ã¹ã¿ã³ã¹ã1ã€ã ããããŸãã å
éšã§ã¯ãã«ãŒãMVCãªããžã§ã¯ããžã®ã¢ã¯ã»ã¹ãæäŸãã3ã€ã®ãããªãã¯å€æ°ã model
ã view
ããã³controller
ã宣èšããŸãã
Element
ã¯ãMVCåã€ã³ã¹ã¿ã³ã¹ã«Application
ãžã®ã¢ã¯ã»ã¹ãæäŸãããã«ããŒåºæ¬ã¯ã©ã¹ã§ãã
äž¡æ¹ã®ã¯ã©ã¹ãMonoBehaviour
çžç¶äººã§ããããšãå¿ããªãã§ãã ããã ãããã¯ãã²ãŒã ãªããžã§ã¯ãããšã³ãã£ãã£ãã«ã¢ã¿ããããããã³ã³ããŒãã³ããã§ãã
BounceElement
ããããŒã¹MVCã¯ã©ã¹ãBounceElement
ãŸãã éåžžã BounceModel
ã BounceView
ãããã³BounceController
ã¯ãç¹æ®ãªMVCãªããžã§ã¯ãã®ã³ã³ãããŒãšããŠæ©èœããŸãããç°¡ç¥åãããäŸã§ã¯ããã¹ããããæ§é ãæã€ã®ã¯ãã¥ãŒã®ã¿ã§ãã ã¢ãã«ãšã³ã³ãããŒã©ãŒã«ã¯1ã€ã®ã¢ãã«ã§ååã§ãã
ãã¹ãŠã®ã¹ã¯ãªãããäœæãããã²ãŒã ãªããžã§ã¯ãã«ãã³çãããŠæ§æã§ããããã«ãªããŸããã
éå±€ã¯æ¬¡ã®ããã«ãªããŸãã
- application [BounceApplication] - model [BounceModel] - controller [BounceController] - view [BounceView] - ... - ball [BallView] - ...
BounceModel
äŸã䜿çšããŠãUnityãšãã£ã¿ãŒã§ã©ã®ããã«èŠããããBounceModel
ã¿ãŸãããã

bounces
ãšwinCondition
ãwinCondition
ã
ã¹ã¯ãªãããã€ã³ã¹ããŒã«ããŠã²ãŒã ãèµ·åãããšãã³ã³ãœãŒã«ãžã®åºåã¯æ¬¡ã®ããã«ãªããŸãã

éç¥
ããŒã«ãå°é¢ã«åœãããšããã®è¡šçŸã¯app.controller.OnBallGroundHit()
ã¡ãœãããåŒã³åºããŸãã ããã¯ããããã¢ããªã±ãŒã·ã§ã³ã§éç¥ãéä¿¡ãããééã£ããæ¹æ³ã§ãããšèšãããšã§ã¯ãããŸããããç§ã®çµéšã§ã¯ã Application
ã¯ã©ã¹ã§å®è£
ãããåçŽãªéç¥ã·ã¹ãã ã䜿çšããæ¹ãã¯ããã«äŸ¿å©ã§ãã
BounceApplicationã®æŽæ°ïŒ
次ã«ãéçºè
ãã€ãã³ãã®ååãéç¥ããæ°ããã¹ã¯ãªãããå¿
èŠã§ããã€ãã³ãã®éç¥ã¯æ¬¡ã®ããã«ãªããŸãã
ããã«ãããéçºè
ã¯ã³ãŒãã§controller.OnSomethingComplexName
ãããªã¡ãœãããæ¢ã代ããã«ã1ã€ã®ãã¡ã€ã«ãéããŠã¢ããªã±ãŒã·ã§ã³ã®äžè¬çãªåäœãçè§£ã§ããããã«ãªããŸãã
次ã«ã BallView
ãšBounceController
ãæ°ããã·ã¹ãã ã§åäœããããã«é©åãããŸãã
å€§èŠæš¡ãªãããžã§ã¯ãã§ã¯ãå€ãã®éç¥ããããŸãã 巚倧ãªã¹ã€ããã±ãŒã¹ãåãé€ãã«ã¯ãå°çšã®ã³ã³ãããŒã©ãŒãäœæãããã®äžã®ç°ãªãéç¥ã°ã«ãŒããåŠçããããšããå§ãããŸãã
çŸå®äžçã®AMVCC
ã10ããŠã³ã¹ãã¯ãAMVCCãã³ãã¬ãŒãã®æãåçŽãªäœ¿çšäŸã瀺ããŠããŸãã å®éã«äœ¿çšããã«ã¯ãMVCã®3ã€ã®ã«ããŽãªå
ã§æèã磚ããé åºä»ããããéå±€ã®åœ¢ã§ãšã³ãã£ãã£ãèŠèŠåããããšãåŠã¶å¿
èŠããããŸãã
å€§èŠæš¡ãªãããžã§ã¯ãã§ã¯ãéçºè
ã¯ããè€éãªã·ããªãªã«çŽé¢ãããã®ãšã³ãã£ãã£ãŸãã¯ãã®ãšã³ãã£ãã£ããã¥ãŒã§ãããã³ã³ãããŒã©ãŒã§ãããããŸãã¯ã¯ã©ã¹ãéšåã«åå²ãã䟡å€ããããã©ãããçããŸãã
å®è·µçãªã«ãŒã«ïŒãšãã¥ã¢ã«ãäœïŒ
ããã¯ããŠãããŒãµã«MVCã¬ã€ããã§ã¯ãªããã¢ãã«ããã¥ãŒãã³ã³ãããŒã©ãŒã®åé¢ã«åœ¹ç«ã€äžé£ã®ç°¡åãªã«ãŒã«ã§ãã
ããã¯éåžžãã¢ãŒããã¯ãã£ãèãããã¹ã¯ãªãããæžããããããšãã«èªç¶ã«çºçããŸãã
ã¯ã©ã¹åé¢
ã¢ãã«
- ãããã«ã¯ããã¬ãŒã€ãŒã®å¥åº·ç¶æ
ã匟è¬ã®åšåº«ãªã©ãã¢ããªã±ãŒã·ã§ã³ã®åºæ¬ããŒã¿ãå«ãŸããŠããŸãã
- åãã·ãªã¢ã«åãéã·ãªã¢ã«åãããã³/ãŸãã¯å€æããŸãã
- ããŒã¿ã®ããŠã³ããŒã/ä¿åïŒããŒã«ã«ãŸãã¯ãããã¯ãŒã¯çµç±ïŒã
- æäœã®é²è¡ç¶æ³ãã³ã³ãããŒã©ãŒã«éç¥ããŸãã
- ã²ãŒã ã®ã¹ããŒããã·ã³ã®ç¶æ
ãä¿åããŸãã
- æçš¿ãåŒã³åºããªãã§ãã ããã
èŠèŽåæ°
- ã¢ãã«ããããŒã¿ãåä¿¡ããŠââãã²ãŒã ã®çŸåšã®ç¶æ
ã衚瀺ã§ããŸãã ããšãã°ãViewã¡ãœãã
player.Run()
ã¯model.speed
ã䜿çšããŠããã¬ãŒã€ãŒã®èœåãèŠèŠåã§ããŸãã - ã¢ãã«ã倿Žããªãã§ãã ããã
- ã¯ã©ã¹ã®ç®çã«å³å¯ã«åŸããŸãã äŸïŒ
PlayerView
ã¯ãå
¥åãŸãã¯ã²ãŒã ã®ç¶æ
ã®å€åãæ€åºããŸããã- ãã®ãã¥ãŒã¯ãã€ã³ã¿ãŒãã§ãŒã¹ãåãããã©ãã¯ããã¯ã¹ã®ããã«æ©èœããéèŠãªã€ãã³ããèŠåããŸãã
- é床ãå¥åº·ãçæŽ»ãªã©ã®éèŠãªããŒã¿ã¯ä¿åãããŸããã
ã³ã³ãããŒã©ãŒ
- åºæ¬çãªã²ãŒã ããŒã¿ãä¿åããªãã§ãã ããã
- ãã¥ãŒããéç¥ããã£ã«ã¿ãªã³ã°ã§ããŸãã
- ã¢ãã«ããŒã¿ãæŽæ°ããŠäœ¿çšããŸãã
- Unityã·ãŒã³ã§ã¢ã¯ã·ã§ã³ã管çããŸãã
ã¯ã©ã¹éå±€
倿°ã«å«ãŸãããã¬ãã£ãã¯ã¹ãå€ãããå Žåããåå²ã®å¯èœæ§ãæç¢ºã«ãã¬ãŒã¹ãããŠããå ŽåïŒMMOã®Player
ã¯ã©ã¹ãFPSã®Gun
ã¿ã€ããªã©ïŒãã©ã®ã¯ã©ã¹ãåé¢ããå¿
èŠãããããçè§£ããŠããŸãã ããããå®å
šãæãããã«ãç§ã¯ãã®ç¹ãç¡èŠã§ããŸããã§ããã
ããšãã°ããã¬ãŒã€ãŒããŒã¿ã䜿çšããã¢ãã«ã«ã¯ã OnPlayerDidA, OnPlayerDidB,âŠ
ãªã©ã®å€æ°ãããã¬ãŒã€ãŒéç¥ãåŠçããã³ã³ãããŒã©ãŒïŒ OnPlayerDidA, OnPlayerDidB,âŠ
ã¡ãœããïŒããããã³ãŒãã®éãæžãããŠplayer
ãšOnPlayer
ãOnPlayer
ãŸãã ã¢ãã«ã®æ¹ãçè§£ããããã®ã§ãäŸã§ããã瀺ããŸãã
ç§ã¯éåžžããã¹ãŠã®ã²ãŒã ããŒã¿ãå«ãåäžã®ã¢ãã«ããå§ããŸãã
ããããã²ãŒã ãè€éã«ãªãã»ã©ã倿°ãå¢ããŸãã ååã«è€éãªãããmodel.playerABCDFoo倿°ãå«ã巚倧ãªã¯ã©ã¹ã«ãªããŸãã ãã¹ããããèŠçŽ ã«ããã³ãŒããç°¡çŽ åãããããŒã¿ã®ããªãšãŒã·ã§ã³ãåãæ¿ããããšãã§ããŸãã
ãã®ãããªã¯ã©ã¹ã®ç·šæã§ã¯ãéçºè
ã¯äžåºŠã«1ã€ã®è«çãŠããããæ€èšãããããã³ãŒãã®çè§£ãç°¡åã«ãªããŸãã ããããã®æŠåšãæã€äžäººç§°ã·ã¥ãŒãã£ã³ã°ã²ãŒã ãæ³åããŠã¿ãŸãããã GunModel
ã¯ã©ã¹ã®ããŒã¿ã䜿çšãããšãæŠåšã®çš®é¡ããšã«ãã¬ããã®ã»ãããäœæããã²ãŒã ã§äœ¿çšã§ããŸãã Prefabã¯äºåã«æºåãããGameObjectã§ãããããã«ã³ããŒããŠåå©çšã§ããŸãã
ãããŠãæŠåšã«é¢ããæ
å ±ãgun0Ammo
ã gun1Ammo
ã gun0Clips
ãªã©ã®å€æ°ã®1ã€ã®ã¯ã©ã¹ã«å«ãŸããŠããå Žåã Gun
ããŒã¿ãä¿åããå¿
èŠã«çŽé¢ããå Žåã Player
ã«é¢ããäžèŠãªããŒã¿ãå«ãModel
å
šäœãä¿åããå¿
èŠããããŸãã ãã®å Žåãæ°ããGunModel
ã¯ã©ã¹ãäœæããæ¹ãè¯ãããšã¯æããã§ãã

ã¯ã©ã¹éå±€ã®æ¹å
ãã€ãã®ããã«ãã³ã€ã³ã«ã¯2ã€ã®åŽé¢ããããŸãã é床ã®åé¡ã«ããã³ãŒããè€éã«ãªãå ŽåããããŸãã ãããžã§ã¯ãã§MVCãæé©ãªæ¹æ³ã§æ§æããã«ã¯ãçµéšã®ã¿ã圹ç«ã¡ãŸãã
æ°ããã²ãŒã éçºã¹ãã«ããªãŒãã³ããŸããïŒUnity with MVCã
ãããã«
å€ãã®ãã¶ã€ã³ãã¿ãŒã³ããããŸãã ãã®èšäºã§ã¯ãæè¿ã®ãããžã§ã¯ãã®çµéšã«åºã¥ããŠãæãæçšãªãã®ã瀺ããŸããã éçºè
ã¯åžžã«ç¥èãåžåããããå€ããæ±ããŠããŸãã ãã®ã¬ã€ããäœãæ°ããããšãåŠã¶ã®ã«åœ¹ç«ã¡ãåæã«ããªãèªèº«ã®éçºã¹ã¿ã€ã«ã®éçºã®æ®µéã«ãªã£ãããšãé¡ã£ãŠããŸãã
ãŸããä»ã®ãã³ãã¬ãŒãã調ã¹ãŠæçšãªãã³ãã¬ãŒããæ¢ãããšã匷ããå§ãããŸãã Wikipediaã®èšäºããå§ããããšãã§ããŸãããã³ãã¬ãŒããšãã®ç¹æ§ã®åªãããªã¹ãããããŸãã
AMVCCãã³ãã¬ãŒããæ°ã«å
¥ã£ãŠãã¹ããããå Žåã¯ãAMVCCã¹ã¿ã€ã«ã®ã¢ããªã±ãŒã·ã§ã³ã«å¿
èŠãªãã¹ãŠã®åºæ¬ã¯ã©ã¹ãå«ãŸããŠããUnity MVCã©ã€ãã©ãªã詊ããŠãã ããã