Unity¤Ë´ØÏ¢¤¹¤ëµ­»ö¤Ç¤¹

¡¡£²²ó¤Î¼ê½ç¤Ëʬ¤±¤Æ¡¢·ÐÏ©°ÜÆ°¤Îµ¡Ç½¤ò¼ÂÁõ¤·¤Þ¤¹¡£
º£²ó¤Ï¡¢·ÐÏ©¤Î¾ðÊó¤ò¸µ¤Ë°ÜÆ°¤Î½èÍý¤ò¹Ô¤¦ RailMoveController ¥¯¥é¥¹¤òºîÀ®¤·¡¢¼«Æ°Åª¤Ë·ÐÏ©¤Ë±è¤Ã¤¿°ÜÆ°¤òÀ©¸æ¤¹¤ë½èÍý¤ò¼ÂÁõ¤·¤Æ¤¤¤­¤Þ¤¹¡£

¡ã¼ÂÁõÆ°²è¡ä
Æ°²è¥Õ¥¡¥¤¥ë¤Ø¤Î¥ê¥ó¥¯



¼ê½ç£¸ ¡¼·ÐÏ©¤Î¼«Æ°°ÜÆ°µ¡Ç½¡¼

¡¡¤³¤Î½èÍý¤¬ÌäÂê¤Ê¤¯Æ°ºî¤¹¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¤é¡¢¤µ¤é¤ËÊ̤μê½ç¤¬¼ÂÁõ¤Ç¤­¤Þ¤¹¡£
GameManager ¥¯¥é¥¹¤òºîÀ®¤·¤Æ¡¢¤½¤Á¤é¤«¤é RailPathData ¥¯¥é¥¹¤Î¾ðÊó¤ò¼õ¤±¼è¤Ã¤Æ¡¢Æ±¤¸¤è¤¦¤Ë°ÜÆ°¤Î½èÍý¤òÆ°ºî¤¹¤ë¤è¤¦¤Ë½èÍý¤òÄɲä·¤Þ¤¹¡£
¤½¤¦¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢¤½¤ÎÅÔÅÙ¥²¡¼¥àÆâ¤ÇÍøÍѤ¹¤ë·ÐÏ©¤Î¾ðÊó¤òÀÚ¤êÂؤ¨¤Æ¡¢½èÍý¤ò¼Â¹Ô½ÐÍè¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£

¡¡¤Þ¤ÀÀè¤Ë¤Ï¤Ê¤ê¤Þ¤¹¤¬¡¢·ÐÏ©°ÜÆ°¤Ë¤Ä¤¤¤Æ¤Ï¡¢¤³¤³¤¬ºÇ½ªÅª¤ÊÌÜɸ¤Ë¤Ê¤ê¤Þ¤¹¡£


¡ã³Ø½¬ÆâÍÆ¡ä
¡¡¡¦¥é¥à¥À¼°¤È¥Ç¥ê¥²¡¼¥È
¡¡¡¦¥á¥½¥Ã¥É¥Á¥§¡¼¥ó
¡¡¡¦DOTween¤ÎÊä´Öµ¡Ç½¤È¼ÂÁõÎã­¡¡¡¡¼DOPath ¥á¥½¥Ã¥É¡¢SetEase ¥á¥½¥Ã¥É¡¢OnWaypointChange ¥á¥½¥Ã¥É¡¼
¡¡¡¦DOTween¤ÎÊä´Öµ¡Ç½¤È¼ÂÁõÎã­¢¡¡¡¼Tween.Kill ¥á¥½¥Ã¥É¡¢Tween.Pause ¥á¥½¥Ã¥É¡¢Tween.Play ¥á¥½¥Ã¥É¡¼
¡¡¡¦½èÍý¤Î¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°
¡¡¡¦Linq ¤Îµ¡Ç½¤Î¼ÂÁõÎã­¡¡¡¡¼Select ¥á¥½¥Ã¥É¡¢ToArray ¥á¥½¥Ã¥É¡¢Sum ¥á¥½¥Ã¥É¡¼



£±¡¥RailMoveController ¤òºîÀ®¤¹¤ë


¡¡ºîÀ®¤·¤¿ RailPathData ¤ò³èÍѤ·¤Æ¡¢¥«¥á¥é¤ò·ÐÏ©¤Ë±è¤Ã¤Æ°ÜÆ°¤µ¤»¤Æ¤¤¤¯½èÍý¤ò»Ü¤¹¥¯¥é¥¹¤òºîÀ®¤·¤Þ¤¹¡£
ÍøÍѤ·¤Æ¤¤¤ë½èÍý¤Î¥á¥½¥Ã¥É¤Ë¤Ä¤¤¤Æ¤Ï¡¢½çÈ֤ˤޤȤá¤Æ¤¢¤ê¤Þ¤¹¡£

¡¡using ¤Ë¤Ï¡¢DOTween ¤Îµ¡Ç½¤òÍøÍѤ¹¤ë¤¿¤á¤Î DG.Tweening ¤ÎÀë¸À¤È¡¢Linq ¤Îµ¡Ç½¤òÍøÍѤ¹¤ë¤¿¤á¤Î System.Linq ¤ÎÀë¸À¤ò¡¢¤½¤ì¤¾¤ìÄɲ䷤Ƥ¤¤Þ¤¹¡£

¡¡DOTween ¤Ï¥«¥á¥é¤ò·ÐÏ©¤Ë±è¤Ã¤Æ°ÜÆ°¤µ¤»¤ëµ¡Ç½¤Ç¤¢¤ë DOPath ¥á¥½¥Ã¥É¤ò¼ÂÁõ¤¹¤ë¤¿¤á¤ËÍøÍѤ·¤Æ¤¤¤Þ¤¹¡£
¤Þ¤¿¡¢¤³¤Î DOPath ¥á¥½¥Ã¥É¤Ë¤Ï¡¢·ÐÏ©¾å¤Î³ÆÃÏÅÀ¤ËÅþÃ夷¤¿ºÝ¤ËÍøÍѤǤ­¤ëµ¡Ç½¤Ç¤¢¤ë OnWaypPointChange ¥á¥½¥Ã¥É¤òÄɲäǤ­¤Þ¤¹¤Î¤Ç¡¢º£²ó¤Ï¤½¤Á¤é¤â¹ç¤ï¤»¤ÆÍøÍѤ·¤Æ¤¤¤Þ¤¹¡£

¡¡¥×¥í¥°¥é¥à¤Î¥í¥¸¥Ã¥¯¤Ï¡¢ÍøÍѤǤ­¤ëµ¡Ç½¤ò³èÍѤ·¡¢¾å¼ê¤ËÁȤßΩ¤Æ¤Æ¤¤¤¯¤³¤È¤¬½ÅÍפǤ¹¡£


RailMoveController.cs

<= ¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤­¤Þ¤¹¡£



£²¡¥RailMoveController ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ®¤·¤Æ¡¢RailMoveController ¥¯¥é¥¹¤ò¥¢¥¿¥Ã¥Á¤¹¤ë


¡¡¥Ò¥¨¥é¥ë¥­¡¼¤Î¶õ¤¤¤Æ¤¤¤ë¾ì½ê¤Ç±¦¥¯¥ê¥Ã¥¯¤ò¤·¤Æ¥á¥Ë¥å¡¼¤ò³«¤­¡¢Create Empty ¤Ç¿·¤·¤¤¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ®¤·¤Þ¤¹¡£
̾Á°¤ò RailMoveController ¤ËÊѹ¹¤·¡¢ºîÀ®¤·¤¿ RailMoveController ¥¯¥é¥¹¤ò¥¢¥¿¥Ã¥Á¤·¤Æ¤¯¤À¤µ¤¤¡£

¡¡¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¾å¤«¤éÊÑ¿ô¤ò¥¢¥µ¥¤¥ó¤Ç¤­¤Þ¤¹¤Î¤Ç¡¢RailMoveTarget ¤Ë¤Ï Main Camera ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¡¢
CurrentRailPathData ¤Ë¤Ï RailPathData ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ò¥¢¥µ¥¤¥ó¤·¤Æ¤¯¤À¤µ¤¤¡£


¡ã¥¤¥ó¥¹¥Ú¥¯¥¿¡¼²èÁü¡ä


¡¡¤³¤ì¤Ç´°À®¤Ç¤¹¡£


£³¡¥¡ã¥é¥à¥À¼°¤È¥Ç¥ê¥²¡¼¥È¡ä


