美文网首页
Unity——#13 第三人称视角_2

Unity——#13 第三人称视角_2

作者: MisakiMel | 来源:发表于2019-07-15 08:28 被阅读0次

  如上节所说,这节将会解决旋转视角同时旋转模型的问题,还有制造出一种相机追赶模型的效果。
  第一个问题不难,只需一个临时变量就能迎刃而解,在每一帧旋转相机前(即Update()每刷新一次),我们可以用这个临时变量来暂存当前模型的欧拉角,在相机旋转完后,再把暂存的欧拉角再返还给当前模型。每一帧都如此,那么整个旋转相机的时间段里,模型的欧拉角都不会被改变。当然我们首先要获取模型:

    private GameObject model;
    void Awake () {
        ...
        model = playerHandle.GetComponent<ActorController>().model;     //获取模型
        ...
    }
    void Update () {
        Vector3 tempModelEuler = model.transform.eulerAngles;

        playerHandle.transform.Rotate (Vector3.up, pi.CRight * horizontalSpeed * Time.deltaTime);
        tempEuler = Mathf.Clamp (tempEuler, -20, 30);
        tempEuler += pi.CUp * -verticalSpeed * Time.deltaTime;
        cameraHandle.transform.localEulerAngles = new Vector3 (tempEuler, 0, 0);

        model.transform.eulerAngles = tempModelEuler;
}

  现在操纵相机,角色不为所动:



  一般的Arpg的相机都会有追赶的效果,就是人物先动,相机紧跟其后的感觉,我们来试试看怎么实现这种效果。
  我们可以create a empty来代替当前相机的层级关系,我们把这个empty命名为cameraPos,而Camera在层级关系的哪里都可以,因为我们想要的是想用cameraPos实现刚才Camera所做的,而Camera要做的仅仅是获取cameraPos的位置然后平滑移动过去就行了。


目前各GameObject的层级关系
  然后把我们刚才在Camera上写好的组件(CameraController.cs)给移除,放在cameraPos上:
Camera
cameraPos

  现在我们要做的是Camera去追赶CameraPos,我想这个要在cameraPos的CameraContorller.cs里完成,所以要在里面新增点东西。
  首先就要获得Camera这个GameObject。

    private GameObject _camera;
void Awake () {
        ...
        _camera = Camera.main.gameObject;       //获取主要摄像头(Tag为MainCamera)
        ...
    }

  要注意的是,要把你想要给_camera的相机的Tag标明为MainCamera,不然_camera会获取不到。

MainCamera
  其次在每次(每一帧)完成对cameraPos的旋转后,Camera都要获得cameraPos的位置和欧拉角并且跟上它。
    private Vector3 cameraDampVelocity;
    public float cameraDampValue = 0.3f;
    void Update () {
        Vector3 tempModelEuler = model.transform.eulerAngles;

        playerHandle.transform.Rotate (Vector3.up, pi.CRight * horizontalSpeed * Time.deltaTime);
        //cameraHandle.transform.Rotate (Vector3.right, pi.CUp * verticalSpeed * Time.deltaTime);
        tempEuler = Mathf.Clamp (tempEuler, -20, 30);
        tempEuler += pi.CUp * -verticalSpeed * Time.deltaTime;
        cameraHandle.transform.localEulerAngles = new Vector3 (tempEuler, 0, 0);

        model.transform.eulerAngles = tempModelEuler;

        //camera.transform.position = transform.position; //对position做平滑处理
        camera.transform.position = Vector3.SmoothDamp(camera.transform.position, transform.position,ref cameraDampVelocity,cameraDampValue);
        camera.transform.eulerAngles = transform.eulerAngles;
    }

  另外,我对Camera追赶cameraPos位置这个过程做了平滑处理Vector3.SmoothDamp()cameraDampValue表示达到目标值大约需要的时间,我设0.3只是为了让效果明显一点(如图),其实0.1效果的最好的。

相关文章

  • Unity——#13 第三人称视角_2

      如上节所说,这节将会解决旋转视角同时旋转模型的问题,还有制造出一种相机追赶模型的效果。  第一个问题不难,只需...

  • 故事中的第三人称视角

    最常见的视角是第三人称视角,用过去时描述人物的行为动作。它分为第三人称有限视角和第三人称全知全能视角。 一,第三人...

  • 10主角视角(第一人称视角与第三人称视角)

    第三人称视角### 第一人称视角###

  • ZZ写作视角

    视角分六种——第一人称、第二人称、第三人称、限制性第三人称、上帝视角、pov视角。ps:有人把上帝视角和第三视角并...

  • 取标题时弄清第三人称视角

    取标题时弄清第三人称视角 第三人称视角是上帝视角,是不带任何感情色彩和主观意识的,是纯粹的局外人旁观者。 标题里,...

  • 小说结构·下篇

    【寻找写作的真相】目录 人称视角 在小说创作中,人称视角有第一人称,第三人称。最常见的视角是第三人称,这也是读者最...

  • Mac M1芯最新Swift5.1 与Unity3D交互

    开发环境:1.Xcode Version 13.2.1 (13C100)2.Unity 2019.3.13f13....

  • 上帝视角

    上帝视角乃是叙述视角中,第三人称视角的别称。第三人称叙述者如同无所不知的上帝能够以非现实的方式不受限制的描述任何事...

  • Unity——#12 第三人称视角

      在PC游戏里,第三人称视角的操纵是通过鼠标;而在主机上,则是通过右摇杆。本节实现的是类似于右摇杆操纵的第三视角...

  • 小说的人称

    小说最常见的有两种人称:第一人称和第三人称。 第三人称是属于全知视角,也是上帝视角。我们在读小说的时候,我们可以看...

网友评论

      本文标题:Unity——#13 第三人称视角_2

      本文链接:https://www.haomeiwen.com/subject/kuobkctx.html