如何在按住按键时旋转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
相关产品推荐
相关产品推荐

