gpt4 book ai didi

c# - 如何在 Unity3D 中创建像 Snake vs Block 这样的运动

转载 作者:太空宇宙 更新时间:2023-11-03 14:53:01 26 4
gpt4 key购买 nike

我正在尝试重新制作流行的 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);
}

}
}

更新:我更改了游戏中蛇移动的基本逻辑。蛇没有向上移动,而是保持在相同的位置并且 block 向下移动。但是我仍然无法像在真实游戏中那样获得流畅的蛇运动。还有其他建议吗?

最佳答案

如果我明白你想做什么,你应该按相反的顺序处理。所以,如果你有节点 0 到 n:

  • 从第n个节点开始
  • 将第 (n-1) 个节点的位置赋给该节点
  • 然后对于每个i节点,给它分配第i-1个节点的位置
  • 移动所有节点后,根据用户输入移动节点0。

它应该是这样的:

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

关于c# - 如何在 Unity3D 中创建像 Snake vs Block 这样的运动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51004551/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com