You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在按住按键时旋转Unity对象?现有代码单次触发问题求解

解决Unity中按住空格键持续旋转Dummy的问题

嘿,我明白你的困扰——现在按住空格键时Dummy只旋转一次,得反复按键才行对吧?问题的核心在于你使用的Input.GetKeyDown方法:它只会在按键按下的第一帧返回true,所以旋转逻辑只会执行一次。

要实现按住期间持续旋转,你需要把Input.GetKeyDown换成Input.GetKey,这个方法在按键按住的每一秒(每帧)都会返回true,这样就能持续触发旋转操作了。

另外还要根据你的实际需求调整旋转逻辑:

情况1:按住空格键时,Dummy持续旋转到目标角度(到达后停止)

如果你是想让Dummy朝着某个固定的目标角度旋转,按住空格时持续靠近目标,那可以保留Quaternion.RotateTowards,只修改输入检测:

public Transform Dummy;
public Transform Sphere;

void Start () {
    Sphere.SetParent(Dummy);
}

void Update () {
    // 用GetKey替代GetKeyDown,按住期间每帧执行
    if (Input.GetKey(KeyCode.Space))
    {
        // 目标旋转角度,你可以根据需求调整这个四元数
        Quaternion targetRotation = new Quaternion(1, 1, 1, 0);
        // 持续朝目标旋转,20f是每秒旋转的角度,Time.deltaTime保证帧率无关
        Dummy.rotation = Quaternion.RotateTowards(Dummy.rotation, targetRotation, 20f * Time.deltaTime);
    }
}

情况2:按住空格键时,Dummy持续不停旋转

如果你的需求是按住空格时Dummy一直旋转(比如绕某个轴循环转动),那用Transform.Rotate会更直接:

public Transform Dummy;
public Transform Sphere;
// 可以在Inspector面板调整旋转速度
public float rotationSpeed = 20f;

void Start () {
    Sphere.SetParent(Dummy);
}

void Update () {
    if (Input.GetKey(KeyCode.Space))
    {
        // 绕Y轴持续旋转,你可以换成Vector3.right(X轴)或Vector3.forward(Z轴)
        Dummy.Rotate(Vector3.up, rotationSpeed * Time.deltaTime);
    }
}

简单总结下:

  • Input.GetKeyDown:仅按键按下瞬间触发一次
  • Input.GetKey:按键按住期间每帧都触发
  • 根据旋转需求选择RotateTowards(朝目标角度)或Rotate(持续循环转)

内容的提问来源于stack exchange,提问作者user8531441

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:09:27