Unity 相机固定角度平移至指定物体

前言:这个也是我得一个朋友怎么做,朋友跟我说的方法,然后我就想记录下来,当个学习。

需求:相机固定视角(相机的高是15、x轴选转30、y轴旋转15),地图上有很多物体,点击后相机移动到指定物体(物体居中在屏幕中间)。

视频效果:

Unity 相机固定角度平移至指定物体_哔哩哔哩_bilibili

看到这个之后就想到了用三角函数做,下面直接上代码,就不啰嗦了。

    public Camera mCamera;

    private Vector3 mTargetPos;

    private float mAngleX = 30;
    private float mAngleY = 15;
    void Start()
    {
        mAngleX = mCamera.transform.eulerAngles.x;
        mAngleY = mCamera.transform.eulerAngles.y;
        mTargetPos = mCamera.transform.position; 
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = mCamera.ScreenPointToRay(Input.mousePosition);
            RaycastHit hitInfo;
            if (Physics.Raycast(ray, out hitInfo))
            {
                if (hitInfo.collider.CompareTag("Player"))
                {
                    //根据已知条件 求出 z 轴方向移动距离,根据x轴角度
                    float x_duiBian = mCamera.transform.position.y * Mathf.Tan((90 - mAngleX) * Mathf.Deg2Rad);
                    //抵消 y轴旋转造成的误差
                    x_duiBian *= Mathf.Cos(mAngleY * Mathf.Deg2Rad);
                    //根据已知条件 求出 x 轴方向移动距离,根据y轴角度
                    float y_duiBian = x_duiBian * Mathf.Tan(mAngleY * Mathf.Deg2Rad);
                    //根据上面计算的位置 赋值
                    mTargetPos.x = hitInfo.collider.transform.position.x - y_duiBian;
                    mTargetPos.z = hitInfo.collider.transform.position.z - (x_duiBian);

               
                }
            }
        }
        mCamera.transform.position = Vector3.MoveTowards(mCamera.transform.position, mTargetPos, 10f * Time.deltaTime);
    }

这也是临时想到的解决方案,办法应该有很多种,这也是我发出来的原因。欢迎各位大佬交流,互相学习。

猜你喜欢

转载自blog.csdn.net/qq_23879197/article/details/126165397