Движение в ромбической изометрии

Не получается реализовать задание: Как только появляется дорога больше 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];
                }
            }
        }
   }
}

Github Проекта;


Ответы (0 шт):