¡¡½èÍý¤ò¾Êά¤·¤Æµ­½Ò¤¹¤ëµ­Ë¡¤Î£±¤Ä¤Ë ¥é¥à¥À¼° ¤Ë¤è¤ëµ­Ë¡¤¬¤¢¤ê¤Þ¤¹¡£
¥é¥à¥ÀÀë¸À±é»»»Ò( => )¤òÍøÍѤ¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢Æ¿Ì¾¥á¥½¥Ã¥É(¨ÀʤλȤ¤¼Î¤Æ¤Î¥á¥½¥Ã¥É)¤òºîÀ®¤·¤Æ¡¢½èÍý¤òµ­½Ò¤¹¤ë ¤³¤È¤¬½ÐÍè¤Þ¤¹¡£¡¡

tweenMove = railMoveTarget.transform.DOPath(targetPaths, duration, pathType).SetEase(Ease.Linear).OnWaypointChange((waypointIndex) => CheckArrivalDestination(waypointIndex));

¡ã¾åµ­Ì¿ÎáÆâ¤Î¥é¥à¥À¼°¤Ë¤è¤ëµ­½ÒÉôʬ¡ä
  ¡Á.OnWaypointChange((waypointIndex) => CheckArrivalDestination(waypointIndex));

¥é¥à¥À¼°¤Î½èÍý¤Ë¤Ï¥Ç¥ê¥²¡¼¥È ¤È¤¤¤¦µ¡Ç½¤¬ÍøÍѤµ¤ì¤Æ¤¤¤Þ¤¹¡£
¥Ç¥ê¥²¡¼¥È¤È¤ÏÊ¿¤¿¤¯¤¤¤¦¤È¡¢¥á¥½¥Ã¥É¤òÂåÆþ¤Ç¤­¤ëÊÑ¿ô¤Î¤è¤¦¤Ê¤â¤Î ¤Ç¤¹¡£

¡¡¥é¥à¥À¼°¤Î½èÍý¤Ïɬ¤º¥Ç¥ê¥²¡¼¥È¤ËÂåÆþ¤·¤Æ¹Ô¤ï¤ì¤Þ¤¹¡£
¤³¤ì¤Ï¤Ä¤Þ¤ê¡¢¥á¥½¥Ã¥É¤Î°ú¿ô¤È¤·¤Æ¥Ç¥ê¥²¡¼¥È¤ò¼õ¤±¤È¤ì¤ë¤è¤¦¤Ë¤ª¤¯¤³¤È¤Ç¡¢
¥é¥à¥À¼°¤ò»È¤Ã¤Æ¤½¤Î¾ì¤Ç »È¤¤¼Î¤Æ¤Î¥á¥½¥Ã¥É¤òºî¤Ã¤ÆÅÐÏ¿¤¹¤ë(¤³¤ÎÉôʬ¤¬¥Ç¥ê¥²¡¼¥È)¤È¤¤¤¦¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

¡¡°ìÉô¤Î¥á¥½¥Ã¥É¤Î°ú¿ô¤Ë¤Ï¥é¥à¥À¼°¤Ç¤Ê¤¤¤È¼°¤¬µ­½Ò¤Ç¤­¤Ê¤¤¤â¤Î¤â¤¢¤ê¤Þ¤¹¡£
º£²óÍøÍѤ·¤Æ¤¤¤ë OnWaypointChange ¥á¥½¥Ã¥É¤ä¡¢Æ±¤¸ DOTween ¤Î OnComplete ¥á¥½¥Ã¥É¡¢¤¢¤È¤Ï Linq(¥ê¥ó¥¯) µ¡Ç½¤Ê¤É¤Ç¤¹¡£



¥é¥à¥À¼°¤òÍøÍѤ·¤Ê¤¤¾ì¹ç¤Î¡¢Ä̾ï¤Î½èÍý¤ò¤Þ¤º¤Ï³Îǧ¤·¤Æ¤ª¤­¤Þ¤¹¡£

  ¡Á.OnWaypointChange(SetHoge(waypointIndex));
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¢­
delegate int Hoge(int x);                           // ¥Ç¥ê¥²¡¼¥È¤ÎÀë¸À

private void SetHoge(int waypointIndex) {

    Hoge h = new Hoge(CheckArrivalDestination)      // ¥Ç¥ê¥²¡¼¥È¤Î½é´ü²½ Hoge ·¿¤Î h ÊÑ¿ô¤Ë CheckArrivalDestination ¥á¥½¥Ã¥É¤òÂåÆþ¤·¤Æ¤¤¤ë
      h(waypointIndex);                               // h ÊÑ¿ô¤ËÂåÆþ¤µ¤ì¤Æ¤¤¤ë CheckArrivalDestination ¥á¥½¥Ã¥É¤ò¼Â¹Ô¤·¡¢°ú¿ô¤È¤·¤Æ waypointIndex ÊÑ¿ô¤òÅϤ·¤Æ¤¤¤ë
}
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¢­
  private void CheckArrivalDestination(int waypointIndex) {

}

¾åµ­¤¬¥é¥à¥À¼°¤òÍѤ¤¤Ê¤¤¾ì¹ç¤Î½èÍý¤Ç¤¹¡££²¤ÄÌܤνèÍý¤¬¥Ç¥ê¥²¡¼¥È¤Î½èÍý¤Ë¤Ê¤Ã¤Æ¤ª¤ê¡¢¤½¤ÎÃæ¤ÇÌÜɸ¤È¤Ê¤ë¥á¥½¥Ã¥É¤ò¼Â¹Ô¤·¤Æ¤¤¤Þ¤¹¡£
¼¡¤Ï¡¢¥é¥à¥À¼°¤òÍѤ¤¤¿¾ì¹ç¤Î½èÍý¤Ç¤¹¡£

  ¡Á.OnWaypointChange((waypointIndex) => CheckArrivalDestination(waypointIndex));
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¢­
  private void CheckArrivalDestination(int waypointIndex) {

}

SetHoge ¥á¥½¥Ã¥É¤Îʬ¤¬¤½¤Î¤Þ¤Þ¾Êά¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢¤³¤Î¤è¤¦¤Ë¡¢£±¤Äʬ¤Î¥á¥½¥Ã¥É¤òºî¤ë¼ê´Ö¤¬¾Ê¤±¤ë¤³¤È¤¬¤ï¤«¤ê¤Þ¤¹¡£

¡¡¥é¥à¥À¼°¤Îµ­Ë¡¤ÎÆɤßÊý¤È¤·¤Æ¤Ï¡¢¥é¥à¥ÀÀë¸À±é»»»Ò¤Î º¸Â¦¤Ë°ú¿ô¤ÎÊÑ¿ô¤òµ­½Ò ¤·¡¢±¦Â¦¤Ë½èÍý(¥á¥½¥Ã¥É¤ÎÆâÍÆ)¤òµ­½Ò ¤·¤Þ¤¹¡£
¤Þ¤¿¡¢¥é¥à¥À¼°¤Ë¤Ï ·¿¿äÏÀ ¤Îµ¡Ç½¤¬¤¢¤ë¤¿¤á¡¢°ú¿ô¤ÈÌá¤êÃÍ¤Ë¤Ï ·¿¤ò¾Êά¤·¤Æµ­½Ò¤Ç¤­¤Þ¤¹ (¤³¤³¤Ç¤Ï int ·¿)¡£

  (waypointIndex) => CheckArrivalDestination(waypointIndex);    //  (int waypointIndex) => ¤Èµ­½Ò¤·¤Ê¤¯¤Æ¤è¤¤

ºÇ½é¤Î¤¦¤Á¤Ï¡¢¾Êά¤µ¤ì¤Æ¤¤¤ëƿ̾¥á¥½¥Ã¥ÉÉôʬ¤ò¼ÂºÝ¤Ë¥¤¥á¡¼¥¸¤·¤Æ½ñ¤¤¤Æ¤ß¤ë ¤ÈÍý²ò¤¬¿¼¤Þ¤ê¤Þ¤¹¡£


»²¹Í¥µ¥¤¥È
MicroSoft
¥é¥à¥À¼° - C# ¥ê¥Õ¥¡¥ì¥ó¥¹
https://docs.microsoft.com/ja-jp/dotnet/csharp/lan...
Qiita @toRisouP ÍÍ
¡ÚC#¡Û¤ï¤«¤Ã¤¿"¤Ä¤â¤ê"¤Ë¤Ê¤ì¤ë¡Ö¥é¥à¥À¼°¡×²òÀâ
https://qiita.com/toRisouP/items/98cc4966d392b7f21...


£´¡¥¡ã¥á¥½¥Ã¥É¡¦¥Á¥§¡¼¥ó¡ä


¡¡DOTween ¤Îµ¡Ç½¤Ë¤Ä¤¤¤ÆÀâÌÀ¤¹¤ëÁ°¤Ë¡¢¥á¥½¥Ã¥É¡¦¥Á¥§¡¼¥ó¤Ë¤Ä¤¤¤ÆÀâÌÀ¤·¤Þ¤¹¡£

¡¡// ³ÆÃÏÅÀ¤Ë¸þ¤±¤Æ°ÜÆ°
  transform.DOPath(paths, 1000 / moveSpeed).SetEase(Ease.Linear);

