Unity3d 立方体不会在鼠标单击时旋转

Unity3d 立方体不会在鼠标单击时旋转,unity3d,Unity3d,这段代码工作并旋转立方体 public float Speed; void Update() { transform.Rotate(Vector3.up * Speed * Time.deltaTime); } 但这不起作用: 我试着用鼠标左键向左旋转, 并在鼠标右键单击时向右旋转。仅单击片刻,不按住: public float Speed; void Update() { if (Input.GetMouseButtonDown(0)) // left mouse cli

这段代码工作并旋转立方体

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。


谢谢。

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?”)
来检查代码是否达到给定的点,或者连接调试器

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

最好的方法是,单击或检查,然后以固定的圈数运行几秒钟/a循环,或者检查是否按住鼠标按钮。

好的,我发现了一些问题:

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);
        }
    }

按下鼠标按钮时,这将(如怀疑的那样)旋转对象。

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

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);
    }
}

使用enum而不是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);            
    }
}


你确实意识到你需要在你的代码中进行无数次的点击来旋转它,因为每次点击只旋转1帧,而deltatime的数字就像1个原子?你的速度是多少?还要检查它何时被按下,何时不被按下clicked@Jadon沃尔夫冈250。检查你的速度是否不是0。因为它对我有用!此外,检查您是否正在使用新的Unity输入系统速度为250。我不知道新的统一输入系统是什么。我安装了版本2020.1.3F1,检查该类是否为MonoBehavior,是否连接到cube游戏对象,编辑器中的速度是否为0,是否足够高。例如,速度是250。是的,我已附加。请使用其他输入键而不是鼠标进行检查。发生相同的情况吗?也应该在游戏窗口中单击。我将为您测试代码并返回。因为它应该有效。也许试着重新启动你的编辑器。非常感谢你,但你不必抽出时间,因为我要问我的Unity专家朋友。是的,ofc,我们都在这里学习,所以我可能也会从这次经历中学习!!!我明白了,好的。你重置了对象上的组件了吗?你确定你已经在对象上添加了脚本并且它是活动的吗?Asker不想按住按钮,所以实际上可能只按住按钮一到两帧。我计划只单击一次左键和右键。然后使用OnMouseButtonDown()。但是你是否保存了它,是否重置了它,是否删除并读取了它?试试这些东西,plzz。@JadonWolfgang,我只使用旋转代码时附加的。在那之后没有做任何新的事情。它起作用了。