接上一篇““角色人物需要进行转动方向”的功能实现。”

在游戏中总会遇到人物角色通过键盘WASD这几个键进行转动方向的功能以及通过鼠标进行镜头旋转观察角色的功能。

需求一:角色人物需要进行转动方向。

需求二:通过鼠标进行镜头旋转观察角色。

本章节先讲“通过鼠标进行镜头旋转观察角色”的功能实现。

场景当中有一个cube,这个就是用来观察的点。如图:

unity镜头旋转与角色转向(二)_功能实现

代码的思路是:相机去看这个cube。cube在角色模型的前方,所以从后方看就会看到角色模型,而实际看到的物体是cube。

只需要将cube的meshrender关闭就无法看到它了,但实际cube又是存在的一个gameobject。

unity镜头旋转与角色转向(二)_功能实现_02

所以在代码中名为:headpoint。

 Thirdcamera.LookAt(headpoint.transform);这句就是相机看向cube物体。


实现的功能就是,当按下鼠标右键时,拖动鼠标可以看到相机绕这这个cube进行旋转。

该方法放在update里实时调用。

代码中的方法如下:

 #region//相机旋转
        if (Input.GetMouseButton(1))
        {
          

            mouse_y += Input.GetAxis("Mouse X") * 1f * rotSpeed;
            mouse_x -= Input.GetAxis("Mouse Y") * 1f * rotSpeed;
            mouse_x = Mathf.Clamp(mouse_x, -89, 89);
            mouse_x = ClampAngle(mouse_x);
            mouse_y = ClampAngle(mouse_y);

            mouse_newrotation = Quaternion.Euler(mouse_x, mouse_y, 0);

            Thirdcamera.rotation = mouse_newrotation;//相机角度等于鼠标最终 角度

            Vector3 direction = mouse_newrotation * Vector3.forward;

            Thirdcamera.position = headpoint.transform.position - direction * followdistance;

            Thirdcamera.LookAt(headpoint.transform);

#endregion
           

    static float ClampAngle(float angle)
    {
        if (angle < -180)
            angle += 360;
        if (angle > 180)
            angle -= 360;
        return angle;
    }

代码中的rotSpeed变量是旋转速度。

 mouse_x = Mathf.Clamp(mouse_x, -89, 89);是对鼠标的视角进行了限定。

因为鼠标在屏幕滑动只能是X  Y两个轴,所以只需要对X Y进行处理就可以了。

 mouse_newrotation = Quaternion.Euler(mouse_x, mouse_y, 0);

Thirdcamera.rotation = mouse_newrotation;//相机角度等于鼠标最终 角度

然后为了让相机的方向永远看向鼠标指向的前方,所以把direction加上方向。

 Vector3 direction = mouse_newrotation * Vector3.forward;

下面一句是为了让相机与cube之间产生距离,距离就是跟随物体的距离:followdistance。

Thirdcamera.position = headpoint.transform.position - direction * followdistance;