¾åµ­¤Î½èÍý¤Ï¡¢Ê£¿ô¤Î¥á¥½¥Ã¥É¤ò¤Ä¤Ê¤²¤Æ£±¹Ô¤Çµ­½Ò¤·¤Æ¤¤¤ë½èÍý ¤Ë¤Ê¤ê¤Þ¤¹¡£
¥Ô¥ê¥ª¥É¤Î°ÌÃ֤ޤǤ¬£±¤Ä¤Î½èÍý¤Ë¤Ê¤Ã¤Æ¤ª¤ê¡¢¹ç·×¤Ç£²¤Ä¤Î DOTween ¤Î¥á¥½¥Ã¥É¤¬¼Â¹Ô¤µ¤ì¤Æ¤¤¤Þ¤¹¡£

¡¡¤³¤Î¤è¤¦¤Ë¥Ô¥ê¥ª¥É¤òÍøÍѤ·¤Æ¡¢Á°¤Î¥á¥½¥Ã¥É¤Î½èÍý¤Ë³¤±¤Æ¼¡¤Î¥á¥½¥Ã¥É¤Î½èÍý¤ò½ñ¤¯¤È¡¢Á°¤Î¥á¥½¥Ã¥É¤Î½èÍý¤ò¼õ¤±¤Æ¼¡¤Î¥á¥½¥Ã¥É¤Î½èÍý¤¬¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
¤³¤Îµ­½ÒÊýË¡¤ò¥á¥½¥Ã¥É¡¦¥Á¥§¡¼¥ó¤È¤¤¤¤¤Þ¤¹¡£¤³¤ì¤Ï C# ¤¬»ý¤Äµ¡Ç½¤Ç¤¹¡£DOTween ¤À¤±¤Î¤â¤Î¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£

¡¡¾åµ­¤ÎÎã¤Î¾ì¹ç¡¢transform ¤ËÂФ·¤Æ DOPath ¥á¥½¥Ã¥É¤¬ºÇ½é¤Ë¼Â¹Ô¤µ¤ì¤Æ¡¢¤½¤Î½èÍý·ë²Ì¤ò¼õ¤±¤Æ SetEase ¥á¥½¥Ã¥É¼Â¹Ô¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£

¡¡¥×¥í¥°¥é¥à¤Ï¾å¤«¤é²¼¤Ë¼Â¹Ô¤µ¤ì¤Æ¤¤¤­¤Þ¤¹¤¬¡¢£±¹Ô¤Ë½ñ¤«¤ì¤¿½èÍý¤Î¾ì¹ç¤Ï¡¢¼êÁ°(º¸Â¦)¤è¤ê¡¢¥Ô¥ê¥ª¥Éñ°Ì¤Ç¶èÀڤäƼ¹Ԥµ¤ì¤ë ¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£
¤³¤ì¤Ï¾¤Î½èÍý¤ÈƱÍͤǤ¹¡£¤·¤Ã¤«¤ê¤È½èÍý¤Î½çÈÖ¤òÄɤ¨¤ë¤è¤¦¤Ë¡¢Æɤ߲ò¤¤¤Æ¤ß¤Þ¤·¤ç¤¦¡£


£µ¡¥¡ãDOTween¤ÎÊä´Öµ¡Ç½¤È¼ÂÁõÎã­¡¡¡¡¼DOPath ¥á¥½¥Ã¥É¡¢SetEase ¥á¥½¥Ã¥É¡¢OnWaypointChange ¥á¥½¥Ã¥É¡¼¡ä


¡¡¿·¤·¤¯¼ÂÁõ¤ò¹Ô¤Ã¤¿ DOTween ¤Îµ¡Ç½¤Ë¤Ä¤¤¤Æ¡¢³Æ¥á¥½¥Ã¥É¤ò½çÈÖ¤ËÀâÌÀ¤·¤Þ¤¹¡£
DOTween ¤Ë¤Ä¤¤¤Æ¤Ï¸ø¼°¤Î¥É¥­¥å¥á¥ó¥È(±Ñ¸ì)¤¬¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢¤³¤Á¤é¤â»²¹Í¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£
DOTween
Documentation
http://dotween.demigiant.com/documentation.php


£±¡¥DOPath (Vector3[] path, float duration)

¡¡º£²ó¼ÂÁõ¤·¤Æ¤¤¤ë½èÍý¤Ï¼¡¤Î¤â¤Î¤Ç¤¹¡£¤³¤³¤Ç¤Ï£³¤Ä¤Î DOTween ¤Î¥á¥½¥Ã¥É¤ò³èÍѤ·¤Æ¥í¥¸¥Ã¥¯¤òÁȤßΩ¤Æ¤Æ¤¤¤Þ¤¹¡£

¡¡tweenMove = railMoveTarget.transform.DOPath(targetPaths, duration, pathType).SetEase(Ease.Linear).OnWaypointChange((waypointIndex) => CheckArrivalDestination(waypointIndex));

¡¡DOPath ¥á¥½¥Ã¥É¤Ï¡¢Â¾¤Î°ÜÆ°·Ï¤Î DOTween ¤Î¥á¥½¥Ã¥É¤ÈƱ¤¸¤Ç¡¢À©¸æ¤·¤¿¤¤¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î Transform ¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ËÂФ·¤ÆÌ¿Îá¤ò½Ð¤¹¥á¥½¥Ã¥É¤Ç¤¹¡£
Transform ¥³¥ó¥Ý¡¼¥Í¥ó¥È¡¢¤¢¤ë¤¤¤Ï RectTransform ¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Î Transform ¤Î Position ÃͤËÂФ·¤ÆÊä´Ö½èÍý¤ò¹Ô¤Ã¤Æ¡¢¥¢¥Ë¥á¤·¤Æ¤¤¤ë¤è¤¦¤Ë±é½Ð¤·¤Æ¤¯¤ì¤ëµ¡Ç½¤Ç¤¹¡£
LocalPosition ¤ËÂФ·¤ÆÍøÍѤǤ­¤ë DOLocalPath ¥á¥½¥Ã¥É¤â¤¢¤ê¤Þ¤¹¡£

¡¡¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î°ÌÃÖ¤ò¸½ºßÃͤ«¤éÂè1°ú¿ô¤Ç»ØÄꤷ¤¿ÃͤòÌÜŪÃϤȤ·¤ÆÂè2°ú¿ô¤Ë»ØÄꤷ¤¿»þ´Ö¤ò¤«¤±¤Æ°ÜÆ°¤ò¹Ô¤¤¤Þ¤¹¡£
Âè1°ú¿ô¤Ï targetPaths ÊÑ¿ô¤ò»ØÄꤷ¤Æ¤¤¤Þ¤¹¡£¤³¤ÎÉôʬ¤Ï Vector3 ·¿¤ÎÇÛÎó¤ò»ØÄꤷ¤Þ¤¹¡£º£²ó¤Ç¤¢¤ì¤Ð¡¢£²¤Ä¤ÎºÂɸ¾ðÊ󤬴ޤޤì¤Æ¤¤¤Þ¤¹¡£
¤³¤ì¤¬°ÜÆ°¤ò¹Ô¤¤ºÝ¤Ë·Ðͳ¤¹¤ëºÂɸ¤Ë¤Ê¤ê¤Þ¤¹¡£¤Ä¤Þ¤ê¡¢¤³¤ÎÇÛÎó¤ÎÃæ¤ÎºÇ½é¤ÎºÂɸ(³«»ÏÃÏÅÀ)¤«¤é¼¡¤ÎºÂɸ(ÌÜɸÃÏÅÀ)¤ËÂФ·¤Æ°ÜÆ°¤ò¹Ô¤¦½èÍý¤Ë¤Ê¤ê¤Þ¤¹¡£
¤³¤Îµ¡Ç½¤ò»È¤¦¤³¤È¤Ë¤è¤ê¡¢·ÐÏ©ÍѤΥ²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î Transform ¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Î Position ¤ò½çÈÖ¤ËÌÜŪÃϤȤ·¤Æ°ÜÆ°¤·¤Æ¤¤¤¯¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

¡¡Âè2°ú¿ô¤Ï float ·¿¤ÎÃͤò»ØÄꤷ¤Þ¤¹¡£º£²ó¤Ï duration ÊÑ¿ô¤ò»ØÄꤷ¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢¤³¤ÎÃͤλþ´Ö¤ò¤«¤±¤ÆÌÜɸÃÏÅÀ¤ËÃ夯¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

