我正在尝试重新创建流行的SnakeVSBlock手机游戏。大多数物理学都非常简单明了,但我似乎无法重新创建蛇的动作。游戏中蛇的移动的特殊之处在于,上一个节点在X和Y中都完美地遵循了下一个路径。这是我当前的代码,它可以像蛇一样运动,但不遵循下一个的确切路径节点。我想知道是否有人对此有解决方案。
public void Move()
{
if (Input.GetMouseButton(0) && GameManager.Instance.IsGameOver() == false && Nodes.Count > 0)
{
Vector3 curPos = Input.mousePosition;
curPos.z = -1;
curPos = Camera.main.ScreenToWorldPoint(curPos);
Nodes[0].GetComponent<Rigidbody2D>().velocity = new Vector2(curPos.x - Nodes[0].position.x, 0) * 20;
if (Nodes[0].position.x > 2.56f)
{
Nodes[0].position = new Vector2(2.56f,Nodes[0].position.y);
}
else if (Nodes[0].position.x < -2.56f)
{
Nodes[0].position = new Vector2(-2.56f, Nodes[0].position.y);
}
for (int i = 1; i < Nodes.Count; i++)
{
Vector2 newPos = new Vector2(Nodes[i-1].position.x, Nodes[i].position.y);
if (GameManager.Instance.GetPoweredUp())
{
Nodes[i].position = Vector2.Lerp(Nodes[i].position, newPos, Time.deltaTime * 14);
}
else
{
Nodes[i].position = Vector2.Lerp(Nodes[i].position, newPos, Time.deltaTime * 10);
}
}
}
更新:我更改了游戏中蛇移动的基本逻辑。而不是让蛇向上移动,蛇停留在相同的位置,而块向下移动。但是我仍然无法像真实游戏中那样获得平稳的蛇行。还有其他建议吗?
答案 0 :(得分:0)
如果我了解您想做什么,则应该以相反的顺序进行操作。 因此,如果您有节点0到n:
它应该像这样:
public void Move()
{
int n = Nodes.Count;
if (n > 0)
{
for (int i = n - 1; i > 0; i--)
{
_curNode = Nodes[i];
_nextNode = Nodes[i - 1];
Vector3 pos = _nextNode.transform.position;
pos.z = Nodes[0].position.z;
_curNode.tranform.position = pos;
}
float horizontalInput = Input.GetAxis("Horizontal");
Nodes[0].Translate(Vector3.right * Time.deltaTime * horizontalInput * 10);
Nodes[0].Translate(Vector3.up * Time.deltaTime * 4);
if (Nodes[0].position.x > 2.90)
{
Nodes[0].position = new Vector2(2.90f, Nodes[0].position.y);
}
else if (Nodes[0].position.x < -2.90)
{
Nodes[0].position = new Vector2(-2.90f, Nodes[0].position.y);
}
}
}
此外,除非您以某种方式增加了两个LerpTime变量,否则您会滥用Lerp函数,并且在这种情况下也不需要它。 这是有关Lerp真正含义以及如何正确使用它的非常清晰的指南: http://lunarlabs.pt/blog/post/the-art-of-lerp
答案 1 :(得分:0)
您收集小方块的旧手机游戏“蛇”具有相同的移动方式。然后的解决方案是,蛇的各个部分实际上并没有移动,只是在您向头部添加一点并从尾巴上移走了一帧。
在这种蛇对方块游戏中,这种方法适用于蛇但不能立即起作用的原因是前者是离散的,后者是连续的。
解决此问题的一种方法是,每个身体部位始终会偏向上方的部位,当到达该部位时,它会向后移动。当身体的各个部分实际上卡在适当的位置时,这会给蛇一种前进的感觉,就像古老的蛇游戏一样。
这可以在纸上进行,但我不知道它会如何执行。但是,如果您真的很绝望,则可以考虑尝试一下。