我正在Unity的2D蛇游戏中工作。 这是Snake的负责人:
这是蛇尾的延伸。每当我吃东西时都会添加它:
我让蛇的头部移动,但我的问题是如何移动扩展?我试图将这些扩展作为孩子添加到头部,但是当我旋转头部时,它会同时旋转所有扩展,但我想像链一样旋转一个扩展。我正在使用C#脚本
if (position == 1 || position == 3) {
if (Input.GetKey (KeyCode.UpArrow)) {
position = 2;
rotation=90;
transform.rotation=Quaternion.Euler(0,0,rotation);
}
else if (Input.GetKey (KeyCode.DownArrow)) {
position = 4;
rotation=270;
transform.rotation=Quaternion.Euler (0,0,rotation);
}
} else if (position == 2 || position == 4) {
if(Input.GetKey(KeyCode.RightArrow)){
position=1;
rotation=0;
transform.rotation=Quaternion.Euler (0,0,rotation);
}
else if(Input.GetKey(KeyCode.LeftArrow)){
position=3;
rotation=180;
transform.rotation=Quaternion.Euler (0,0,rotation);
}
}
if (position == 1)
transform.Translate (Vector3.right * movementSpeed * Time.deltaTime,Space.World);
else if (position == 2)
transform.Translate (Vector3.up* movementSpeed * Time.deltaTime,Space.World);
else if(position==3)
transform.Translate(Vector3.left*movementSpeed*Time.deltaTime,Space.World);
else if(position==4)
transform.Translate (Vector3.down*movementSpeed*Time.deltaTime,Space.World);
int i;
for (i=1; i<extensions.Count; i++) {
extensions[i].transform.position=extensions[i-1].transform.position;
extensions[i].transform.rotation=extensions[i-1].transform.rotation;
}
答案 0 :(得分:0)
也许有一个arraylist。 然后在位置0设置父(snakehead) 1你设置孩子,2下一个孩子,然后继续。 并为每一帧每一个动作。 您知道每个部分之前的位置,并为每个子项设置了该部分。 更新每个零件的位置时,可以将对象的位置设置为数组的值。
您无法设置父属性,因为您会遇到意外行为。
如果我写错字和简短回答,请原谅。 (我在手机上)
答案 1 :(得分:0)
您应该使用列表检查它。虽然它一直在移动:如果{它吃食物然后实例化尾巴},否则{列表应该跟随头部}。请检查此链接:http://coffeebreakcodes.com/complete-projects/2d-snake-game-unity3d-c/
答案 2 :(得分:0)
如果您将每个部分(包括头部)放在List
中,您可以将Update ()
中的每个部分(或您调用移动功能的任何地方)移动到该位置,在列表中紧接在它之前的部分的旋转。这样,所有你必须直接控制的运动是头;以下部分将以完全相同的路径移动。