1.有一个这样的需求,根据两个向量,判断之间的夹角,并且确定其方向是顺时针还是逆时针的~
下面上解决代码:
Vector3 toV3 = new Vector3(playerCamera.transform.forward.x, 0, playerCamera.transform.forward.z);
float angle = Vector3.Angle(transform.forward, toV3); //求出两向量之间的夹角
Vector3 normal = Vector3.Cross(transform.forward, toV3);//叉乘求出法线向量,判断法线的正负值可以确定顺时针或者逆时针
if (Mathf.Abs(transform.eulerAngles.y - playerCamera.transform.eulerAngles.y) <= 5)
{
transform.rotation = Quaternion.Euler(0, playerCamera.transform.eulerAngles.y, 0);
}
else
{
angle = normal.y > 0 ? angle : angle * -1;
transform.rotation = Quaternion.Euler(0, transform.eulerAngles.y + angle * fRotationSpeed * Time.deltaTime, 0);
}
关于api和思路的讲解:
Vector3.Angle:计算两个向量之间的夹角(重点:方向)
Vector3.Cross:叉乘求出两个向量之间的法线,返回值为Vector3类型,然后判断这个返回值的Y的正负即可。(重点:方向)
正数:顺时针 、 负数:逆时针