我已经对此进行了一些研究,但似乎没有任何方法可以正常工作。希望有人可以阐明我做错了什么。
在我正在开发的这个 2D Unity 游戏中,我希望大炮跟随鼠标并围绕 z 轴旋转。当前代码正是这样做的,但我也想限制旋转。
Vector3 dir = Camera.main.ScreenToWorldPoint (Input.mousePosition);
Quaternion targetRotation = Quaternion.LookRotation(transform.position - dir.normalized, Vector3.forward);
targetRotation.x = 0;
targetRotation.y = 0;
transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, Time.deltaTime * rotationSpeed * 10);
我尝试使用if
-statements 来限制轮换:
if(eulerAngle > 65 && eulerAngle < 295) //pseudo code
transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, Time.deltaTime * rotationSpeed * 10)
这有效,但将大炮的枪管锁定在 65 度或 295 度。我没有运气使用if
语句来“解锁”枪管旋转。
我也尝试过使用四元数的类似语句:
float amountToRotate = Quaternion.Angle (transform.rotation, targetRotation);
我想,由于四元数的工作方式,即使远离目标,角度也会增加。类似于复平面上的数字?
该mathf.clamp
功能根本没有给我带来任何运气。
所有这些问题的解决方案可能都有一个简单的解决方案,但我似乎无法解决。
编辑:我更喜欢使用mathf.clamp
这似乎是“最干净”的解决方案。