网格像蛇系统

时间:2017-05-11 00:47:40

标签: unity3d unity2d

所有。我想要完成的是一个简单的蛇游戏,每个尾部位置跟随前一个尾部位置。但由于某种原因,瓷砖沿对角线跟随前一个尾部位置,而不是像头部一样在网格系统中移动。这是我的代码

头部运动课

public float unitsPerFrame = 1;
void Update(){
    if (Input.GetKey(KeyCode.UpArrow) && downDir == false)
        {
            transform.localRotation = Quaternion.Euler(0, 0, 0);
            mDir = Vector3.up * unitsPerFrame;
        }
    } 

...所有方向都是一样的,我只是将其包括在内,这样你就可以看到我的头部动作是如何运作的。

尾部运动课

 void Update()
{
    tail[0].transform.position = Vector3.MoveTowards(tail[0].transform.localPosition, GameObject.Find("Player").transform.localPosition, 0.02f);
    for(int i = 1; i < tail.Count; i++)
    {
        tail[i].transform.position = Vector3.MoveTowards(tail[i].transform.localPosition, tail[i - 1].transform.localPosition, 0.02f);
        tail[i].transform.rotation = tail[i - 1].transform.rotation;
    }
}

另外只是为了澄清,我知道我正在使用Vector3,当我应该将vector2用于2D时,但它现在正常运行,我稍后会更改它。

1 个答案:

答案 0 :(得分:0)

Vector3.MoveTowards = 的含义将点current沿直线移向target点。here引用。
实际上直线将是最短路径,在您的情况下是对角线,但要实现目标,您有几种选择:我将描述其中两种

  
      
  1. tail x的位置替换为tail x - 1示例:
    tail[i].transform.position = tail[i - 1].transform.position;
  2.   
  3. 使用线性插值(如果要在切片之间平滑移动,请执行此操作)示例:
    tail[i].transform.position = Vector3.Lerp(tail[i].transform.position, tail[i - 1].transform.position, Time.deltaTime);
  4.