【发布时间】:2020-08-05 15:12:41
【问题描述】:
我正在尝试对第三人称角色进行编程,这样当方向键时,例如。按下 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+,我做错了什么?有没有更好的方法来实现我正在尝试的目标?
【问题讨论】:
-
试试三角函数或四元数answers.unity.com/questions/54495/…
-
投反对票是怎么回事?我的问题有什么问题?
标签: c# unity3d game-physics game-development