¡¡DOPath ¥á¥½¥Ã¥É¤Ë¤Ï¾¤Ë¤âÊØÍø¤Ê»È¤¤Êý¤¬¤¢¤ê¤Þ¤¹¡£Î㤨¤Ð¡¢¥Ù¥¸¥§¶ÊÀþ¤òºîÀ®¤·¤Æ°ÜÆ°¤ò¹Ô¤¤¤¿¤¤¾ì¹ç¤ä¡¢
Ʊ¤¸ÈϰϤò¼þ²ó°ÜÆ°¤µ¤»¤¿¤¤¾ì¹ç¤Ë¤âÂбþ¤Ç¤­¤Þ¤¹¤Î¤Ç³Ø½¬¤·¤Æ¤ª¤¯¤È¤¤¤¤¤Ç¤·¤ç¤¦¡£


»²¹Í¥µ¥¤¥È
Qiita @BEATnonanka ÍÍ
DOTween´°Á´¤ËÍý²ò¤¹¤ë¤½¤Î4 DOPathÊÔ
https://qiita.com/BEATnonanka/items/50cacac803f88f...


£²¡¥SetEase (EaseType easeType)

¡¡SetEase ¥á¥½¥Ã¥É¤Ï¾¤Î DOTween ¤Î¥á¥½¥Ã¥É¤ËÉտ魯¤ë½èÍý¤Ç¤¹¡£¤³¤Î¤è¤¦¤Ë DOTween ¤Ç¤Ï DOTween ¤Î¥á¥½¥Ã¥ÉƱ»Î¤ò£±¤Ä¤Î½èÍý¤Î²ô¤È¤·¤Æ³¤±¤Æ½èÍý¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
½èÍý¤ò³¤±¤ë¾ì¹ç¤Ë¤Ï¡¢Á°¤Î¥á¥½¥Ã¥É¤Î¸å¤Ë¥Ô¥ê¥ª¥É(¥É¥Ã¥È)¤ò½ñ¤¯¤³¤È¤Ç¡¢¼¡¤Î¥á¥½¥Ã¥É¤ò½ñ¤¯¤³¤È¤¬²Äǽ¤Ç¤¹¡£(ºÇ½é¤ËÀâÌÀ¤·¤¿¡¢¥á¥½¥Ã¥É¡¦¥Á¥§¡¼¥ó¤Îµ­½ÒÊýË¡¤Ç¤¹)

¡¡SetEase ¥á¥½¥Ã¥É¤Ç¤Ï Ease ¤È¤¤¤¦¥¢¥Ë¥á¡¼¥·¥ç¥ó¤µ¤»¤ëºÝ¤Î¥Ñ¥¿¡¼¥ó¤òÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£Ease ¤Ï enum ¤ÇÀßÄꤵ¤ì¤Æ¤ª¤ê¡¢Ease.¥¿¥¤¥× ¤Î½ñ¼°¤Çµ­½Ò¤·¤Þ¤¹¡£
Èó¾ï¤Ë¿¤¯¤Î¼ïÎब¤¢¤ê¤Þ¤¹¡£º£²ó¤Ï Ease.Linear ¤ò»ÈÍѤ·¤Æ¤¤¤Þ¤¹¡£

¡¡º£²ó¤Ï¡¢DOPath ¥á¥½¥Ã¥É¤¬¼Â¹Ô¤µ¤ì¤Æ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î Position ¤¬Êѹ¹¤µ¤ì¤Æ¤¤¤ë½èÍý¤ò¼Â¹Ô¤·¤Æ¤¤¤ëÉôʬ¤Ë¡¢¤³¤Î SetEase ¥á¥½¥Ã¥É¤¬¼Â¹Ô¤µ¤ì¤Þ¤¹¤Î¤Ç
°ÌÃÖ¾ðÊó¤òÊѹ¹¤¹¤ëºÝ¤ÎÊä´Ö½èÍý¤ËÂФ·¤Æ¡¢¤É¤Î¤è¤¦¤Ê¥¿¥¤¥×¤Î¥¢¥Ë¥á¡¼¥·¥ç¥ó¤Î¥Ñ¥¿¡¼¥ó¤òÀßÄꤷ¤Æ°ÜÆ°¤ò¹Ô¤ï¤»¤ë¤«¤ò»ØÄꤷ¤Æ¤¤¤Þ¤¹¡£

¡¡Position ¤òÊѹ¹¤¹¤ëºÝ¤Ë Linear ¤ò»ØÄꤹ¤ë¤È¡¢ºÇ½é¤Î°ÌÃÖ¤«¤éÌÜɸ¤È¤Ê¤ë°ÌÃ֤ޤǤΰÜư®ÅÙ¤òÅù®¤Ë»ØÄꤹ¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢½é®¤ÇÁ᤯¤Ê¤Ã¤¿¤ê¡¢½ªÎ»´ÖºÝ¤ËÃÙ¤¯¤Ê¤Ã¤¿¤ê¡¢¤È¤¤¤Ã¤¿¤è¤¦¤ÊÊä´Ö½èÍý¤Ç¤Ï¤Ê¤¯¤Ê¤ê¡¢ºÇ½é¤«¤é¥´¡¼¥ëÃÏÅÀ¤ËÅþÃ夹¤ë¤Þ¤ÇÅù®¤ÇºÂɸ¤ÎÊѹ¹¡¢¤Ä¤Þ¤ê°ÜÆ°¤ò¹Ô¤¤¤Þ¤¹¡£
Ease ¤òÊѹ¹¤·¤Æ¤ß¤ë¤È½èÍý¤ÎÆâÍƤò¤Ä¤«¤ß¤ä¤¹¤¯¤Ê¤ê¤Þ¤¹¤Î¤Ç¡¢²¼µ­¤Î¥µ¥¤¥È¤ò»²¹Í¤·¤ÆÀßÄê¤òÊѹ¹¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£

»²¹Í¥µ¥¤¥È
¥²¡¼¥àUI¥Í¥Ã¥È ÍÍ
DOTween¤Î¥¤¡¼¥¸¥ó¥°°ìÍ÷¤òÀ¤³¦°ì¾Ü¤·¤¯&ʬ¤«¤ê¤ä¤¹¤¯ÀâÌÀ¤¹¤ë
https://game-ui.net/?p=835


£³¡¥OnWaypointChange (int index)

¡¡DOPath ¥á¥½¥Ã¥É¡¢¤¢¤ë¤¤¤Ï DOLocalPath ¥á¥½¥Ã¥É¤ò¼Â¹Ô¤·¤Æ¤¤¤ë½èÍý¤Ë¤Î¤ßÄɲäǤ­¤ë¥á¥½¥Ã¥É¤Ç¤¹¡£¤³¤ìñÂΤǤÏÆ°ºî¤·¤Þ¤»¤ó¡£

¡¡¡Á.OnWaypointChange((waypointIndex) => CheckArrivalDestination(waypointIndex));

¡¡¤³¤Î½èÍý¤òµ­½Ò¤·¤Æ¤ª¤¯¤³¤È¤Ë¤è¤ê¡¢DOPath ¥á¥½¥Ã¥É¤ÎÂ裱°ú¿ô¤Ç»ØÄꤷ¤Æ¤¤¤ëÇÛÎó¤ÎºÂɸ¤Ë°ÜÆ°¤¹¤ë¤¿¤Ó¤Ë¡¢£±²ó¤À¤±½èÍý¤ò¼Â¹Ô¤·¤Þ¤¹¡£
OnWaypointChange ¥á¥½¥Ã¥É¤Î¼Â¹Ô¤Ë¤¢¤¿¤ê¡¢¸½ºß¤ÎÇÛÎó¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹ÈÖ¹æ¤ò int ·¿¤È¤·¤Æ¼«Æ°Åª¤Ë¼èÆÀ¤·¤Æ¤¯¤ì¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢OnWaypointChange ¥á¥½¥Ã¥É¤ÎÃæ¤Ë¤¢¤ë½èÍý¤ò¼Â¹Ô¤¹¤ëºÝ¤Ë¤Ï¡¢¤³¤ÎÈÖ¹æ¤òÍøÍѤ·¤Æ½èÍý¤òµ­½Ò¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
¤Ê¤ª¡¢¤³¤Î¾ðÊó¤Ï°ú¿ô¤Ëµ­½Ò¤·¤Ê¤¯¤Æ¤â¼«Æ°Åª¤ËÆþ¤ê¤Þ¤¹¤¬¡¢¤è¤ê¤ï¤«¤ê¤ä¤¹¤¯µ­½Ò¤¹¤ë¾ì¹ç¤Ë¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤âµ­½Ò¤Ç¤­¤Þ¤¹¡£(waypointIndex Éôʬ¤ÏÊÑ¿ô¤Ç¤¹¤Î¤Ç¡¢¼«Í³¤ËÀë¸À¤Ç¤­¤Þ¤¹)

¡¡tweenMove = railMoveTarget.transform.DOPath(targetPaths, duration, pathType).SetEase(Ease.Linear).OnWaypointChange((waypointIndex) => CheckArrivalDestination(waypointIndex));

