如何在 Unity C#

问题描述

对于 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 (将#修改为@)