如果想让面片在空间中始终面向你可以用LookAt方法或者Lookrotation注释旋转 如果你只是想让面片在XY 或者XZ平面旋转可以试试下面的脚本,通过计算两点间角度 然后让A物体绕自身欧拉角旋转该角度 即面向了B物体。
public class mianxiang: MonoBehaviour{
public GameObject baozha; //你要旋转的面片,即这个脚本绑定在改物体上
public GameObject camera; //摄像机
void Update ()
{
this.transform.rotation = Quaternion.Euler(0, GetAngle(transform.position, camera.transform.position), 0); //调用GetAngle方法计算角 度并让物体绕自身y轴旋转改度数
}
private float GetAngle(Vector3 a, Vector3 b) //计算两个点之间的角度 即a点加上该角度为b点
{
b.x -= a.x;
b.z -= a.z;
float deltaAngle = 0;
if (b.x == 0 && b.z == 0) //若B点与A点重合 或AB两点同在一个坐标轴上那么AB两点间没有度数直接返回0
{
return 0;
}
else if (b.x > 0 && b.z > 0)//若B点在第一象限 那么deltaAngle 为0不需要修正角度
{
deltaAngle = 0;
}
else if (b.x > 0 && b.z == 0)//若B点在x轴正半轴上
{
return 90;
}
else if (b.x > 0 && b.z < 0)//若B点在第四象限
{
deltaAngle = 180;
}
else if (b.x == 0 && b.z < 0)//若B点在Z轴负半轴上
{
return 180;
}
else if (b.x < 0 && b.z < 0)//若B点在第三象限
{
deltaAngle = -180;
}
else if (b.x < 0 && b.z == 0)//若B点在X轴负半轴
{
return -90;
}
else if (b.x < 0 && b.z > 0)//若B点在第二象限
{
deltaAngle = 0;
}
float angle = Mathf.Atan(b.x / b.z) * Mathf.Rad2Deg + deltaAngle;
return angle;
//利用反正切计算两点间弧度并转化为角度 但此角度仅为点B在第一象限 因此需要上面的判断来确定B点在位于A点的第几象限,B点是否刚好落在X轴或者Z轴上,通过deltaAngle来修正角度
}
}
|