前言:每日记录自己学习unity的心得和体会,小弟才疏学浅,如有错误的地方,欢迎大佬们指正,感谢~
方法只是一种思路,其实基本原理很简单,主要解决四个问题。
- 相机位置最终位置的计算;
- 相机朝向;
- 相机离目标远近问题 ;
- 模型几何中心问题;
解决位置问题的方法就是两个向量向加,已知目标点的向量,加上相机的方向向量就可以;相机的方向unity的api已经提供;距离目标的远近的方法可以用目标的尺寸做参考和后面的几何中心问题一样都是现成发api。
核心源码
public static Vector3 GetCameraMovePos(this Camera camera, Bounds target)
{
Vector3 vector = Vector3.zero;
vector = target.center - (camera.transform.forward * target.size.magnitude);
return vector;
}
- 这里扩展了Camera的方法。
- 调用方法
- public Vector3 CameraPos;
public bool isMove = false;
void Update()
{
if (isMove)
{
Camera.main.transform.position = Vector3.MoveTowards(Camera.main.transform.position, CameraPos, 30f * Time.deltaTime);
if (Camera.main.transform.position == CameraPos)
{
isMove = false;
}
}
}
private void OnMouseDown()
{
//bounds获取方法一,通过mesh获得。
//CameraPos = Camera.main.GetCameraMovePos(gameObject.GetComponent<MeshFilter>().mesh.bounds);
bounds获取方法二,通过碰撞盒子获得。(这里主要针对模型自身尺寸不规范的)
CameraPos = Camera.main.GetCameraMovePos(gameObject.GetComponent<Collider>().bounds);
isMove = true;
}