我正在尝试编写第三人称角色的程序,使得当按下方向键(例如D键)时,如果角色当前面对的方向与相机相同,则播放右侧四分之一转身动画,如果它面对相机,则播放左侧四分之一转身动画,类似于GTA V。但是我在获取摄像机和玩家在Y轴平面上的夹角方面遇到了问题。我在玩家控制脚本中尝试了以下内容:
void Right()
{
Vector3 pVec = Vector3.ProjectOnPlane(transform.forward, Vector3.up);
Vector3 cVec = Vector3.ProjectOnPlane(mainCam.transform.forward, Vector3.up);
print(cVec);
float angle = Vector3.Angle(pVec, cVec);
print(angle);
if(angle >= 345 && angle <= 15)
{
animator.Play("StandQuarterTurnRight");
}
else if(angle >= 255 && angle <= 285)
{
animator.Play("StandHalfTurnRight");
}
else if(angle >= 165 && angle <= 195)
{
animator.Play("StandQuarterTurnLeft");
}
else if(angle >=75 && angle <= 105)
{
float forw = Input.GetAxis("Horizontal");
if (forw > 0.5f && !Input.GetKey(KeyCode.LeftShift)) forw = 0.5f;
else if (forw < -0.5f && !Input.GetKey(KeyCode.LeftShift)) forw = -0.5f;
animator.SetFloat("Speed", forw);
}
}
但是它并没有起作用,我得到了错误的角度。当角色面对相机前方向左或向右时,我得到了90的角度,而其他情况下则得到了错误的角度,并且根本没有给出180+,我做错了什么?是否有更好的方法来实现我想要的效果?