Unity中利用光线投射实现摄像机拉近追踪对象

项目中要求实现摄像机跟踪人物移动,并且可以水平360°,上下接近180°的自由旋转。这些操作网上已近有很多版本的实现,在此不再赘述。我在此想说的是,当摄像机移动到场景边界,或者触碰到场景中的障碍物的时候,自动拉近与人物之间的距离,当人物再次走回场景中央的时候,逐渐恢复摄像机与人物之间的距离。

我是通过unity里的光线投射来处理这个问题的。具体的实现代码如下:

    private GameObject targetObj = null;                //摄像机追踪的游戏对象
    private GameObject camera = null;                   //摄像机
    private RaycastHit hit;
    private string obstacleName = "Obstacle";           //障碍物的名字
    private int obstacleLayer = 0;                      //障碍物所在的Layer
    private Vector3 offPos = new Vector3(0, 1, 0);      //因为人物中心位于脚底,但是希望摄像机以人物要不为观察点,故有此值
    Quaternion rotation;                                //摄像机当前的旋转角度
    Vector3 position;                                   //摄像机当前的位置          

    void LateUpdate(int x)
    {
        if (null == targetObj || null == camera)
            return;
        rotation = new Quaternion();    //简写
        position = Vector3.zero;        //这里的position是当人物为触碰场景边界或者障碍物的时候,计算出的是相机的位置,需要计算,这里是简写.
        //下面对摄像机触碰到场景边界或者障碍物的情况做处理
        if (Physics.Linecast(targetObj.transform.position + offPos, position, out hit, 1 << obstacleLayer))
        {
            if (hit.transform.gameObject.name == obstacleName)
            {
                position = hit.point;
            }
        }
        camera.transform.position = position;
        camera.transform.rotation = rotation;
    }
View Code
原文地址:https://www.cnblogs.com/luguoshuai/p/7491852.html