Пример #1
0
 /// <summary> 巡回ステート時の処理 </summary>
 private IEnumerator RandomWalk()
 {
     while (!FindPlayer())
     {
         // 距離マップ
         int[,] distanceMap = new int[mapRange.x, mapRange.y];
         // 目的地ランダマイズ
         Vector2Int destination = RandomDestination();
         //Debug.Log("random destination"+destination);
         // 移動マップ記録
         _influenceMap.DetureMatrixOperate(destination, j => _passableMap[j.x, j.y],
                                           (xCount, yCount, distance) => { distanceMap[xCount, yCount] = distance; });
         // 移動
         int        step    = distanceMap[EnemyPosition.x, EnemyPosition.y];
         Vector2Int stepPos = EnemyPosition;
         while (EnemyPosition != destination && !FindPlayer())
         {
             _influenceMap.NextPoint(EnemyPosition, (x, y) =>
             {
                 if (step > distanceMap[x, y] && _passableMap[x, y])
                 {
                     step    = distanceMap[x, y];
                     stepPos = new Vector2Int(x, y);
                 }
             });
             yield return(Move(stepPos - EnemyPosition, walkTime));
         }
     }
 }