ºÇ½ª¹¹¿·¡§
orika_ex_miyako 2023ǯ10·î31Æü(²Ð) 11:45:01ÍúÎò
³Æ¥Þ¥¹¤´¤È¤Ëʬ´ô(ÁªÂò»è)¤¬¤¢¤ê¡¢Ç¤°Õ¤Î¥¤¥Ù¥ó¥È¤ò¼Â¹Ô¤·¤Ê¤¬¤é¿Ê¹Ô¤¹¤ë¥¿¥¤¥×¤Î¥²¡¼¥à¥·¥¹¥Æ¥à¤Î¼ÂÁõÎã¤Ç¤¹¡£
¡¡¤³¤³¤Ç¤Ï³Æ¥Þ¥¹ÌܤËÊ£¿ô¤Îʬ´ô½èÍý¤¬¤¢¤ë·Á¤Ç£±¥Þ¥¹¤º¤Ä¥¤¥Ù¥ó¥È¤ò¿Ê¹Ô¤µ¤»¤Æ¤¤¤¯ÊýË¡¤ò¼ÂÁõ¤·¤Þ¤¹¡£
ºÇ½é¤Î¥Þ¥¹¤Ïʬ´ô¤Ê¤·¡¢¼¡¤Î¥Þ¥¹¤Ï£²¤Ä¤Îʬ´ô¤¬¤¢¤ë¡¢¤È¤¤¤Ã¤¿¤è¤¦¤Ê¥í¡¼¥°¥é¥¤¥È·Ï¤Î¥²¡¼¥à¤Ç¤è¤¯¤ß¤é¤ì¤ë¥¤¥Ù¥ó¥È¥·¥¹¥Æ¥à¤Ç¤¹¡£
¡¡Á°²ó¤Ë¤Ä¤Å¤¡¢¹ç·×£´²ó¤Î¼ê½ç¤Ëʬ¤±¤Æ¼ÂÁõ¤ò¹Ô¤¤¤Þ¤¹¡£
¡»£±¡¥UI À©ºî ¡»£²¡¥¥¤¥Ù¥ó¥ÈÍѤΥ¯¥é¥¹À©ºî ¡»£³¡¥¥Ç¡¼¥¿¥Ù¡¼¥¹À©ºî ¡þ£´¡¥´ÉÍý¥¯¥é¥¹À©ºî
¡¡º£²ó¤Ï¡Ú£´¡¥´ÉÍý¥¯¥é¥¹À©ºî¡Û¤ò¹Ô¤¤¤Þ¤¹¡£
¡¡´ÉÍý¥¯¥é¥¹¤òºîÀ®¤·¡¢¤³¤ì¤Þ¤Ç¤ËÀ©ºî¤·¤Æ¤¤¿¤¹¤Ù¤Æ¤Î¾ðÊó¤ò¤Ä¤Ê¤®¹ç¤ï¤»¤Æ¥²¡¼¥à¥í¥¸¥Ã¥¯¤òºî¤ê¤Þ¤¹¡£
¡¡¥×¥ì¥¤¥ä¡¼¤È¥Þ¥¹°ÜÆ°¡¢¥¤¥Ù¥ó¥Èʬ´ô¤òÀ©¸æ¤¹¤ë¥¹¥¯¥ê¥×¥È¤òºîÀ®¤·¤Þ¤¹¡£
using System.Collections.Generic; using UnityEngine; using UniRx; using UnityEngine.UI; public class MainGameManager : MonoBehaviour { [SerializeField] private Transform routeBasePrefab; [SerializeField] private Transform routeBaseSetTran; [SerializeField] private GameObject routeImagePrefab; [SerializeField] private Transform playerIcon; [SerializeField] private RouteCollection routeCollection; [SerializeField] private Transform eventButtonTran; private List<Transform> routeList = new(); private List<EventBase> currentEventList = new(); private int currentRouteIndex = 0; void Start() { LoadRouteDatas(); GenerateEventButtons(); } /// <summary> /// ¥ë¡¼¥ÈºîÀ® /// </summary> private void LoadRouteDatas() { for (int i = 0; i < routeCollection.routeList.Count; i++) { // ¥ë¡¼¥ÈÇÛÃÖÍѤΥ١¼¥¹ºîÀ® Transform ruteBase = Instantiate(routeBasePrefab, routeBaseSetTran, false); routeList.Add(ruteBase); int index = 0; GameObject ruteBrunch = null; // ¥ë¡¼¥ÈÆâ¤Î¥¤¥Ù¥ó¥Èʬ¤À¤±¥Þ¥¹ÌÜÇÛÃÖ for (int eventCount = 0; eventCount < routeCollection.routeList[i].eventList.Count; eventCount++) { index = eventCount; ; ruteBrunch = Instantiate(routeImagePrefab, ruteBase, false); } // ¥¤¥Ù¥ó¥È¤¬£±¤Ä¤·¤«¤Ê¤¤¾ì¹ç¤Ë¤Ï¥Þ¥¹¤Î½ÄÊý¸þ¤ò¹¤²¤ë if (index == 0) { ruteBrunch.GetComponent<RectTransform>().sizeDelta = new(100, 240); } } } /// <summary> /// ¥×¥ì¥¤¥ä¡¼¥¢¥¤¥³¥ó¤ÎÇÛÃÖ°ÌÃ֤ι¹¿· /// </summary> /// <param name="nextParentObj"></param> private void SetPlayerLocation(Transform nextParentObj) { playerIcon.SetParent(nextParentObj); playerIcon.localPosition = new(0, 50, 0); // TODO ¥Þ¥¹¤Î¿§¤òÊѤ¨¤ë¡£UI ¤´¤Èº¹¤·Âؤ¨¤Ê¤É¤ÎÂбþ²Äǽ nextParentObj.GetComponent<Image>().color = Color.red; } /// <summary> /// ¥²¡¼¥à¿Ê¹ÔÍѤΥ롼¥Èʬ´ô¥Ü¥¿¥ó¤ÎºîÀ® /// </summary> private void GenerateEventButtons() { // ¼¡¤Î¥¤¥Ù¥ó¥ÈÍѤΥܥ¿¥óÀ¸À® for (int i = 0; i < routeCollection.routeList[currentRouteIndex].eventList.Count; i++) { int index = i; EventBase eventButton = Instantiate(routeCollection.routeList[currentRouteIndex].eventList[i], eventButtonTran, false); // ¥Ü¥¿¥ó¤Î¥¤¥Ù¥ó¥È¤ò¹ØÆÉ eventButton.OnClickEventButtonObserbable .ThrottleFirst(System.TimeSpan.FromSeconds(2.0f)) .Subscribe(async _ => { // ¥×¥ì¥¤¥ä¡¼¤Î¥¢¥¤¥³¥ó°ÌÃÖÀßÄê(»Ò¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤¹¤ë) SetPlayerLocation(routeList[currentRouteIndex].GetChild(index)); await eventButton.ExecuteEvent(); HandleEventCompletion(index); }) .AddTo(this); currentEventList.Add(eventButton); } } /// <summary> /// ¥¤¥Ù¥ó¥È½ªÎ»¸å¤Î½èÍý /// </summary> /// <param name="index"></param> private void HandleEventCompletion(int index) { DestroyEndEvents(); currentRouteIndex++; CheckRoute(); } /// <summary> /// ¥ë¡¼¥È¤¬»Ä¤Ã¤Æ¤¤¤ë¤«¥Á¥§¥Ã¥¯ /// »Ä¤Ã¤Æ¤¤¤Ê¤±¤ì¤Ð¥ë¡¼¥È¥¯¥ê¥¢ /// »Ä¤Ã¤Æ¤¤¤ì¤Ð¼¡¤Îʬ´ôÍѤΥܥ¿¥ó¤ÎºîÀ® /// </summary> private void CheckRoute() { // ¥ë¡¼¥È¤¬»Ä¤Ã¤Æ¤¤¤Ê¤±¤ì¤Ð¥ë¡¼¥È¥¯¥ê¥¢ if (routeCollection.routeList.Count <= currentRouteIndex) { Debug.Log("¥ë¡¼¥È½ªÎ»"); return; } // ¥ë¡¼¥È¤¬»Ä¤Ã¤Æ¤¤¤ì¤Ð¼¡¤Îʬ´ôÍѤΥܥ¿¥ó¤ÎºîÀ® GenerateEventButtons(); } /// <summary> /// ʬ´ôÍѥܥ¿¥ó¤Îºï½ü /// </summary> private void DestroyEndEvents() { // ¥¤¥Ù¥ó¥ÈÍѤΥܥ¿¥óºï½ü for (int i = 0; i < currentEventList.Count; i++) { Destroy(currentEventList[i].gameObject); } // Á°¤Î¥¤¥Ù¥ó¥È¤òºï½ü currentEventList.Clear(); } }
¡¡routeBasePrefab, routeBaseSetTran, routeImagePrefab, playerIcon, routeCollection, eventButtonTran ¤Ê¤É¤Ï¡¢
Unity¤Î¥·¥ê¥¢¥é¥¤¥º¤µ¤ì¤¿¥Õ¥£¡¼¥ë¥É¤Ç¡¢¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤«¤éÀßÄê¤Ç¤¤ë¤è¤¦¤Ë¤·¤Æ¤¤¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ä¥×¥ì¥Ï¥Ö¡¢¥¹¥¯¥ê¥×¥¿¥Ö¥ë¡¦¥ª¥Ö¥¸¥§¥¯¥È¤Ê¤É¤òÀßÄê¤Ç¤¤Þ¤¹¡£
¡¡routeList ¤Ï¡¢RouteBase ¤ò³ÊǼ¤¹¤ë¤¿¤á¤Î Transform ¥ª¥Ö¥¸¥§¥¯¥È¤Î¥ê¥¹¥È¤Ç¤¹¡£
¥ë¡¼¥È¤ÏÊ£¿ô¤Î¥¤¥Ù¥ó¥È¤«¤é¹½À®¤µ¤ì¤Æ¤ª¤ê¡¢¤½¤ì¤é¤Î´ÉÍý¤ò¤·¤Þ¤¹¡£
¡¡currentEventList ¤Ï¡¢¸½ºß¤Î¥ë¡¼¥ÈÆâ¤Çɽ¼¨Ãæ¤Î¥¤¥Ù¥ó¥È¥Ü¥¿¥ó¤ò³ÊǼ¤¹¤ë¥ê¥¹¥È¤Ç¤¹¡£
¤³¤Á¤é¤ËÅÐÏ¿¤·¤Æ¤ª¤¯¤³¤È¤Ç¡¢¸å¤Ç¥¤¥Ù¥ó¥È¥Ü¥¿¥ó¤òºï½ü¤¹¤ë¤¿¤á¤Ë»ÈÍѤµ¤ì¤Þ¤¹¡£
¡¡currentRouteIndex ¤Ï¡¢¸½ºß¤Î¥ë¡¼¥È¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹¤ò¼¨¤¹À°¿ô¤Ç¤¹¡£
¥²¡¼¥à¤Î¿Ê¹ÔÃæ¤Ë¸½ºß¤Î¥ë¡¼¥È¤òÄÉÀפ¹¤ë¤¿¤á¤Ë»ÈÍѤµ¤ì¤Þ¤¹¡£
¡¡LoadRouteDatas() ¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤·¡¢¥ë¡¼¥È¥Ç¡¼¥¿¤ÎÆɤ߹þ¤ß¤È RouteBase ¤ÎºîÀ®¤ò¹Ô¤¤¤Þ¤¹¡£
¡¡GenerateEventButtons() ¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤·¡¢¸½ºß¤Î¥ë¡¼¥È¤ËÂбþ¤¹¤ë¥¤¥Ù¥ó¥È¥Ü¥¿¥ó¤ÎÀ¸À®¤ò¹Ô¤¤¤Þ¤¹¡£
¡¡LoadRouteDatas ¥á¥½¥Ã¥É¤Ï¡¢¥ë¡¼¥È¥Ç¡¼¥¿¤ÎÆɤ߹þ¤ß¤È RouteBase ¤ÎºîÀ®¤ò¹Ô¤¦¥á¥½¥Ã¥É¤Ç¤¹¡£
¡¡routeCollection Æâ¤Î³Æ¥ë¡¼¥È¥Ç¡¼¥¿¤ËÂФ·¤Æ¡¢°Ê²¼¤Î½èÍý¤ò·«¤êÊÖ¤·¤Þ¤¹¡£
¥ë¡¼¥ÈÍѤΥ١¼¥¹¥ª¥Ö¥¸¥§¥¯¥È RouteBase ¤ò Instantiate ¤ò»È¤Ã¤ÆºîÀ®¤·¡¢routeBaseSetTran ¤Î»Ò¥ª¥Ö¥¸¥§¥¯¥È¤È¤·¤ÆÇÛÃÖ¤·¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢¥²¡¼¥à²èÌ̤ǤϿåÊ¿Êý¸þ¤Ë¥ë¡¼¥È¤¬Ê¤֤褦¤Ë¤Ê¤ê¤Þ¤¹¡£
¡¡¼¡¤Ë¡¢¤½¤Î RouteBase Æâ¤Ë³Æ¥ë¡¼¥È¤Î¥¤¥Ù¥ó¥Èʬ´ô¤òɽ¤¹ Route ¥ª¥Ö¥¸¥§¥¯¥È¤òÀ¸À®¤·¤Þ¤¹¡£
¥¤¥Ù¥ó¥È¤Î¿ô¤¬£±¤Ä¤Î¾ì¹ç¡¢Route ¥ª¥Ö¥¸¥§¥¯¥È¤Î½ÄÊý¸þ¤Î¥µ¥¤¥º¤òÊѹ¹¤·¡¢Ä¹ºÙ¤¤£±¥Þ¥¹¤Ë¤·¤Þ¤¹¡£
¥¤¥Ù¥ó¥È¤Î¿ô¤¬£²¤Ä¤Î¾ì¹ç¡¢¿âľÊý¸þ¤Ëʤ֣²¥Þ¥¹¤Ë¤·¤Þ¤¹¡£
¡¡SetPlayerLocation ¥á¥½¥Ã¥É¤Ï¡¢¥×¥ì¥¤¥ä¡¼¥¢¥¤¥³¥ó¤Î°ÌÃÖ¤ò¹¹¿·¤¹¤ë¤¿¤á¤Î¥á¥½¥Ã¥É¤Ç¤¹¡£
ÆÃÄê¤Î¥Þ¥¹Ìܤ˥ץ쥤¥ä¡¼¥¢¥¤¥³¥ó¤ò°ÜÆ°¤·¡¢Å¬ÀڤʰÌÃÖ¤ËÀßÄꤷ¤Þ¤¹¡£
¤Þ¤¿¡¢¥Þ¥¹¤Î¿§¤òÊѹ¹¤¹¤ë¤³¤È¤Ç¡¢Ä̲ᤷ¤Æ¤¤¿Ê¬´ôɽ¸½¤â²Äǽ¤È¤·¤Æ¤¤¤Þ¤¹¡£
¡¡GenerateEventButtons ¥á¥½¥Ã¥É¤Ï¡¢¸½ºß¤Î¥ë¡¼¥È¤ËÂбþ¤¹¤ë¥¤¥Ù¥ó¥È¥Ü¥¿¥ó¤òÀ¸À®¤·¡¢¥Ü¥¿¥ó¤Î¥¯¥ê¥Ã¥¯¥¤¥Ù¥ó¥È¤ò¹ØÆɤ¹¤ë¤¿¤á¤Î¥á¥½¥Ã¥É¤Ç¤¹¡£
¡¡¸½ºß¤Î¥ë¡¼¥È¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿³Æ¥¤¥Ù¥ó¥È¤ËÂФ·¤Æ°Ê²¼¤Î½èÍý¤ò·«¤êÊÖ¤·¤Þ¤¹¡£
¥¤¥Ù¥ó¥È¥Ü¥¿¥ó¤ò Instantiate ¤ò»ÈÍѤ·¤ÆÀ¸À®¤·¡¢eventButtonTran ¤Î»Ò¥ª¥Ö¥¸¥§¥¯¥È¤È¤·¤ÆÇÛÃÖ¤·¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢¥²¡¼¥à²èÌ̤ˤϥ¤¥Ù¥ó¥Èʬ´ôÁªÂòÍѤΥܥ¿¥ó¤¬¿åÊ¿Êý¸þ¤ËʤӤޤ¹¡£
¡¡¥¤¥Ù¥ó¥È¥Ü¥¿¥ó¤Î¥¯¥ê¥Ã¥¯¥¤¥Ù¥ó¥È¤ò ThrottleFirst ¤Ç½ÅÊ£ËÉ»ßÀ©¸æ¤·¡¢¥Ü¥¿¥ó¤Î¥¯¥ê¥Ã¥¯¤ò¼Â¹Ô¤·¤Þ¤¹¡£
¥Ü¥¿¥ó¤Î¥¯¥ê¥Ã¥¯»þ¤Ë¡¢¥×¥ì¥¤¥ä¡¼¥¢¥¤¥³¥ó¤òŬÀڤʰÌÃÖ¤ËÀßÄꤷ¡¢ExecuteEvent ¥á¥½¥Ã¥É¤ò¼Â¹Ô¤¹¤ë¤³¤È¤Ç¡¢³Æ¥Ü¥¿¥ó¤Ëɳ¤Å¤¤¤¿¥¤¥Ù¥ó¥È¤ò¼Â¹Ô¤·¤Þ¤¹¡£
À¸À®¤·¤¿¥¤¥Ù¥ó¥È¥Ü¥¿¥ó¤ò currentEventList ¤ËÄɲä·¤Þ¤¹¡£¤³¤¦¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢¥¤¥Ù¥ó¥È½ªÎ»¸å¡¢¥¤¥Ù¥ó¥È¥Ü¥¿¥ó¤ò®¤ä¤«¤Ëºï½ü¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
¡¡HandleEventCompletion ¥á¥½¥Ã¥É¤Ï¡¢¥¤¥Ù¥ó¥È¤Î´°Î»¸å¤Ë¼Â¹Ô¤µ¤ì¤ë½èÍý¤ò´ÉÍý¤¹¤ë¥á¥½¥Ã¥É¤Ç¤¹¡£
¡¡É½¼¨¤µ¤ì¤Æ¤¤¤ë¥¤¥Ù¥ó¥È¥Ü¥¿¥ó¤òºï½ü¤¹¤ë¤¿¤á¤Î DestroyEndEvents ¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤·¤Þ¤¹¡£
¸½ºß¤Î¥ë¡¼¥È¥¤¥ó¥Ç¥Ã¥¯¥¹¤ò¹¹¿·¤·¤Þ¤¹¡£
¡¡¼¡¤Î¥ë¡¼¥È¤¬Â¸ºß¤¹¤ë¤«¤É¤¦¤«¤òȽÄꤹ¤ë¤¿¤á¤Î CheckRoute ¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤·¤Þ¤¹¡£
¡¡CheckRoute ¥á¥½¥Ã¥É¤Ï¡¢¥²¡¼¥àÆâ¤Î¥ë¡¼¥È¤¬»Ä¤Ã¤Æ¤¤¤ë¤«¤É¤¦¤«¤ò³Îǧ¤·¡¢½èÍý¤òʬ´ô¤¹¤ë¥á¥½¥Ã¥É¤Ç¤¹¡£
¡¡¥ë¡¼¥È¤¬¤¹¤Ù¤Æ´°Î»¤·¤¿¾ì¹ç¡¢¥²¡¼¥àÆâ¤Î¤¹¤Ù¤Æ¤Î¥ë¡¼¥È¤¬´°Î»¤·¤¿¤«¤É¤¦¤«¤ò³Îǧ¤·¤Þ¤¹¡£
¤â¤·´°Î»¤·¤Æ¤¤¤ë¾ì¹ç¡¢¥Ç¥Ð¥Ã¥°¥í¥°¤Ë "¥ë¡¼¥È½ªÎ»" ¤Èɽ¼¨¤·¡¢¥²¡¼¥à¤ò½ªÎ»¤·¤Þ¤¹¡£¼ÂºÝ¤Ë¤Ï¤³¤³¤Ë¡¢¥²¡¼¥à½ªÎ»½èÍý¤ò¼ÂÁõ¤·¤Þ¤·¤ç¤¦¡£
¡¡¥ë¡¼¥È¤¬»Ä¤Ã¤Æ¤¤¤ë¾ì¹ç¡¢¼¡¤Îʬ´ôÍѤΥܥ¿¥ó¤òÀ¸À®¤¹¤ë¤¿¤á¤Ë GenerateEventButtons ¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤·¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢¼¡¤Î¥ë¡¼¥È¤Ë¿Ê¹Ô¤·¡¢¿·¤·¤¤¥¤¥Ù¥ó¥È¥Ü¥¿¥ó¤¬À¸À®¤µ¤ì¤Þ¤¹¡£
¡¡¤³¤³¤Þ¤Ç¤Î½èÍý¤Îή¤ì¤Ë¤è¤Ã¤Æ¡¢ºÆÅÙ¡¢¥¤¥Ù¥ó¥È¥Ü¥¿¥ó¤òÀ¸À®¤¹¤ëÉôʬ¤Ë½èÍý¤¬Ìá¤ë¤¿¤á¡¢£±¤Ä¤Î¥²¡¼¥à¥µ¥¤¥¯¥ë¤¬´°À®¤·¤Æ¤¤¤ë¤³¤È¤¬Ê¬¤«¤ê¤Þ¤¹¡£
¡¡DestroyEndEvents ¥á¥½¥Ã¥É¤Ï¡¢É½¼¨¤µ¤ì¤Æ¤¤¤ë¥¤¥Ù¥ó¥È¥Ü¥¿¥ó¤òºï½ü¤¹¤ë¤¿¤á¤Î¥á¥½¥Ã¥É¤Ç¤¹¡£
¡¡currentEventList Æâ¤Î³Æ¥¤¥Ù¥ó¥È¥Ü¥¿¥ó¤òºï½ü¤·¤Þ¤¹¡£¤³¤ì¤Ë¤è¤ê¡¢¥¤¥Ù¥ó¥È¥Ü¥¿¥ó¤¬²èÌ̾夫¤éºï½ü¤µ¤ì¤Þ¤¹¡£
Á°¤Î¥¤¥Ù¥ó¥È¥Ü¥¿¥ó¤¬¤¹¤Ù¤Æºï½ü¤µ¤ì¤¿¸å¡¢currentEventList ¤ò¥¯¥ê¥¢¤·¤Þ¤¹¡£
¡¡¤³¤ì¤Ë¤è¤ê¡¢¿·¤·¤¤¥ë¡¼¥È¤Ë°Ü¹Ô¤¹¤ë¤È¡¢¸Å¤¤¥¤¥Ù¥ó¥È¥Ü¥¿¥ó¤¬ºï½ü¤µ¤ì¡¢¿·¤·¤¤¥¤¥Ù¥ó¥È¥Ü¥¿¥ó¤¬À¸À®¤µ¤ì¤ë½àÈ÷¤¬À°¤¤¤Þ¤¹¡£
¡¡¥Ü¥¿¥ó¤Î¥¯¥ê¥Ã¥¯¥¤¥Ù¥ó¥È¤Ï¡¢³Æ¥¤¥Ù¥ó¥È¥Ü¥¿¥ó(EventBase ¥¯¥é¥¹Æâ)¤Î OnClickEventButtonObserbable ¤ò»ÈÍѤ·¤Æ¹ØÆɤµ¤ì¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢¥¤¥Ù¥ó¥È¥Ü¥¿¥ó¤¬¥¯¥ê¥Ã¥¯¤µ¤ì¤¿¤È¤¤Ë¡¢¥×¥ì¥¤¥ä¡¼¥¢¥¤¥³¥ó¤Î°ÌÃÖ¤ÎÀßÄê¡¢¥¤¥Ù¥ó¥È¤Î¼Â¹Ô¡¢¤ª¤è¤Ó¥¤¥Ù¥ó¥È´°Î»¸å¤Î½èÍý¤¬¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
¡¡¥¯¥ê¥Ã¥¯¥¤¥Ù¥ó¥È¤Ï ThrottleFirst ¤ò»ÈÍѤ·¤ÆÀ©¸æ¤µ¤ì¡¢Ï¢Â³¤·¤¿¥¯¥ê¥Ã¥¯¤òËɤ®¤Þ¤¹¡£
¡¡ºÇ½ªÅª¤Ë¡¢AddTo(this) ¤ò»ÈÍѤ·¤Æ¥¤¥Ù¥ó¥È¤ÎÅÐÏ¿¤ò´ÉÍý¤·¡¢this ¥ª¥Ö¥¸¥§¥¯¥È(MainGameManager)¤ËÂФ·¤Æ¥ê¥ó¥¯¤µ¤ì¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢¥¯¥é¥¹¤ÎÇË´þ(¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ÎÇ˲õ)¤ÈƱ»þ¤Ë¥¯¥ê¥Ã¥¯¥¤¥Ù¥ó¥È¤Î¹ØÆɤ⽪λ¤·¤Þ¤¹¡£
¡¡¥Ü¥¿¥ó¤Î¹ØÆɽèÍý¤ò EventBase ¥¯¥é¥¹Æâ¤Ç¤Ï¤Ê¤¯¡¢MainGameManager ¥¯¥é¥¹Æâ¤Ç¹Ô¤¦¥¢¥×¥í¡¼¥Á¤Ï¡¢
¥Ü¥¿¥ó¤Î¥¯¥ê¥Ã¥¯¥¤¥Ù¥ó¥È¤¬ EventBase ¥¯¥é¥¹¤Ë°Í¸¤»¤º¡¢¥Ü¥¿¥ó¤Î¥¯¥ê¥Ã¥¯¤Ë±þ¤¸¤Æ°Û¤Ê¤ë½èÍý¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤Ë½ÀÆðÀ¤òÄ󶡤¹¤ëÀ߷פǤ¹¡£
¡¡¼çÍפÊÍøÅÀ¤È¤·¤Æ¡¢¼¡¤ÎÅÀ¤¬µó¤²¤é¤ì¤Þ¤¹¡£
¡¡¥Ü¥¿¥ó¤Î¥¯¥ê¥Ã¥¯¤Ë´ØÏ¢¤¹¤ë½èÍý¤ò MainGameManager ¤Ë½¸Ç¼¤¹¤ë¤³¤È¤Ç¡¢¥¤¥Ù¥ó¥È¥Ù¡¼¥¹¤Î¥¯¥é¥¹¤Ï¤½¤ÎÌò³ä¤ËÀìÇ°¤Ç¤¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢¥¯¥é¥¹¤ÎÌò³ä¤¬ÌÀ³Î¤Ëʬ¤«¤ì¡¢¥³¡¼¥É¤ÎÍý²ò¤¬Íưפˤʤê¤Þ¤¹¡£
¡¡¿·¤·¤¤¥¤¥Ù¥ó¥È¤òÄɲ乤ëºÝ¡¢¥Ü¥¿¥ó¤Î¥¯¥ê¥Ã¥¯½èÍý¤òÊѹ¹¤¹¤ëɬÍפ¬¤¢¤ë¾ì¹ç¡¢¤³¤ì¤ò MainGameManager Æâ¤Ç¹Ô¤¨¤ë¤¿¤á¡¢
¥¤¥Ù¥ó¥È¤Ë´ØÏ¢¤¹¤ë¤¹¤Ù¤Æ¤Î½èÍý¤òÃæ±û¤Ç´ÉÍý¤Ç¤¤Þ¤¹¡£¤³¤ì¤Ï¡¢¾ÍèŪ¤Ë¥³¡¼¥É¤ò³ÈÄ¥¤·¤ä¤¹¤¯¤¹¤ë½ÅÍפÊÍ×ÁǤǤ¹¡£
¡¡¥Ü¥¿¥ó¥¯¥ê¥Ã¥¯½èÍý¤¬ MainGameManager Æâ¤Ë½¸Ç¼¤µ¤ì¤Æ¤¤¤ë¤¿¤á¡¢¥æ¥Ë¥Ã¥È¥Æ¥¹¥È¤ò¼Â¹Ô¤·¤ä¤¹¤¯¤Ê¤ê¤Þ¤¹¡£
°Û¤Ê¤ë¥¤¥Ù¥ó¥È¤Î¥Ï¥ó¥É¥ê¥ó¥°¡¦¥·¥Ê¥ê¥ª¤ò¥Æ¥¹¥È¤¹¤ë¤Î¤¬ÍưפǤ¹¡£
¡¡¥¤¥Ù¥ó¥È¤ÎÃê¾Ý²½¤Ï¡¢¤³¤Î¥²¡¼¥à¤Î½ÀÆðÀ¤È³ÈÄ¥À¤ò¸þ¾å¤µ¤»¤ë½ÅÍפÊÍ×ÁǤǤ¹¡£
¤³¤ì¤Ë¤è¤ê¡¢°Û¤Ê¤ë¼ïÎà¤Î¥¤¥Ù¥ó¥È¤ò´Êñ¤ËÄɲä·¡¢¤½¤ì¤¾¤ì¤Î¥¤¥Ù¥ó¥È¤¬°Û¤Ê¤ë¿¶¤ëÉñ¤¤¤ò»ý¤Ä¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¡¡EventBase ¥¯¥é¥¹¤ÏÃê¾Ý¥¯¥é¥¹¤Ç¡¢¼ÂºÝ¤Î¥¤¥Ù¥ó¥È¤Ë¶¦Ä̤Υץí¥Ñ¥Æ¥£¤È¥á¥½¥Ã¥É¤òÄ󶡤·¤Þ¤¹¡£
¤³¤ì¤Ë¤Ï ExecuteEvent ¥á¥½¥Ã¥É¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£¤³¤Î¥á¥½¥Ã¥É¤Ï³Æ¥µ¥Ö¥¯¥é¥¹¤Ç¼ÂÁõ¤µ¤ì¤Þ¤¹¡£
¡¡¤Þ¤¿¡¢OnClickEventButtonObserbable ¤È¤¤¤¦ IObservable<Unit> ¥×¥í¥Ñ¥Æ¥£¤¬Ä󶡤µ¤ì¡¢¥Ü¥¿¥ó¤Î¥¯¥ê¥Ã¥¯¥¤¥Ù¥ó¥È¤¬È¯À¸¤·¤¿¤È¤¤ËÄÌÃΤò¼õ¤±¤ë¤¿¤á¤Ë»ÈÍѤµ¤ì¤Þ¤¹¡£
¤³¤Î¥×¥í¥Ñ¥Æ¥£¤Ë¤è¤ê¡¢¥Ü¥¿¥ó¤Î¥¯¥ê¥Ã¥¯¥¤¥Ù¥ó¥È¤òÈó¾ï¤Ë¸ú²ÌŪ¤Ë¹ØÆɤǤ¤Þ¤¹¡£
¡¡³Æ¶ñÂÎŪ¤Ê¥¤¥Ù¥ó¥È¥¯¥é¥¹¤Ï EventBase ¥¯¥é¥¹¤ò·Ñ¾µ¤·¡¢¶¦Ä̤Υץí¥Ñ¥Æ¥£¤È¥á¥½¥Ã¥É¤ò¼õ¤±·Ñ¤®¤Þ¤¹¡£
¤·¤«¤·¡¢³Æ¥¤¥Ù¥ó¥È¥¯¥é¥¹¤Ï°Û¤Ê¤ë¿¶¤ëÉñ¤¤¤ò»ý¤Ä¤¿¤á¡¢ExecuteEvent ¥á¥½¥Ã¥É¤ò¥ª¡¼¥Ð¡¼¥é¥¤¥É¤·¤ÆÆȼ«¤Î¼ÂÁõ¤òÄ󶡤·¤Þ¤¹¡£
¡¡¤³¤ì¤Ë¤è¤ê¡¢Î㤨¤Ð¡Öõº÷¥¤¥Ù¥ó¥È¡×¤È¡ÖÀïÆ®¥¤¥Ù¥ó¥È¡×¤Ê¤É¡¢°Û¤Ê¤ë¥¿¥¤¥×¤Î¥¤¥Ù¥ó¥È¤ò´Êñ¤ËÄɲäǤ¤Þ¤¹¡£
³Æ¥¤¥Ù¥ó¥È¤Ï¶¦Ä̤Υ¯¥ê¥Ã¥¯¥¤¥Ù¥ó¥È¤ò»ý¤Á¡¢¥¯¥ê¥Ã¥¯¤¬È¯À¸¤¹¤ë¤ÈÂбþ¤¹¤ë ExecuteEvent ¥á¥½¥Ã¥É¤¬¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
¡¡¤³¤Î¥¢¥×¥í¡¼¥Á¤Ë¤è¤ê¡¢¿·¤·¤¤¥¤¥Ù¥ó¥È¤òÄɲ乤ëºÝ¤Ë¤Ï¡¢¿·¤·¤¤¶ñÂÎŪ¤Ê¥¤¥Ù¥ó¥È¥¯¥é¥¹¤òºîÀ®¤·¡¢É¬Íפʿ¶¤ëÉñ¤¤¤ò¼ÂÁõ¤¹¤ë¤À¤±¤ÇºÑ¤ß¤Þ¤¹¡£
´û¸¤Î¥³¡¼¥É¤òÊѹ¹¤¹¤ëɬÍפϤ¢¤ê¤Þ¤»¤ó¡£¤³¤ì¤Ë¤è¤ê¡¢¥²¡¼¥à¤ÎÍ×ÁǤò¸úΨŪ¤Ë³ÈÄ¥¤Ç¤¤Þ¤¹¡£
¡¡¤Þ¤¿¡¢await eventButton.ExecuteEvent(); ¤ÎÉôʬ¤Ç¤Ï¡¢¸½ºßɽ¼¨¤µ¤ì¤Æ¤¤¤ë¥¤¥Ù¥ó¥È¥Ü¥¿¥ó¤Î¼ïÎà¤Ë±þ¤¸¤Æ¡¢
Âбþ¤¹¤ë¶ñÂÎŪ¤Ê¥¤¥Ù¥ó¥È¥¯¥é¥¹¤Î ExecuteEvent ¥á¥½¥Ã¥É¤¬¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£½¾¤Ã¤Æ¡¢°Û¤Ê¤ë¥¤¥Ù¥ó¥È¤¬°Û¤Ê¤ëÊýË¡¤Ç½èÍý¤µ¤ì¤ë¤¿¤á¡¢½ÀÆðÀ¤¬¸þ¾å¤·¤Þ¤¹¡£
¡¡¤³¤Î¥¢¡¼¥¥Æ¥¯¥Á¥ã¤Ë¤è¤ê¡¢¿·¤·¤¤¥¤¥Ù¥ó¥È¤òÄɲä·¡¢´û¸¤Î¥¤¥Ù¥ó¥È¤òÊѹ¹¤¹¤ë¤¿¤á¤Ë¡¢¥³¡¼¥ÉÁ´ÂΤòÂçÉý¤ËÊѹ¹¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤»¤ó¡£
¤½¤Î¤¿¤á¡¢¥²¡¼¥à¤Î³«È¯¤ÈÊݼ餬´Êñ¤Ë¤Ê¤ê¡¢°Û¤Ê¤ë¼ïÎà¤Î¥¤¥Ù¥ó¥È¤ò¸úΨŪ¤Ë¥µ¥Ý¡¼¥È¤Ç¤¤Þ¤¹¡£
¡¡°Ê¾å¤ÎÆâÍƤˤè¤ê¡¢Unity¤Ç¥ë¡¼¥ÈÁªÂò·¿¥²¡¼¥à¤òÀ©¸æ¤¹¤ë¤¿¤á¤Î¥á¥¤¥ó¤Î¥í¥¸¥Ã¥¯¤¬Ä󶡤µ¤ì¤Þ¤¹¡£
¡¡
¡¡¥Ò¥¨¥é¥ë¥¡¼¤Î¶õ¤¤¤Æ¤¤¤ë¾ì½ê¤Ç±¦¥¯¥ê¥Ã¥¯¤ò¤·¤Æ¥á¥Ë¥å¡¼¤ò³«¤¡¢Create Empty ¤ò¹Ô¤Ã¤Æ¿·¤·¤¤¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ®¤·¤Þ¤¹¡£
̾Á°¤ò MainGameManager ¤ËÊѹ¹¤·¡¢Àè¤Û¤ÉºîÀ®¤·¤¿ MainGameManager ¥¹¥¯¥ê¥×¥È¤ò¥¢¥¿¥Ã¥Á¤·¤Þ¤¹¡£
¡¡¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤ò³Îǧ¤·¡¢³ÆÊÑ¿ô¤ËɬÍפʾðÊó¤ò¥¢¥µ¥¤¥ó¤·¤Æ¤¯¤À¤µ¤¤¡£
¥¤¥ó¥¹¥Ú¥¯¥¿¡¼²èÁü

¡¡°Ê¾å¤Ç´°Î»¤Ç¤¹¡£
¡¡RouteCollection ¤ËÅÐÏ¿¤·¤¿¥¤¥Ù¥ó¥È¤ÎÆâÍƤǥ롼¥È¾ðÊó¤¬À¸À®¤µ¤ì¤ë¤«³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£

¡¡¤Þ¤¿ºÇ½é¤ËÀ¸À®¤µ¤ì¤ë¥¤¥Ù¥ó¥È¤Î¥Ü¥¿¥ó¤â¡¢RouteCollection ¤ËÅÐÏ¿¤·¤¿¥¤¥Ù¥ó¥È¤ÎÆâÍƤˤʤäƤ¤¤ë¤«¤ò³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£

¡¡¥¹¥¯¥ê¥×¥¿¥Ö¥ë¡¦¥ª¥Ö¥¸¥§¥¯¥È¤ËÅÐÏ¿¤·¤¿¾ðÊóÄ̤êÀµ¤·¤¯½èÍý¤¬Æ°¤¤¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢¼¡¤Î³Îǧ¤ò¹Ô¤¤¤Þ¤¹¡£
¡¡¥¤¥Ù¥ó¥È¤Î¥Ü¥¿¥ó¤ò²¡¤·¡¢Console ¥Ó¥å¡¼¤Ë¥í¥°¤¬É½¼¨¤µ¤ì¤ë¤«³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£
¤½¤Î¸å¡¢¼¡¤Î¥¤¥Ù¥ó¥È¤Îʬ´ô¥Ü¥¿¥ó¤¬ºîÀ®¤µ¤ì¤ë¤«¡¢¤½¤ì¤é¤â²¡¤¹¤³¤È¤Çʬ´ô¤·¤Ê¤¬¤é½èÍý¤¬¿Ê¤ó¤Ç¤¤¤¯¤³¤È¤ò³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£
¡¡°ì½ï¤Ë¥×¥ì¥¤¥ä¡¼¤Î¥¢¥¤¥³¥ó¤¬°ÜÆ°¤·¡¢Ê¬´ô¤ÇÁªÂò¤·¤¿¥Þ¥¹¤Î¿§¤âÊѤï¤ê¤Þ¤¹¡£
¡ã¼ÂÁõÆ°²è¡ä
Æ°²è¥Õ¥¡¥¤¥ë¤Ø¤Î¥ê¥ó¥¯
¡¡ºÇ¸å¤Î¥¤¥Ù¥ó¥È¤¬½ªÎ»¤·¤¿¤é¡¢¥¤¥Ù¥ó¥È½ªÎ»¤Î¥í¥°¤¬É½¼¨¤µ¤ì¤Þ¤¹¡£
¤³¤Á¤é¤â¹ç¤ï¤»¤Æ³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£

¡¡¤¹¤Ù¤ÆÌäÂê¤Ê¤¯Æ°ºî¤·¤¿¤é¡¢¥¹¥¯¥ê¥×¥¿¥Ö¥ë¡¦¥ª¥Ö¥¸¥§¥¯¥È¤ËÅÐÏ¿¤¹¤ë¥¤¥Ù¥ó¥È¤Î¾ðÊó¤òÊѹ¹¤·¤¿¤ê¡¢¥ë¡¼¥È¿ô¤òÁý¤ä¤·¤Æ
Ʊ¤¸¤è¤¦¤ËÆ°ºî¤¹¤ë¤«¤ò³Îǧ¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£


¡¡¤³¤Î½èÍý¤Ë¤è¤ê¡¢¥²¡¼¥à¤Î´ðËÜŪ¤Ê¥µ¥¤¥¯¥ë¤¬´°À®¤·¡¢¤½¤Î¸å¤Ï¡¢MainGameManager ¤Î¥½¡¼¥¹¥³¡¼¥É¤Î½¤Àµ¤ÏÉÔÍפǡ¢¥ë¡¼¥È¤ÎÊѹ¹¡¦Äɲ䬹Ԥ¨¤Þ¤¹¡£
¡¡½èÍý¤òÃê¾Ý²½¤·¡¢¥¹¥¯¥ê¥×¥¿¥Ö¥ë¡¦¥ª¥Ö¥¸¥§¥¯¥È¤Ê¤É¤ò³èÍѤ¹¤ë¤³¤È¤Ç¡¢¥²¡¼¥à¥í¥¸¥Ã¥¯¤òºî¤ê½Ð¤¹¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
- ¥«¥Æ¥´¥ê¡§
- ¿Ê³Ø/¥¹¥¯¡¼¥ë
- ¥×¥í¥°¥é¥ß¥ó¥°
¥³¥á¥ó¥È¤ò¤«¤¯