¡¡tweenMove = railMoveTarget.transform.DOPath(targetPaths, duration, pathType).SetEase(Ease.Linear).OnWaypointChange(CheckArrivalDestination);

¡¡¤É¤Á¤é¤âƱ¤¸½èÍý¤Ë¤Ê¤ê¤Þ¤¹¡£¼«Ê¬¤Î¤ï¤«¤ê¤ä¤¹¤¤Êý¤Î½ñ¼°¤òÍøÍѤ·¤Æ¤¯¤À¤µ¤¤¡£


»²¹Í¥µ¥¤¥È
Qiita @AzuQiita ÍÍ
DOTween¤Î¥³¡¼¥ë¥Ð¥Ã¥¯¤ò¤¤¤¯¤Ä¤«¾Ò²ð
https://qiita.com/AzuQiita/items/822e382473e6c0db8...


¡¡°Ê¾å¤¬º£²ó¼ÂÁõ¤·¤Æ¤¤¤ë¡¢DOTween¤Î½èÍý¤Ë¤Ê¤ê¤Þ¤¹¡£¤·¤Ã¤«¤ê¤ÈÆɤ߲ò¤¤¤Æ¤¤¤Ã¤Æ»È¤¤Êý¤ò³Ð¤¨¤Æ¤¤¤­¤Þ¤·¤ç¤¦


£¶¡¥¡ãDOTween¤ÎÊä´Öµ¡Ç½¤È¼ÂÁõÎã­¢¡¡¡¼Tween.Kill ¥á¥½¥Ã¥É¡¢Tween.Pause ¥á¥½¥Ã¥É¡¢Tween.Play ¥á¥½¥Ã¥É¡ä


¡¡Tween ·¿¤Ï¡¢DOTween ¤Î¸µ¤È¤Ê¤ë½èÍý¤ò´ÉÍýÀ©¸æ¤·¤Æ¤¤¤ë¥¯¥é¥¹¤Ç¤¹¡£
¤³¤Î Tween ·¿¤ÇÀë¸À¤·¤¿ÊÑ¿ô¤Ë¤Ï DOTween¤Î½èÍýÆâÍƤòÂåÆþ¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£

¡¡DOTween¤Î½èÍý¤ÏÊÑ¿ô¤ËÂåÆþ¤»¤º¤È¤â¼Â¹Ô¤Ç¤­¤Þ¤¹¡£ËÜÍè¤Ï¤½¤ì¤À¤±¤ÇÌäÂê¤Ï¤Ê¤¤¤Î¤Ç¤¹¤¬¡¢
Tween ·¿¤ÎÊÑ¿ô¤Ë DOTween ¤Î½èÍý¤òÂåÆþ¤·¤Æ¤¤¤ë¤³¤È¤Ç¡¢DOTween¤Î½èÍý¤ò°ì»þÄä»ß¤µ¤»¤¿¤ê¡¢ºÆ³«¤·¤¿¤ê¡¢¶¯À©Åª¤Ë½ªÎ»¤µ¤»¤ë¤³¤È¤¬½ÐÍè¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

¡¡¤É¤Î¤è¤¦¤Ê¾ìÌ̤ǻÈÍѤ¹¤ë¤«¤È¤¤¤¦¤È¡¢Ìµ¸Â¥ë¡¼¥×¤Î½èÍý¤ò½ªÎ»¤µ¤»¤¿¤ê¡¢½èÍý¤ò°ì»þÄä»ß¤·¤¿¤ê¡¢½èÍý¤ÎÅÓÃ椫¤éºÆ³«¤·¤¿¤ê¤Ç¤­¤Þ¤¹¡£


£±¡¥Tween.Kill()

¡¡ÊÑ¿ô¤ËDOTween¤Î½èÍý¤òÂåÆþ¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢Æ°¤¤¤Æ¤¤¤ë DOTween ¤Î½èÍý¤ò¶¯À©Åª¤Ë½ªÎ»¤µ¤»¤ë½èÍý¤¬¼Â¹Ô¤Ç¤­¤Þ¤»¤ó¡£

¡¡DOTween¤Î½èÍý¤òÃæÃǤ¹¤ë¤Ë¤Ï¡¢Kill¥á¥½¥Ã¥É¤ò¼Â¹Ô¤·¤Þ¤¹¡£¤³¤Î½èÍý¤ò¼Â¹Ô¤¹¤ë¤³¤È¤Ç¡¢º£²ó¤Ç¤¢¤ì¤Ð DOPath ¥á¥½¥Ã¥É¤Ë¤è¤ë·ÐÏ©°ÜÆ°½èÍý¤ò½ªÎ»¤µ¤»¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
DOTween ¤Î½èÍý¤ÏÈóƱ´ü½èÍý¤Ç¤¹¡£Î㤨¤Ð¡¢¥²¡¼¥à¥ª¡¼¥Ð¡¼¤Ë¤Ê¤Ã¤Æ¥²¡¼¥à¤òºÆ³«¤¹¤ë¤è¤¦¤Ê½èÍý¤¬¤¢¤ë¾ì¹ç¡¢¥·¡¼¥ó¤¬ÀÚ¤êÂؤï¤Ã¤¿¤È¤·¤Æ¤â
°ìÅÙ¡¢Æ°¤¤¤Æ¤¤¤ë DOPath ¥á¥½¥Ã¥É¤ò½ªÎ»¤µ¤»¤Æ¤ª¤«¤Ê¤¤¤È¥á¥â¥ê¥ê¡¼¥¯¤¬È¯À¸¤·¤Þ¤¹¡£(¥ë¡¼¥×½èÍý¤¬¤¢¤ë¾ì¹ç¤Ë¤Ï¡¢¥¨¥é¡¼¤âȯÀ¸¤·¤Þ¤¹¡£)
ÆäËÇ˲õ¤µ¤ì¤ë²ÄǽÀ­¤Î¤¢¤ë¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ë DOTween ¤òÍøÍѤ·¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢É¬¤ºÇ˲õ¤Î¥¿¥¤¥ß¥ó¥°¤Ç Kill ¥á¥½¥Ã¥É¤òÍøÍѤ¹¤ë¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£

  // Àë¸À¥Õ¥£¡¼¥ë¥É 
¡¡private Tween tweenMove;  // Tween ·¿¤ÎÊÑ¿ô

  // Tween ·¿¤ÎÊÑ¿ô¤Ë¤Ï DOTween ¤Î½èÍý¤òÂåÆþ¤Ç¤­¤ë
¡¡¡¡¡¡¡¡¡¡¢­
  // ³ÆÃÏÅÀ¤Ë¸þ¤±¤Æ°ÜÆ°¡£º£¸å¤³¤Î½èÍý¤òÀ©¸æ¤¹¤ë¤¿¤á¡¢Tween ·¿¤ÎÊÑ¿ô¤Ë DOPath ¥á¥½¥Ã¥É¤Î½èÍý¤òÂåÆþ¤·¤Æ¤ª¤¯
  tweenMove = railMoveTarget.transform.DOPath(targetPaths, duration, pathType).SetEase(Ease.Linear).OnWaypointChange((waypointIndex) => CheckArrivalDestination(waypointIndex));

¡¡// DOTween ¤Î½èÍý¤òÇË´þ(½ªÎ»)¤¹¤ë
  tweenMove.Kill();


£²¡¥Tween.Pause()

¡¡DOTween ¤Î Tween ½èÍý¤òÊÑ¿ô¤ËÂåÆþ¤·¤Æ¤ª¤¯¤³¤È¤Ë¤è¤ê¡¢Kill ¥á¥½¥Ã¥É¤Î¾¤Ë¤âÀ©¸æ¤ò¹Ô¤¦¤³¤È¤¬½ÐÍè¤Þ¤¹¡£

¡¡Pause ¥á¥½¥Ã¥É¤Ï Tween ¤Î½èÍý¤ò°ì»þÄä»ß¤¹¤ëÌ¿Îá¤Ç¤¹¡£¤³¤Î½èÍý¤ò¹Ô¤¦¤³¤È¤Ë¤è¤ê¡¢Tween ·¿¤ÎÊÑ¿ôÆâ¤ËÂåÆþ¤µ¤ì¤Æ¤¤¤ë¼Â¹ÔÃæ¤Î DOTween ¤Î½èÍý¤ò°ì»þÄä»ß½ÐÍè¤Þ¤¹¡£


¡ãRailMoveController.cs¡ä
¡¡  // ½èÍý¤ò°ì»þÄä»ß
    PauseMove();


    /// <summary>
    /// ¥ì¡¼¥ë°ÜÆ°¤Î°ì»þÄä»ß
    /// </summary>
    public void PauseMove() {
        // °ì»þÄä»ß
        tweenMove.Pause();
    }

