【问题标题】:The cube does not rotate on mouse click立方体在鼠标点击时不旋转
【发布时间】:2020-09-11 12:53:25
【问题描述】:

这段代码可以旋转一个立方体,

public float Speed;

void Update()
{
    transform.Rotate(Vector3.up * Speed * Time.deltaTime);
}

但这不起作用:
我试图在鼠标左键单击时向左旋转, 并在鼠标右键单击时向右旋转。只是点了一下,没有按住。 :

public float Speed;

void Update()
{
    if (Input.GetMouseButtonDown(0)) // left mouse clicked.
    {
        transform.Rotate(Vector3.up * Speed * Time.deltaTime);
    }
    else if (Input.GetMouseButtonDown(1)) // right mouse clicked.
    {
        transform.Rotate(Vector3.down * Speed * Time.deltaTime);
    }        
}

我该如何解决这个问题?

注意:
我已附上脚本,
它的速度是 250。

谢谢。

【问题讨论】:

  • 您确实意识到您需要在代码中进行数十亿次点击来旋转它,因为您每次点击只需将其旋转 1 帧并且使用 deltatime 这个数字就像 1 个原子?
  • 你的速度是多少?
  • 同时检查它何时被按住而不被点击
  • @Jadon Wolfgang 其 250。

标签: unity3d


【解决方案1】:

使用Input.GetMouseButton(0) 代替Input.GetMouseButtonDown(0)。对于您的代码,每次点击它都会旋转,但如果速度不够大,您甚至不会注意到。使用Input.GetMouseButton(0),立方体将在按下按钮时旋转。

【讨论】:

  • 检查该类是否为monobehaviour,它是否附加到立方体gameObject,并且在编辑器中速度不是0,并且它是否足够高。以 100 个为例
  • 速度是250。是的我已经附上了。
  • 用其他输入键代替鼠标检查。发生同样的事情?
  • 同样点击应该在游戏窗口内进行
【解决方案2】:

GetMouseButtonDown 在按下按钮的帧中执行一次。 GetMouseButtonUp 也是如此,您正在寻找 Input.GetMouseButton,它在按下按钮时为每一帧返回 true。

所以你的代码每次按下按钮都会执行,然后你需要释放它才能再次工作。

public float Speed;
void Update()
{
    if (Input.GetMouseButton(0)) // sol mouse tıklandı
    {
        transform.Rotate(Vector3.up * Speed * Time.deltaTime);
    }
    else if (Input.GetMouseButton(1)) // sağ mouse tıkladı
    {
        transform.Rotate(Vector3.down * Speed * Time.deltaTime);
    }        
}

要自己调试此类问题,您可以放置​​ Debug.Log("Works?") 以检查您的代码是否达到给定点或附加调试器

【讨论】:

  • 检查你的速度是否不是0。因为它对我有用!另外,请检查您是否没有使用新的 Unity 输入系统
  • 速度是250,不知道新的Unity Input系统是什么。我安装的版本是2020.1.3f1
【解决方案3】:

最好的方法是检查一次点击,然后运行一个协程几秒钟/一个 for 循环,并具有固定的转数,检查鼠标按钮是否被按住。

【讨论】:

  • 我会为您测试代码并回来。因为它应该工作。也许尝试重新启动您的编辑器。
  • 非常感谢,但您不必抽出时间,因为我要去问问我的 Unity 专家朋友。
  • 是的,ofc,我们都是来学习的,所以我可能也会从这次经历中学习!!!
  • 我明白了,好的。
  • 您是否重置了对象上的组件?
【解决方案4】:

好的,我已经找到了:

public float Speed;
    void Update()
    {
        if (Input.GetMouseButtonDown(0)) 
        {
            transform.Rotate(Vector3.up * Speed * Time.deltaTime);
        }
        else if (Input.GetMouseButtonDown(1))
        {
            transform.Rotate(Vector3.down * Speed * Time.deltaTime);
        }
    }

这将以固定的量旋转对象。当您按下鼠标按钮 0 或 1 时。


    public float Speed;
    void Update()
    {
        if (Input.GetMouseButton(0)) 
        {
            transform.Rotate(Vector3.up * Speed * Time.deltaTime);
        }
        else if (Input.GetMouseButton(1))
        {
            transform.Rotate(Vector3.down * Speed * Time.deltaTime);
        }
    }

这将(怀疑)在按下鼠标按钮时旋转对象。

【讨论】:

  • 你确定你已经在对象上添加了脚本并且它是活动的吗?
  • 提问者不想按住按钮,所以实际上可能只按住按钮一两帧
  • 是的,我打算只单击一次左右键。
  • 然后使用 OnMouseButtonDown()。但是你保存了吗,你重置了它,你删除并阅读了它吗?试试这些东西。
  • @Jadon Wolfgang 我在仅使用旋转代码时附加。并且在那之后没有做任何新的事情。它工作正常。
【解决方案5】:

我的朋友已经解决了这个问题:

public class Rotator2 : MonoBehaviour
{
    bool Forward = true;
    public float Speed;

    void Start()
    {
        Forward = true;
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Forward = true;
        }
        if (Input.GetMouseButtonDown(1))
        {
            Forward = false;
        }

        transform.Rotate(Vector3.up, (Forward ? 1 : -1) * Speed * Time.deltaTime);
    }
}

【讨论】:

    【解决方案6】:

    使用枚举的代码相同,而不是使用 bool:

    enum Direction
    {
        None,
        Forward,
        Backward
    }
    
    public class Rotator2 : MonoBehaviour
    {
        Direction Direction = Direction.Forward;
        public float Speed;
    
        void Update()
        {
            if (Input.GetMouseButtonDown(0))
            {
                Direction = Direction.Forward;
            }
    
            if (Input.GetMouseButtonDown(1))
            {
                Direction = Direction.Backward;
            }
            
            transform.Rotate(Vector3.up, (Direction== Direction.Forward ? 1 : -1 ) * Speed * Time.deltaTime);            
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-01-19
      • 2018-09-28
      • 2023-04-06
      • 2021-10-31
      • 2020-05-06
      • 1970-01-01
      • 2015-02-09
      • 2015-09-10
      • 1970-01-01
      相关资源
      最近更新 更多