我一直在研究一个VR项目,其中一对眼睛跟踪世界空间中的某个点。对于初学者,我使用播放器的控制器作为目标。目前的眼睛完全按照我的期望进行跟踪,但是由于它们是眼睛,因此我想限制它们可以向上/向下和向左/向右看的距离。我尝试使用localEulerAngles来完成此操作,该方法似乎有效,但是一旦我输入“错误”(如果阻塞),眼睛的旋转就再也不会改变,因此会卡住。因此,我认为我需要将轮换强制回到可接受的范围内,但是我不知道如何正确执行此操作。我还认为可能有更好的方法来完成我所不知道的全部操作。这是我当前的更新功能:
void Update(){
Vector3 direction = finger.position - this.transform.position;
float angleX = transform.localEulerAngles.x;
//this text is displayed in VR so that I can see while I test
temp.text = transform.localEulerAngles.x.ToString();
//this condition is for if the finger is held up in the air
if (pointing)
{
//because of the way angles work, it is necessary to check what CANT be?.
if (angleX > 15 && angleX < 350)
{
//what to do here?
}
else
{
//look at the finger
this.transform.rotation = Quaternion.Slerp(this.transform.rotation, Quaternion.LookRotation(direction), 0.1f);
}
}
}
答案 0 :(得分:0)
使用Mathf.Clamp
方法将浮点值限制在最小值和最大值之间,然后将变换的X角度重置为钳制值。
因此您的Update
方法变为:
void Update() {
Vector3 direction = finger.position - this.transform.position;
float angleX = transform.localEulerAngles.x;
//this text is displayed in VR so that I can see while I test
temp.text = transform.localEulerAngles.x.ToString();
//this condition is for if the finger is held up in the air
if (pointing)
{
float clampedAngle = Mathf.Clamp(angleX, 15f, 350f);
transform.localEulerAngles.x = clampedAngle;
//look at the finger
this.transform.rotation = Quaternion.Slerp(this.transform.rotation, Quaternion.LookRotation(direction), 0.1f);
}
}