¡¡¤Ê¤ª¡¢Æ±¤¸½èÍý¤Ë DOPause ¥á¥½¥Ã¥É¤¬¤¢¤ê¤Þ¤¹¡£¤³¤Á¤é¤Ï¡¢°ì»þÄä»ß¤µ¤»¤¿¤¤½èÍý¤ò¹Ô¤Ã¤Æ¤¤¤ë Transfrom ·¿¤ËÂФ·¤ÆÌ¿Îá½ÐÍè¤Þ¤¹¡£

¡¡¡¡railMoveTarget.DOPause();


£³¡¥Tween.Play()

¡¡°ì»þÄä»ß¤·¤Æ¤¤¤ë DOTween ¤Î½èÍý¤Ï£²¤Ä¤ÎÊýË¡¤ÇºÆ³«²Äǽ¤Ç¤¹¡£¤Ä¤Þ¤ê¡¢¾å¼ê¤¯»È¤¤Ê¬¤±¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
£±¤Ä¤Ïº£²óÍøÍѤ·¤Æ¤¤¤ë Play ¥á¥½¥Ã¥É¤Ç¤¹¡£¤³¤ÎÌ¿Îá¤Ç¤Ï¡¢°ì»þÄä»ß¤·¤ÆÃæÃǤ·¤Æ¤¤¤ë DOTween ¤Î½èÍý¤Î³¤­¤«¤é½èÍý¤òºÆ³«¤Ç¤­¤Þ¤¹¡£
¤â¤¦£±¤Ä¤Ï Restart ¥á¥½¥Ã¥É¤Ç¤¹¡£¤³¤ÎÌ¿Îá¤Ç¤Ï³¤­¤«¤é¤Ç¤Ï¤Ê¤¯¡¢ºÇ½é¤«¤é½èÍý¤ÎºÆÀ¸¤ò¤ä¤êľ¤·¤Þ¤¹¡£

¡¡¥í¥¸¥Ã¥¯¤È¤·¤Æ¤Ï¡¢¥²¡¼¥à³«»ÏÁ°¤ä¡¢¥ß¥Ã¥·¥ç¥ó¤¬È¯À¸¤·¤Æ¤¤¤ë´Ö¤Ï Pause ¥á¥½¥Ã¥É¤Ç DOPath ¥á¥½¥Ã¥É¤Ë¤è¤ë°ÜÆ°¤Î½èÍý¤ò°ì»þÄä»ß¤·¤Æ¤ª¤¤¤Æ¡¢
¥²¡¼¥à¤¬³«»Ï¤µ¤ì¤¿¤ê¡¢¥ß¥Ã¥·¥ç¥ó¤¬½ªÎ»¤·¤Æ°ÜÆ°¤¬ºÆ³«¤Ç¤­¤ë¾õÂ֤ˤʤä¿¥¿¥¤¥ß¥ó¥°¤Ç¤³¤Î Play ¥á¥½¥Ã¥É¤òÍøÍѤ·¤Æ°ÜÆ°¤òºÆ³«¤·¤Æ¤¤¤Þ¤¹¡£

¡ãRailMoveController.cs¡ä
    // °ÜÆ°ºÆ³«
    ResumeMove();


    /// <summary>
    /// ¥ì¡¼¥ë°ÜÆ°¤ÎºÆ³«
    /// </summary>
    public void ResumeMove() {
        // °ÜÆ°ºÆ³«
        tweenMove.Play();
    }

¡¡¤Ê¤ª¡¢Play ¥á¥½¥Ã¥É¤ÈƱ¤¸½èÍý¤Ë DOPlay ¥á¥½¥Ã¥É¤¬¤¢¤ê¤Þ¤¹¡£¤³¤Á¤é¤Ï¡¢ºÆ³«¤µ¤»¤¿¤¤½èÍý¤ò¹Ô¤Ã¤Æ¤¤¤ë Transfrom ·¿¤ËÂФ·¤ÆÌ¿Îá½ÐÍè¤Þ¤¹¡£

¡¡¡¡railMoveTarget.DOPlay();


£·¡¥¥²¡¼¥à¤ò¼Â¹Ô¤·¤ÆÆ°ºî¤ò³Îǧ¤¹¤ë


¡¡ÁÛÄꤷ¤Æ¤¤¤ëµóÆ°¤Ë¤Ê¤ë¤«¤É¤¦¤«¡¢¥²¡¼¥à¤ò¼Â¹Ô¤·¤Æ³Îǧ¤·¤Æ¤¤¤­¤Þ¤¹¡£

¡ã¼ÂÁõÆ°²è¡ä¡¡
Æ°²è¥Õ¥¡¥¤¥ë¤Ø¤Î¥ê¥ó¥¯


¡¡Â³¤¤¤Æ¤Ï¡¢½èÍý¤Î¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¤ò¹Ô¤¤¤Þ¤¹¡£


¡ã±þÍѡ䣸¡¥¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¤ò¹Ô¤¤¡¢Linq ¤ò»È¤Ã¤¿½èÍý¤Ë½ñ¤­´¹¤¨¤ë


¡¡¥Ð¥°¤Î½¤Àµ¤È¤Ï°Û¤Ê¤ê¡¢¥×¥í¥°¥é¥à¤È¤·¤Æ¤ÎÆ°ºî¤òÊѤ¨¤Ê¤¤¤Þ¤Þ¤Ë½èÍý¤ò²þÁ±¤¹¤ë¤³¤È¤ò¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¤È¤¤¤¤¤Þ¤¹¡£

¡¡º£²ó¤Ï RailMoveController.cs¤Î StartRailMove ¥á¥½¥Ã¥ÉÆâ¤Î½èÍý¤ò Linq ¤ò³èÍѤ·¤Æ½ñ¤­´¹¤¨¤Æ¤ß¤Þ¤¹¡£

¡¡¸½ºß¤Î½èÍý¤ò¤·¤Ã¤«¤ê¤ÈÆɤ߲ò¤­¡¢Íý²ò¤Ç¤­¤Æ¤¤¤ë¾ì¹ç¤Î¤ß¤³¤Î¼ê½ç¤ò¹Ô¤¦¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£
Æñ¤·¤¤¤È´¶¤¸¤ë¾ì¹ç¤Ë¤Ï¡¢¤³¤ì¤é¤Î¼ê½ç¤Ï¥¹¥­¥Ã¥×¤·¤Æ¤¯¤À¤µ¤¤¡£


¡ã¸½ºß¤Î½èÍý¡ä
    /// <summary>
    /// ¥ì¡¼¥ë°ÜÆ°¤Î³«»Ï
    /// </summary>
    /// <returns></returns>
    public IEnumerator StartRailMove() {

        yield return null;


////*  ¤³¤³¤«¤é  *////


        // °ÜÆ°¤¹¤ëÃÏÅÀ¤ò¼èÆÀ¤¹¤ë¤¿¤á¤ÎÇÛÎó¤Î½é´ü²½
        Vector3[] paths = new Vector3[currentRailPathData.GetPathTrans().Length];
        float totalTime = 0;

¡¡¡¡¡¡¡¡// °ÜÆ°¤¹¤ë°ÌÃÖ¾ðÊó¤È»þ´Ö¤ò½çÈÖ¤ËÇÛÎó¤Ë¼èÆÀ
        for (int i = 0; i < currentRailPathData.GetPathTrans().Length; i++) {
            paths[i] = currentRailPathData.GetPathTrans()[i].position;
	    totalTime += currentRailPathData.GetRailMoveDurations()[i];
        }


////*  ¤³¤³¤Þ¤Ç  *////


        Debug.Log(totalTime);

         [Ãæά]
    }

¡¡¡¡¡¡¢­

¡ãLinq ¤Î½èÍý(¥é¥à¥À¼°¤Îµ­½Ò¤ò»È¤¦)¡ä
    /// <summary>
    /// ¥ì¡¼¥ë°ÜÆ°¤Î³«»Ï
    /// </summary>
    /// <returns></returns>
    public IEnumerator StartRailMove() {

        yield return null;


////*  ¤³¤³¤«¤é  *////


        // °ÜÆ°Àè¤Î¥Ñ¥¹¤Î¾ðÊ󤫤é Position ¤Î¾ðÊó¤À¤±¤òÃê½Ð¤·¤ÆÇÛÎó¤òºîÀ®
        Vector3[] paths = currentRailPathData.GetPathTrans().Select(x => x.position).ToArray();

        // °ÜÆ°Àè¤Î¥Ñ¥¹¤Î°ÜÆ°»þ´Ö¤ò¹ç·×
        float totalTime = currentRailPathData.GetRailMoveDurations().Sum();


////*  ¤³¤³¤Þ¤Ç  *////


        Debug.Log(totalTime);

         [Ãæά]
    }


