å°ãåã«ãã®ãšã³ãžã³ã«èå³ãæã€ããã«ãªããŸããã 幞ããªããšã«ããã®ãããã¯ã«ã¯ãHabrãå«ãå€ãã®ãã·ã¢ã®è³æããããŸãã
ãã ããäœæãããã²ãŒã ã§ã®ããŸããŸãªã€ãã³ãã®çºçé åºã®èª¬æïŒãã·ã¢èªïŒãèŠãããšã¯ãããŸãããããã¯ãç¹å®ã®æ©èœã§ã®ã¹ã¯ãªããã®æé©ãªé 眮ã®èŠå ã®1ã€ã§ãã
ãã®ãããUnity3Dã®è±èªã®ãã«ãããã ã€ãã³ãé¢æ°ã®å®è¡é åºãã»ã¯ã·ã§ã³ã翻蚳ããããšã«ããŸããã
ãããããã£ãšè¯ãããšãåºãŠããããšãé¡ã£ãŠããŸãã èå³ã®ããæ¹-kat =ïŒã®äžã§æè¿
翻蚳è ã®åºæ
ãã ããå ¬åŒãã«ããéå§ããåã«ãUnity3Dã®ã€ãã³ãã¯3ã€ã®å€§ããªã°ã«ãŒãã«åãããŠããããšã«æ³šæããŠãã ããã- ã€ãã³ã
ãªã€ã«ãªã€ã«ã«ãã£ãŠããªã¬ãŒãããã€ãã³ãïŒã·ãŒã³ã®èªã¿èŸŒã¿ããŠãŒã¶ãŒåºå£ïŒ
ãã®ã°ã«ãŒãã®ã€ãã³ãã¯äžå®æã«å®è¡ãããŸãã - ãã¬ãŒã ããªã¬ãŒã€ãã³ã
ãã®å Žåã䜿çšããããã¹ãŠã®ã¹ã¯ãªããã¯ç»é¢ã®æç»ãµã€ã¯ã«ã§åŒã³åºãããŸããã€ãŸããFPSïŒ1ç§ãããã®ãã¬ãŒã ã¬ãŒãïŒã«çŽæ¥åœ±é¿ããŸãã ãããã£ãŠãå€ãã®åŠçæéãå¿ èŠãšããé¢æ°ã䜿çšããå Žåã¯ãæ éã«äœæ¥ããå¿ èŠããããŸãã - ç©çèšç®ã€ãã³ã
ãããŠæåŸã®ã°ã«ãŒãã ç©çåŠã®èšç®ã®ããã«ãç¬ç«ããç¬ç«ããã¹ã¬ãããäœæãããç¹å®ã®æéééã§ã€ãã³ããããªã¬ãŒãããŸãã ãã®ééã®ãµã€ãºã¯ã¡ãã¥ãŒé ç®ã§èª¿æŽã§ããŸãïŒç·šé->ãããžã§ã¯ãèšå®->æé->åºå®ã¿ã€ã ã¹ãããã
ãã®å èš³ãç¥ã£ãŠããã°ãã©ã®ã³ãŒããé 眮ããã®ãæé©ãããã§ã«æ±ºå®ã§ããŸãã
ãã ããç©çèšç®äžãšæç»äžã®äž¡æ¹ã§å®è¡ããããã¹ãŠã®èšç®ã¯ãã²ãŒã ã®å¿çæ§ã«åœ±é¿ããŸãã ãããã£ãŠãã¢ããªã±ãŒã·ã§ã³ãéçºãããšãã¯ãæããªãœãŒã¹ãæ¶è²»ããèšç®ãã³ã«ãŒãã³ã§ãã©ãŒãããããããšãæãŸããã§ãã
ããã§ããã«ãã»ã¯ã·ã§ã³ã®ç¿»èš³ã«çŽæ¥é²ã¿ãŸãã
ã€ãã³ãé¢æ°ã®å®è¡é åº
Unity3Dã«ã¯ãç¹å®ã®é åºã§å®è¡ãããå€æ°ã®ã€ãã³ãããããŸãã ãã®é åºã«ã€ããŠä»¥äžã«èª¬æããŸããæåã®ã·ãŒã³ã®èªã¿èŸŒã¿
ãããã®é¢æ°ã¯ãã·ãŒã³ã®éå§æã«åŒã³åºãããŸãïŒãã¬ãŒã å ã®åãªããžã§ã¯ãã«å¯ŸããŠ1åïŒã- Awake ïŒãã®é¢æ°ã¯ãé¢æ°ãéå§ããåãããã³ãã¬ããã®åæåçŽåŸã«åžžã«åŒã³åºãããŸãã
- OnEnable ïŒïŒãªããžã§ã¯ããã¢ã¯ãã£ããªå Žåã«åŒã³åºãããŸãïŒïŒãã®é¢æ°ã¯ããªããžã§ã¯ãããªã³ã«ãªã£ãåŸã«ã®ã¿åŒã³åºãããŸãã
æåã®ãã¬ãŒã æŽæ°ãŸã§
- Start ïŒã¹ã¯ãªãããå®çŸ©ãããŠããå Žåã®ã¿ãæåã®ãã¬ãŒã ãæç»ãããåã«åŒã³åºãããŸãã
ãã¬ãŒã é
- OnApplicationPause ïŒãã®ã€ãã³ãã¯ãå®éã®éåžžã®ãã¬ãŒã æŽæ°ã®éã«ãäžæåæ¢ãæ€åºããããšãã«ãã¬ãŒã ã®æåŸã§çºçããŸãã OnApplicationPauseã®åŸãäžæåæ¢äžã«è¡šç€ºããããŠã£ã³ããŠã衚瀺ããããã«ãè¿œå ã®ãã¬ãŒã ã1ã€æç»ãããŸãã
泚æãæŽæ°
ã²ãŒã ããžãã¯ããªããžã§ã¯ãã®çžäºäœçšãšã¢ãã¡ãŒã·ã§ã³ãã«ã¡ã©ã®äœçœ®ãªã©ã远跡ããããã«ã䜿çšã§ããããã€ãã®ç°ãªãã€ãã³ãããããŸãã ã»ãšãã©ã®ã¿ã¹ã¯ãå®è¡ããäžè¬çãªã¡ã«ããºã ã¯UpdateïŒïŒé¢æ°ã«ãããŸãããä»ã®é¢æ°ããããŸãã- FixedUpdate ïŒFixedUpdateïŒïŒã¯UpdateïŒïŒã«äŸåãããããé »ç¹ã«åŒã³åºãããšãé »ç¹ã«åŒã³åºãããšãã§ããŸããïŒéåžžãFPSãååã«é«ãå Žåã¯ããŸãåŒã³åºãããŸããïŒã ãã®ã€ãã³ãã¯ãFPSãäœãå Žåã¯ãã¬ãŒã å ã§æ°åããªã¬ãŒãããFPSãé«ãå Žåã¯ãã¬ãŒã éã§åŒã³åºãããããšãããããŸããã ãã¹ãŠã®ç©çãšã³ãžã³ã®èšç®ãšæŽæ°ã¯ãFixedUpdateïŒïŒã®çŽåŸã«è¡ãããŸãã FixedUpdateïŒïŒå ã§ã¢ãŒã·ã§ã³èšç®ãé©çšããå ŽåãTime.deltaTimeã§å€ãä¹ç®ããå¿ èŠã¯ãããŸããã ããã¯ãFixedUpdateïŒïŒããã¬ãŒã ã¬ãŒãã«äŸåããªãã¿ã€ããŒããåŒã³åºãããããã§ãã
- æŽæ° ïŒæŽæ°ïŒïŒã¯ãã¬ãŒã ããšã«1ååŒã³åºãããŸãã ããã¯ããã¬ãŒã ãæç»ããããã®ã¡ã€ã³ã€ãã³ãã§ãã
- LateUpdate ïŒLateUpdateïŒïŒã¯ãUpdateïŒïŒãå®äºããåŸããã¬ãŒã ããšã«1ååŒã³åºãããŸãã UpdateïŒïŒã§å®è¡ãããèšç®ã¯ãLateUpdateïŒïŒãåŒã³åºããããšå®äºããŸãã LateUpdateïŒïŒã®äž»ãªçšéã¯ãéåžžããµãŒãããŒãã£ã®ã«ã¡ã©ãã©ããã³ã°ã§ãã UpdateïŒïŒã€ãã³ãã§ãã£ã©ã¯ã¿ãŒã®åããå®è¡ããå ŽåãLateUpdateïŒïŒã€ãã³ãã§ã«ã¡ã©ã®åããšãã®äœçœ®ã®èšç®ãè¡ãããšãã§ããŸãã ããã«ããããã£ã©ã¯ã¿ãŒãã«ã¡ã©ã®åãå®å šã«æ©ãããã«ãªãããã®äœçœ®ã確ä¿ãããŸãã
ã·ãŒã³ã®ã¬ã³ããªã³ã°
- OnPreCull ïŒã«ã¡ã©ã§ã·ãŒã³ãçµã¿ç«ãŠãåã«åŒã³åºãããŸãã ã¢ã»ã³ããªã¯ãã«ã¡ã©ã«è¡šç€ºããããªããžã§ã¯ãã決å®ããŸãã OnPreCullã¯ãã·ãŒã³ãäžå¯èŠãªããžã§ã¯ããããããªãã³ã°ããããå Žåã«ã®ã¿åŒã³åºãããŸãã
- OnBecameVisible / OnBecameInvisible ïŒãªããžã§ã¯ããã«ã¡ã©ã«å¯ŸããŠå¯èŠ/äžå¯èŠã«ãªããšåŒã³åºãããŸãã
- OnWillRenderObject ïŒãªããžã§ã¯ãã衚瀺ãããŠããå Žåãã«ã¡ã©ããšã«1ååŒã³åºãããŸãã
- OnPreRender ïŒ ã·ãŒã³ãã«ã¡ã©ã«æç»ãããåã«åŒã³åºãããŸãã
- OnRenderObject ïŒãã¹ãŠã®ã·ãŒã³ãªããžã§ã¯ããæç»ããããšãã«åŒã³åºãããŸãã GLãŸãã¯Graphics.DrawMeshNowé¢æ°ã䜿çšããŠããã®ã«ã¡ã©ã§ç¬èªã®å³é¢ãäœæã§ããŸãã
- OnPostRender ïŒã«ã¡ã©ã§ã·ãŒã³ãã¬ã³ããªã³ã°ããåŸã«åŒã³åºãããŸãã
- OnRenderImage ïŒProããŒãžã§ã³ã®ã¿ïŒïŒã·ãŒã³ãæç»ãããåŸã«åŒã³åºãããç»é¢äžã®ç»åãåŸåŠçããŸãã
- OnGUI ïŒã€ã³ã¿ãŒãã§ã€ã¹ã€ãã³ãã«å¿çããŠãã¬ãŒã å ã§æ°ååŒã³åºãããŸãã é 眮ã€ãã³ããšè²å¡ããæåã«åŠçããã次ã«ããŒããŒã/ããŠã¹å ¥åã€ãã³ããåŠçãããŸãã
- OnDrawGizmos ïŒã¹ããŒãžã§ã®ãºã¢ãæãããã«äœ¿çšãããŸãã
ã³ã«ãŒãã³
éåžžãã³ã«ãŒãã³åŒã³åºãã¯ãUpdateïŒïŒé¢æ°ãæ»ã£ãåŸã«è¡ãããŸãã ã³ã«ãŒãã³ã¯ãå®è¡ããããŸã§å®è¡ãäžæåæ¢ã§ããé¢æ°ã§ãã ã³ã«ãŒãã³ã®ããŸããŸãªäœ¿çšïŒ- yield ïŒã³ã«ãŒãã³ã¯ã次ã®ãã¬ãŒã ã§åŒã³åºããããã¹ãŠã®UpdateïŒïŒé¢æ°ã®åŸã«ç¶ããŸãã
- yield WaitForSecondsïŒ2ïŒ ïŒãã¹ãŠã®UpdateïŒïŒé¢æ°ããã¬ãŒã ã§æ¢ã«åŒã³åºãããŠããå Žåãæå®ãããé 延æéåŸã«ç¶è¡ããŸã
- yield WaitForFixedUpdateïŒïŒ ïŒãã¹ãŠã®FixedUpdateïŒïŒé¢æ°ãæ¢ã«åŒã³åºããããšãã«ç¶è¡ããŸã
- yield WWW ïŒWWWã³ã³ãã³ãã®ããŠã³ããŒããå®äºãããšç¶è¡ããŸãã
- StartCoroutineïŒMyFuncïŒãçæããŸãïŒã³ã«ãŒãã³ãªã³ã¯ãã³ã«ãŒãã³åŒã³åºãã¯MyFuncé¢æ°ãå®äºãããŸã§åŸ æ©ããŸãã
ãªããžã§ã¯ãã®ç Žå£
- OnDestroy ïŒãã®é¢æ°ã¯ããªããžã§ã¯ãã®ååšã®æåŸã®ãã¬ãŒã ã«å¯ŸããŠåŒã³åºãããŸãïŒãªããžã§ã¯ãã¯ãObject.Destroyã«å¿çããŠããŸãã¯ã·ãŒã³ãéãããããšãã«ç Žæ£ã§ããŸãïŒã
åºå£ã«
ãããã®é¢æ°ã¯ãã·ãŒã³å ã®ãã¹ãŠã®ã¢ã¯ãã£ããªããžã§ã¯ãã«å¯ŸããŠåŒã³åºãããŸãã- OnApplicationQuit ïŒãã®é¢æ°ã¯ãã¢ããªã±ãŒã·ã§ã³ãéããåã«ãã¹ãŠã®ã²ãŒã ãªããžã§ã¯ãã«å¯ŸããŠåŒã³åºãããŸãã ãšãã£ã¿ãŒã§ã¯ããŠãŒã¶ãŒãPlayModeãçµäºãããšçºçããŸãã Webãã¬ãŒã€ãŒã§ã¯ãããã¯Webãã¬ãŒã€ãŒãéãããšãã«çºçããŸãã
- OnDisable ïŒãã®é¢æ°ã¯ããªããžã§ã¯ããåæããããéã¢ã¯ãã£ãã«ãªããšåŒã³åºãããŸãã
ãããã£ãŠã次ã®ã¹ã¯ãªããå®è¡é åºãçºçããŸãã
- ãã¹ãŠã®èŠéã€ãã³ã
- ãã¹ãŠã®éå§ã€ãã³ã
- ã«ãŒãïŒãã«ã¿æéå€æ°ã®å¢åïŒ
- FixedUpdateã®ãã¹ãŠã®æ©èœ
- ç©çãšã³ãžã³ã®éçº
- OnEnter / Exit / Stayããªã¬ãŒã€ãã³ã
- OnEnter / Exit / Stayã³ãªãžã§ã³ã€ãã³ã
- transform.positionããã³rotationã«åŸã£ãåäœå€æ
- OnMouseDown / OnMouseUp drãå ¥åã€ãã³ã
- ãã¹ãŠã®ã€ãã³ãæŽæ°ïŒïŒ
- ã¢ãã¡ãŒã·ã§ã³ããã¬ã³ããããã³å€æ
- ãã¹ãŠã®LateUpdateã€ãã³ã
- ã¬ã³ããªã³ã°
ãã³ã
LateUpdateã§ã³ã«ãŒãã³ãå®è¡ãããšãã¬ã³ããªã³ã°ã®çŽåã«LateUpdateåŸã«ãåŒã³åºãããŸããã³ã«ãŒãã³ã¯ããã¹ãŠã®UpdateïŒïŒé¢æ°ã®åŸã«å®è¡ãããŸãã
翻蚳è ã®ããšãã
ããã¯Habréã«é¢ããç§ã®æåã®èšäºã§ãããæè¡ææžã®æåã®ç¿»èš³ã§ããã ããç§ã¯ã³ã¡ã³ãã§ãã¹ãŠã®ææ¡ãšã³ã¡ã³ãïŒå»ºèšçïŒããé¡ãããŸãã
ãã®æçš¿ã誰ãã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸã=ïŒ
ãŠãŒã¶ãŒLeopotamããã®PSã¢ããªã³
ã³ã«ãŒãã³ã¯ãã¡ã€ã³ã¹ã¬ããã§å®è¡ãããåãªãã³ãŒãã§ãã ããã¯ç解ããããšãéåžžã«éèŠã§ããéãèšç®ãã³ã«ãŒãã³ã«å ¥ããŠãã¹ãŠãããŸããããšæ±ºå®ããããšã¯åºæ¬çã«ééã£ãŠãããããèšç®ã¯æŽæ°ãŸãã¯æšæºã¡ãœããã®å¥ã®å Žæã§å®è¡ãããå Žåãšåãæ¹æ³ã§ã¹ããªãŒã ãåçŽã«è©°ãŸãããããã§ãã å埩ãç¹°ãè¿ããŠãããã»ã¹ãç¶ç¶ããããã«ãèšç®ãå埩ã«åå²ããå¿ èŠããããŸãã ã³ã«ãŒãã³ã®èŠç¹ã¯ãåã¬ã³ããªã³ã°ãµã€ã¯ã«ã§ãããã®å埩ã®åŒã³åºããèªååããããšã§ãã
äŸïŒ
IEnumerator FindBozons() { var isFound = false; var colliderSectionID = 0; var colliderSectionCount = 10; while (!isFound) { // , isFound = ProcessDataFromSection(colliderSectionID); colliderSectionID = (colliderSectionID ++) % colliderSectionCount; yield return null; } // / // } void Start() { StartCoroutine(FindBozons()); }
ã³ã«ãŒãã³ã¡ã«ããºã ã¯ãé¢æ°å®è¡ã®ã³ã³ããã¹ãã®ç¶æ ãèªåçã«ä¿åããäžæã®å ŽæïŒyieldïŒã«æ»ããŸãã