一、功能说明
我们知道,3D情况下给定一个位置,我们可以令游戏体朝向该位置,也就是
transform.LookAt(target);
结果就是游戏体的z轴正方向朝向目标。但是在2D中不能直接用这个方法,因为2D情况下游戏体的z轴是永远垂直于屏幕的,并不代表游戏体的前方。此时游戏体的前方可以是y轴正方向,也可以是x轴正方向,这取决于你的游戏体的形状。
综上,需要一个2D的LookAt函数。
二、功能实现
首先定义函数,如下
// transform表示需要旋转的游戏体,forward表示游戏体需要朝向目标的方向,targetPos表示目标位置
void LookAt2D(Transform transform, Vector3 forward, Vector3 targetPos)
{
Vector3 targetDir = targetPos - transform.position;
...
}
效果为forward方向旋转到目标方向。
显然我们要计算两个方向的夹角,不妨再写一个函数,如下
//forwardDir、targetDir均为单位向量
float GetAngle(Vector3 forwardDir, Vector3 targetDir)
{
float cosTheta = Mathf.Clamp(Vector3.Dot(forwardDir,targetDir),-1,1);//限制范围,否则可能会超出范围导致下一步报错
float Theta = Mathf.Acos(cosTheta) * 180 / Mathf.PI;//弧度制转角度制
return Theta;
}

1万+

被折叠的 条评论
为什么被折叠?