£¹¡¥¡ãLinq ¤Îµ¡Ç½¤Î¼ÂÁõÎã­¡¡¡¡¼Select ¥á¥½¥Ã¥É¡¢ToArray ¥á¥½¥Ã¥É¡¢Sum ¥á¥½¥Ã¥É¡¼¡ä


¡¡Linq¡Ê¥ê¥ó¥¯¡Ë¤È¤Ï¡¢¥³¥ì¥¯¥·¥ç¥ó(Dictionary ¤ä List ¤Ê¤É)¤ÎÍ×ÁǤòÁàºî¤·¤Æ¡¢¸¡º÷¤·¤¿¤ê½¸·×¤¹¤ë½èÍý¤ò´Ê·é¤Ëµ­½Ò¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¥é¥¤¥Ö¥é¥ê(Ê£¿ô¤Îµ¡Ç½¤ò¤Þ¤È¤á¤¿¤â¤Î)¤Ç¤¹¡£

¡¡Linq¤ò»ÈÍѤ¹¤ë¤¿¤á¤Ë¤Ïusing ¤ÎÀë¸À¤¬É¬Íפˤʤê¤Þ¤¹¡£º£²óºîÀ®¤·¤¿¥á¥½¥Ã¥ÉÆâ¤ËÅо줷¤Æ¤¤¤ë½èÍý¤Ç¤¹¤Î¤Ç¡¢Éü½¬¤·¤ÆÆɤ߲ò¤±¤ë¤è¤¦¤Ë¤·¤Æ¤¤¤­¤Þ¤·¤ç¤¦¡£

using System.Linq;



¡¡Linq¤òµ­½Ò¤¹¤ëºÝ¤Ë¤Ï¥é¥à¥À¼°¤Îµ­½Ò¤òÍѤ¤¤Þ¤¹¡£
SamuraiBlogÍÍ
¡ÚC#ÆþÌç¡ÛLINQ¤Î»È¤¤ÊýÁí¤Þ¤È¤á(Select¡¢Where¡¢GroupBy¤Ê¤É)
https://www.sejuku.net/blog/56519

¡¡Linq¤Ë¤Ï¿¤¯¤Îµ¡Ç½¤¬¤¢¤ê¤Þ¤¹¤¬º£²óÍøÍѤ·¤Æ¤¤¤ëµ¡Ç½¤Ë¤Ä¤¤¤Æ¤Þ¤È¤á¤Æ¤ª¤­¤Þ¤¹¡£
¤½¤Î¤Û¤«¤Îµ¡Ç½¤Ë¤Ä¤¤¤Æ¤Ïµ­»ö¤¬¤¿¤¯¤µ¤ó¤¢¤ê¤Þ¤¹¤¬¡¢¤³¤Á¤é¤Î¥µ¥¤¥È¤â»²¹Í¤Ë¤Ê¤ê¤Þ¤¹¡£
ÃÏÊ¿Àþ¤Ë¹Ô¤¯ÍÍ
LINQ¤Î³ÈÄ¥¥á¥½¥Ã¥É°ìÍ÷¤È¡¢¤Û¤ÜÁ´Éô¤Î¥µ¥ó¥×¥ë¤òºî¤Ã¤Æ¤ß¤Þ¤·¤¿¡£
https://yujisoftware.hatenablog.com/entry/20111031...


£±¡¥Select ¥á¥½¥Ã¥É

¡¡¼Í±Æ½èÍý¤È¸Æ¤Ð¤ì¤ëµ¡Ç½¤Ç¤¹¡£¼Í±Æ¤È¤Ï¥Ç¡¼¥¿¥Ù¡¼¥¹ÍѤÎÀìÌçÍѸì¤Ç¡¢¥Æ¡¼¥Ö¥ë(¼Â¥Ç¡¼¥¿)¤«¤éÆÃÄê¤ÎÎó¤Î¥Ç¡¼¥¿¤Î¤ß¤ò¼è¤ê½Ð¤¹¤³¤È¤ò¸À¤¤¤Þ¤¹¡£

¡¡Select ¥á¥½¥Ã¥É¤Ç¤Ï°ú¿ô¤Ë¤·¤¿¾ò·ï¤ò¸µ¤Ë¡¢¾È¹ç¤Ç¤­¤¿¥Ç¡¼¥¿¤Î¤ß¤ò¼è¤ê½Ð¤¹Áàºî¤ò¹Ô¤¤¤Þ¤¹¡£
¤³¤Î¥á¥½¥Ã¥É¤ÎÌá¤êÃÍ¤Ï IEnumerable<TResult> ¤Ç¤¢¤ê¡¢¤½¤Î¾ðÊó¤ò¼èÆÀ¤·¤ÆÍøÍѤ·¤¿¤¤¾ì¹ç¤Ë¤Ï¡¢¥á¥½¥Ã¥É¥Á¥§¡¼¥ó¤òÍøÍѤ·¤Æ¡¢ToList ¥á¥½¥Ã¥É¤ä ToArray ¥á¥½¥Ã¥É¤òÍøÍѤ·¤Æ°·¤¨¤ë¾õÂ֤ˤ·¤Þ¤¹¡£
¤³¤ì¤Ï Where ¥á¥½¥Ã¥É¤ÈƱ¤¸½èÍý¤Î¼ê½ç¤Ë¤Ê¤ê¤Þ¤¹¡£

¡¡¡¡// °ÜÆ°Àè¤Î¥Ñ¥¹¤Î¾ðÊ󤫤é Position ¤Î¾ðÊó¤À¤±¤òÃê½Ð¤·¤ÆÇÛÎó¤òºîÀ®
    Vector3[] paths = currentRailPathData.GetPathTrans().Select(x => x.position).ToArray();

¡¡¤³¤Á¤é¤Î¼ÂÁõÎã¤Ç¤Ï¡¢RailPathData ¥¯¥é¥¹¤ËÍÑ°Õ¤·¤Æ¤¤¤ë GetPathTrans ¥á¥½¥Ã¥É¤ÎÌá¤êÃͤǼèÆÀ¤·¤¿ Transfrom ·¿¤ÎÇÛÎóÊÑ¿ô(pathTrans ÊÑ¿ô)¤ËÂФ·¤Æ Select ¥á¥½¥Ã¥É¤òÍøÍѤ·¤Æ¤¤¤Þ¤¹¡£

¡¡pathTrans ÇÛÎóÊÑ¿ô¤Î³ÆÍ×ÁǤè¤ê¡¢potision ÊÑ¿ô¤Î¾ðÊó¤ò¤½¤ì¤¾¤ì¼è¤ê½Ð¤·¤Þ¤¹¡£¤½¤Î¤¿¤á¡¢Vector3 ·¿¤Î¾ðÊó¤òÃê½Ð¤·¤¿·ë²Ì¤¬½ÐÍè¾å¤¬¤ê¤Þ¤¹¡£
GetPathTrans().Select(x => x.position) ¤³¤³¤Þ¤Ç¤¬ Select ¥á¥½¥Ã¥É¤Ç¤¹¡£


»²¹Í¥µ¥¤¥È
MicroSoft
Enumerable.Select ¥á¥½¥Ã¥É
https://docs.microsoft.com/ja-jp/dotnet/api/system...
.NET Column ÍÍ
¡ÚLINQ¤ÎSelect¥á¥½¥Ã¥É¤Î½ñ¤­Êý3Áª¡ÃLINQ¤Ë¤Ä¤¤¤Æ¤Ê¤É¤ò¾Ò²ð
https://www.fenet.jp/dotnet/column/language/1454/
Qiita @t_takahari ÍÍ
LINQ¤Î¤½¤ÎForEach¡¢¼Â¤ÏSelect¤Ç½ñ¤­´¹¤¨¤é¤ì¤ë¤«¤â
https://qiita.com/t_takahari/items/6dc72f48b1ebdfe...


£²¡¥ToArray<TSource> ¥á¥½¥Ã¥É

¡¡IEnumerable<T> ¤«¤éÇÛÎó¤òºîÀ®¤¹¤ë¥á¥½¥Ã¥É¤Ç¤¹¡£

¡¡IEnumerable<T> ¤È¤Ï¡¢ Linq ¤Î½èÍý¤ò¼Â¹Ô¤·¤¿ºÝ¤ÎÌá¤êÃͤξðÊó¤Ç¤¹¡£Î㤨¤Ð¡¢¥Õ¥£¥ë¥¿¥ê¥ó¥°¤·¤Æ»»½Ð¤µ¤ì¤¿·ë²Ì¤ò ÇÛÎ󷿤ˤ·¤ÆÍøÍѤ·¤¿¤¤¾ì¹ç¤ËÍøÍѤ·¤Þ¤¹¡£
¤³¤Î¥á¥½¥Ã¥É¤ÎÌá¤êÃÍ¤Ï <TSource> ¤È¥¸¥§¥Í¥ê¥Ã¥¯·¿¤Ç¤¢¤ë¤¿¤á¡¢ Select ¥á¥½¥Ã¥É¤Ê¤É¤ÇÃê½Ð¤µ¤ì¤Æ¤¤¤ë·¿¤ÎÇÛÎ󤬽ÐÍè¾å¤¬¤ê¤Þ¤¹¡£

