# 前言
在游戏场景中,经常需要平移摄像机然后聚焦对象,今天就来讲讲这部分是如何实现。
# 正文
# 思路
我们可以让摄像机从屏幕中心点发射一个射线到场景平面(Plane)中,得到当前屏幕中心点在场景中的位置,然后对于目标点的差值就是我们需要移动摄像机的距离。
# 代码实现
//聚焦对象
private void CameraFocusAt(Transform target)
{
var cp = CalcScreenCenterPosOnPanel();
var tp = target.position;
//1.直接移动
// mainCamera.transform.Translate(tp - cp,Space.World);
//2.使用tween移动
mainCamera.transform.DOMove(mainCamera.transform.position + (tp - cp), 0.5f);
}
/// <summary>
/// 屏幕中心点到panel上的坐标
/// </summary>
/// <returns></returns>
private Vector3 CalcScreenCenterPosOnPanel()
{
var ray = mainCamera.ScreenPointToRay(new Vector3((float) Screen.width / 2, (float)Screen.height / 2, 0));
if (_plane.Raycast(ray, out var distance))
{
return ray.GetPoint(distance);
}
else
{
return Vector3.zero;
}
}
# 实现效果
你也可以下载示例工程,未来也会把所有Unity方面的博客代码放到里面。