常见的移动跟随代码

摄像机跟随两个物体中心点移动


    private void Move()
    {
        FindNextZoomSize();

        transform.position = Vector3.SmoothDamp(transform.position, findNextPosition, ref currentVelocity, smoothTime);

    }
复制代码
   private void FinidNextPosition()
    {
        int num = 0;

        Vector3 tempPosition = new Vector3();
        //遍历所有物体,过滤掉未激活的坦克
        for (int i = 0; i < targets.Length; i++)
        {
            //然后存储每个坦克的位置
            if (!targets[i].gameObject.activeSelf)
            {
                continue;
            }
            tempPosition += targets[i].position;
            num++;
        }
        //除以坦克的数量,返回多个坦克的中心位置
        if (num > 0)
        {
            tempPosition /= num;
        }
        tempPosition.y = transform.position.y;

        findNextPosition = tempPosition;
    }
复制代码

摄像机随着两个物体的移动,放大或者缩小镜头


    private void Zoom()
    {
        FinidNextPosition();

        camera.orthographicSize = Mathf.SmoothDamp(camera.orthographicSize, findNextSize,ref currentZoomVelocity,smoothTime);
    }
复制代码
   private void FindNextZoomSize()
    {
        //根据中心点和坦克的距离 + 固定的边距 ,就是摄像机的size高度

        //把当前中心点世界坐标转换成本地坐标,用于后面的计算其他坦克对于这个中心点的偏移量
        Vector3 centerPosition = transform.InverseTransformPoint(findNextPosition);

        float size = 0;

        for (int i = 0; i < targets.Length; i++)
        {
            if (!targets[i].gameObject.activeSelf)
            {
                continue;
            }

            //返回坦克对于中心的本地坐标
            Vector3 targetPosition = transform.InverseTransformPoint(targets[i].position);

            //用坦克的本地坐标 - 中心点的本地坐标,返回偏移量
            Vector3 distancePosition = targetPosition - centerPosition;

            //返回最大的size, size 和 偏移量的y,y就是他们的间距
            size = Mathf.Max(size, Mathf.Abs(distancePosition.y));

            //返回最大的size, 偏移量的x是他们宽的间距,宽 / 宽高比例倍数,就是他们的高,返回倍数高和正常的size哪个大
            size = Mathf.Max(size, Mathf.Abs(distancePosition.x / camera.aspect));

        }

        //加入固定边框
        size += bordarWidth;

        //过滤地狱最小size的值
        size = Mathf.Max(size, minWidth);

        findNextSize = size;
    }
复制代码

转载于:https://juejin.im/post/5b3ac84b6fb9a024b92e0d1e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值