Движение в ромбической изометрии
Не получается реализовать задание: Как только появляется дорога больше 4х тайлов по ней начинает ездить машины. Визуализировать движение машин, их повороты и движение по круговому движению. Не должно быть аварий, работает правило помеха с права. В тупиках машины разворачиваются. Машина двигается только по одной полосе. Все повороты плавные со сменой спрайтов поворота.
Подскажите алгоритм проверки длинны дороги и принцип анимации машины, пожалуйста.

генерация карты и дороги реализуется в 2 скриптах: tilecontroller:
spriteRenderer= GetComponent<SpriteRenderer>();
}
private void OnMouseDown() {
if (mapController.tileSprite)
spriteRenderer.sprite=mapController.tileSprite;
if (!Input.GetKey(KeyCode.LeftControl)) {
if (stone == null) {
road = true;
setType();
if (TopTile)
TopTile.setType();
if (BottomTile)
BottomTile.setType();
if (LeftTile)
LeftTile.setType();
if (RightTile)
RightTile.setType();
}
}
}
public void setType() {
int count = 0;
if (TopTile && TopTile.road)
count += 1;
if(RightTile && RightTile.road)
count += 2;
if(LeftTile && LeftTile.road)
count += 8;
if (BottomTile && BottomTile.road)
count += 4;
if (road)
spriteRenderer.sprite = Resources.Load<Sprite>(count.ToString());
}
mapcontroller
public GameObject TilePrefab;
public int height;
public int width;
public float offsetX;
public float offsetY;
public Sprite tileSprite;
public Tile[,] tiles;
private void Start() {
tiles = new Tile[width, height];
CreateMap();
InitTile();
}
public void CreateMap() {
Vector3 pos = Vector3.zero;
for (int x = 0; x < width; x++) {
for(int y=0; y < height; y++) {
if (y % 2 == 0)
pos = new Vector3(x * offsetX, y * offsetY, y * offsetY);
else
pos = new Vector3(x * offsetX + (offsetX/2), y * offsetY, y * offsetY);
GameObject clone = Instantiate(TilePrefab, pos, Quaternion.identity);
clone.GetComponent<Tile>().mapController = this;
tiles[x,y] = clone.GetComponent<Tile>();
}
}
}
public void InitTile() {
for (int x = 0; x<width; x++) {
for (int y = 0; y < height; y++) {
if ( y % 2 == 0) {
if (y + 1 < height)
tiles[x, y].TopTile = tiles[x, y + 1];
if (x - 1 >= 0 && y - 1 >= 0)
tiles[x,y].BottomTile = tiles[x-1, y-1];
if (y - 1 >= 0)
tiles[x,y].RightTile = tiles[x, y-1];
if(x-1 >= 0 && y + 1< height)
tiles[x, y].LeftTile = tiles[x-1, y+1];
}
else {
if (y + 1 < height && x + 1 < width)
tiles[x, y].TopTile = tiles[x + 1, y + 1];
if (y - 1 >= 0)
tiles[x, y].BottomTile = tiles[x, y - 1];
if (y - 1 >= 0 && x + 1 < width)
tiles[x, y].RightTile = tiles[x + 1, y - 1];
if (y + 1 < height)
tiles[x, y].LeftTile = tiles[x , y + 1];
}
}
}
}
}