¡¡¡¡// °ÜÆ°Àè¤Î¥Ñ¥¹¤Î¾ðÊ󤫤é Position ¤Î¾ðÊó¤À¤±¤òÃê½Ð¤·¤ÆÇÛÎó¤òºîÀ®
    Vector3[] paths = currentRailPathData.GetPathTrans().Select(x => x.position).ToArray();

¡¡º£²ó¤Î¼ÂÁõ¤Ç¤Ï¡¢Select ¥á¥½¥Ã¥É¤Ë¤è¤Ã¤ÆÃê½Ð¤µ¤ì¤¿¾ðÊó¤ò ToArray ¥á¥½¥Ã¥É¤ò»È¤Ã¤ÆÇÛÎó¤Ë¤·¤Æ¤¤¤Þ¤¹¡£
Select ¥á¥½¥Ã¥É¤Î¤ß¤Ç¤ÏÃê½Ð¤·¤¿¾ðÊ󤬽ÐÍè¾å¤¬¤ë¤Î¤ß¤Ç¡¢¤³¤Î¥á¥½¥Ã¥É¤òÍøÍѤ·¤Ê¤¤¤ÈÇÛÎó¤Ë¤Ê¤ê¤Þ¤»¤ó¡£


»²¹Í¥µ¥¤¥È
MicroSoft
Enumerable.ToArray<TSource>(IEnumerable<TSource>) ¥á¥½¥Ã¥É
https://docs.microsoft.com/ja-jp/dotnet/api/system...
Qiita @Marimoiro ÍÍ
LINQ¥Á¡¼¥È¥·¡¼¥ÈŪ¤Ê¤â¤Î
https://qiita.com/Marimoiro/items/0e119b47d65bf138...
Qiita @mounntainn ÍÍ
LINQ¤Ë¤Ä¤¤¤Æ¤ÎÈ÷˺Ͽ
https://qiita.com/mounntainn/items/e8b8f94a15ec4fe...


£³¡¥Sum ¥á¥½¥Ã¥É

¡¡½¸·×ÍѤΥ᥽¥Ã¥É¤Î£±¤Ä¤Ç¤¹¡£»ØÄꤷ¤¿¥³¥ì¥¯¥·¥ç¥ó¤ÎÍ×ÁǤιç·×ÃͤòÌᤷ¤Þ¤¹¡£

    // °ÜÆ°Àè¤Î¥Ñ¥¹¤Î°ÜÆ°»þ´Ö¤ò¹ç·×
    float totalTime = currentRailPathData.GetRailMoveDurations().Sum();

¡¡¤³¤Á¤é¤Î¼ÂÁõ¤Ç¤Ï¡¢»ØÄꤵ¤ì¤¿ RailPathData ¥¯¥é¥¹¤Ë¤¢¤ë moveDurations ÇÛÎóÊÑ¿ô¤ò GetRailMoveDurations() ¥á¥½¥Ã¥É¤Ç¼èÆÀ¤·¡¢¤½¤ÎÍ×ÁǤò¤¹¤Ù¤Æ¹ç·×¤·¤Æ¤¤¤Þ¤¹¡£
moveDurations ÇÛÎóÊÑ¿ô¤ÎÍ×ÁǤ¬£´¤Ä¤¢¤ë¤Î¤Ç¤¢¤ì¤Ð¡¢£´¤Ä¤Î¹ç·×Ãͤ¬·×»»¤µ¤ì¡¢¤½¤Î½èÍý·ë²Ì¤¬ totalTime ÊÑ¿ô¤ËÌᤵ¤ì¤ÆÂåÆþ½èÍý¤µ¤ì¤Þ¤¹¡£


»²¹Í¥µ¥¤¥È
MicroSoft
Enumerable.Sum ¥á¥½¥Ã¥É
https://docs.microsoft.com/ja-jp/dotnet/api/system...
Qiita @RyotaMurohoshi ÍÍ
~https://qiita.com/RyotaMurohoshi/items/d4a6750a798...
Qitta @logikuma ÍÍ
¡ÚC#¡ÛLINQÈ÷˺Ͽ2 ¡Á½¸·×ÊÔ¡Á
https://qiita.com/logikuma/items/d4f87ff4c308a7606...


£±£°¡¥¥²¡¼¥à¤ò¼Â¹Ô¤·¤ÆÆ°ºî¤ò³Îǧ¤¹¤ë


¡¡¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¤ò¹Ô¤Ã¤¿¤é¡¢É¬¤º½èÍý¤ò³Îǧ¤·¤Þ¤¹¡£
¤¤¤Þ¤Þ¤Ç¤ÈƱ¤¸µóÆ°¤Ë¤Ê¤Ã¤Æ¤¤¤Ê¤±¤ì¤Ð¡¢ºÆÅÙ¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¤ò¤ä¤êľ¤¹É¬Íפ¬¤¢¤ë¤¿¤á¤Ç¤¹¡£
¡¡


¡¡°Ê¾å¤Ç¤³¤Î¼ê½ç¤Ï½ªÎ»¤Ç¤¹¡£

¡¡=>¡¡¼¡¤Ï¡¡¼ê½ç£¹¡¡¡¼¥ß¥Ã¥·¥ç¥óȯÀ¸Íѵ¡Ç½¤ÎÄɲἡ¡¤Ç¤¹¡£

¥³¥á¥ó¥È¤ò¤«¤¯


¡Öhttp://¡×¤ò´Þ¤àÅê¹Æ¤Ï¶Ø»ß¤µ¤ì¤Æ¤¤¤Þ¤¹¡£

ÍøÍѵ¬Ìó¤ò¤´³Îǧ¤Î¤¦¤¨¤´µ­Æþ²¼¤µ¤¤

Menu



´ðÁÃ

µ»½Ñ/Ãμ±(¼ÂÁõÎã)

3D¥¢¥¯¥·¥ç¥ó¥²¡¼¥à

2D¤ª¤Ï¤¸¤­¥²¡¼¥à(ȯŸÊÔ)

2D¶¯À©²£¥¹¥¯¥í¡¼¥ë¥¢¥¯¥·¥ç¥ó(ȯŸÊÔ)

2D¥¿¥Ã¥×¥·¥å¡¼¥Æ¥£¥ó¥°(³ÈÄ¥ÊÔ)

¥ì¡¼¥¹¥²¡¼¥à(È´¿è)

2DÊüÃÖ¥²¡¼¥à(ȯŸÊÔ)

3D¥ì¡¼¥ë¥¬¥ó¥·¥å¡¼¥Æ¥£¥ó¥°(±þÍÑÊÔ)

3Dæ½Ð¥²¡¼¥à(È´¿è)

2D¥ê¥¢¥ë¥¿¥¤¥à¥¹¥È¥é¥Æ¥¸¡¼

3D¥¿¥Ã¥×¥¢¥¯¥·¥ç¥ó(NavMeshAgent »ÈÍÑ)

2D¥È¥Ã¥×¥Ó¥å¡¼¥¢¥¯¥·¥ç¥ó(¥«¥¨¥ë¤Î°Ù¤Ë¡Á¡¢¥Ü¥³¥¹¥«¥¦¥©¡¼¥ºÉ÷)

VideoPlayer ¥¤¥Ù¥ó¥ÈϢư¤Î¼ÂÁõÎã

VideoPlayer ¥ê¥¹¥ÈÆ⤫¤é¥à¡¼¥Ó¡¼ºÆÀ¸¤Î¼ÂÁõÎã(ȯŸ)

AR ²èÁüÉÕ¤­¥ª¥Ö¥¸¥§¥¯¥ÈÀ¸À®¤Î¼ÂÁõÎã

AR ¥ê¥¹¥ÈÆ⤫¤éÀ¸À®¤Î¼ÂÁõÎã(ȯŸ)

2D¥È¥Ã¥×¥Ó¥å¡¼¥¢¥¯¥·¥ç¥ó(¥µ¥Ð¥¤¥Ð¡¼É÷)

private



¤³¤Î¥µ¥¤¥ÈÆâ¤ÎºîÉʤϥæ¥Ë¥Æ¥£¤Á¤ã¤ó¥é¥¤¥»¥ó¥¹¾ò¹à¤Î¸µ¤ËÄ󶡤µ¤ì¤Æ¤¤¤Þ¤¹¡£

´ÉÍý¿Í/Éû´ÉÍý¿Í¤Î¤ßÊÔ½¸¤Ç¤­¤Þ¤¹