• 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
  • 相关阅读:
    java_list<String> string[]拼接json
    java_method_删除事务回滚
    java_jdk_JDK版本切换批处理脚本
    java_js_检查是否全为数字
    java_method_stringUtils
    java_method_下拉框成json
    java_method_下载导入模版
    java_js_json_日期格式化
    java_js从字符串中截取数字
    gulp+tp5配置
  • 原文地址:https://www.cnblogs.com/luguoshuai/p/7491852.html
Copyright © 2020-2023  润新知