[Из песочницы] Реализация волнового алгоритма нахождения кратчайшего пути к динамически движущимся объектам в unity3d на C# в 2d игре
using UnityEngine;
using System.Collections;
public class Battlefield2 : MonoBehaviour {
public static int[,] battlefield; // матрица местности
public int enemyNumber = 6, playerNumber = 3; //public для возможности редактировать через инспектор
public static int x, y; // ширина и высота поля
public GameObject enemyMilitiaman; //префаб ополченца врага
public GameObject swordsmanGO; //префаб мечника.
public static bool ready = false; //мы не сможем начать искать путь, пока не разместим юнитов на поле.
void Start () {
battlefield = new int[,]{ // матрица нашей локации. 1 - стена. 0 - свободная клетка
{1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1}};
setEnemyPosition (enemyNumber); // размещаем врагов на поле
setPlayerPosition (playerNumber); // размещаем воинов игрока
ready = true; // можем начинать искать путь
}
// Update is called once per frame
void Update () {
}
void setEnemyPosition(int numberEnemies){
//////
////// РАЗМЕСТИТЕ ЮНИТОВ КАК ВАМ НЕОБХОДИМО, В ДАННОМ ПРИМЕРЕ ЭТО БУДЕТ 1 ЮНИТ НА (14,2)
/////
// создаем объект противника
GameObject go = Instantiate(enemyMilitiaman, new Vector3(14, 2, 10), Quaternion.identity) as GameObject;
battlefield[14, 2] = 1; // обязательно запишите в карту локации, что клетка, на которой находится воин, занята.
}
void setPlayerPosition(int numberPlayerWarior){
//////
////// РАЗМЕСТИТЕ ЮНИТОВ КАК ВАМ НЕОБХОДИМО, В ДАННОМ ПРИМЕРЕ ЭТО БУДЕТ 1 ЮНИТ НА (2,6)
/////
GameObject go = Instantiate(swordsmanGO, new Vector3(2, 6, 10), Quaternion.identity) as GameObject;
battlefield[2, 6] = 1;
}
public static void printMatrix(){
string arr = "";
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
arr += battlefield[i,j] + ",";
}
arr += "\n";
}
print (arr);
}
}