问题描述
对于 Unity 和 C# 来说还是很新的。在设置/更改对象的位置时,我通常可以找到自己的方法,但是当涉及到旋转时,它仍然让我感到难以置信,包括四元数、欧拉角等。
我试图检查一个物体(一个头)是否面向某个方向,如果它没有面向那个方向,它需要根据它的前进方向(向上、向下、向左或向右)将其设置为那个方向.这是针对我目前正在开发的蛇游戏(如旧的自上而下的诺基亚游戏)。
我试着查了一下,但没有一个答案是针对我正在尝试做的事情。
截至目前,这是我用于玩家输入的内容(一段代码):
private int GetAxisRaw(Axis axis)
{
if (axis == Axis.Horizontal)
{
bool left = Input.GetKeyDown(KeyCode.LeftArrow) || Input.GetKeyDown(KeyCode.A);
bool right = Input.GetKeyDown(KeyCode.RightArrow) || Input.GetKeyDown(KeyCode.D);
if (left)
{
snakeHeadRotation.transform.Rotate(0,180,0); // Keeps rotating when left is pressed
return -1;
}
if (right)
{
snakeHeadRotation.transform.Rotate(0,-180,0);
return 1;
}
return 0;
}
如你所见,snakeHeadRotation.transform.Rotate(0,0);例如,每次玩家按下左键时都会被调用,从而即使蛇仍在向左移动时也会转动蛇的头部。
我的逻辑是将旋转值存储在某处(可能键入 Quaternion/bool)并检查该旋转值是否与设置为左的当前旋转值匹配(即 snakeHeadRotation.transform.Rotate(0,0);) 如果是这种情况,请不要做任何事情。如果不是,请将其设置为 snakeHeadRotation.transform.Rotate(0,0);例如。
代码看起来像(写出来):
private int GetAxisRaw(Axis axis)
{
if (axis == Axis.Horizontal)
{
bool left = Input.GetKeyDown(KeyCode.LeftArrow) || Input.GetKeyDown(KeyCode.A);
bool right = Input.GetKeyDown(KeyCode.RightArrow) || Input.GetKeyDown(KeyCode.D);
if (left && rotation is not equal to snakeHeadRotation.transform.Rotate(0,0))
{
snakeHeadRotation.transform.Rotate(0,0);
return -1;
}
if (right)
{
snakeHeadRotation.transform.Rotate(0,0);
return 1;
}
return 0;
}
如前所述,我非常不熟悉设置或存储旋转值。我怎样才能做到这一点?这甚至是正确的方法还是有更合乎逻辑的方法?这个我自己也想不通..
我希望我的解释是正确的,我通常不擅长解释事情。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)