美文网首页
Unity 如何让相机平滑跟随角色

Unity 如何让相机平滑跟随角色

作者: 遮住眼睛的草纸 | 来源:发表于2019-07-23 16:35 被阅读0次

    1.关于相机

    1.相机跟随
    第一步:找一个舒服的视角,将相机视野对准视角 (view to algin)
    第二步:相机添加脚本
    第三步:利用相机与玩家位置的偏移量

    offset = transform.position - player_transform.position
    

    第四步:将相机位置设置为玩家位置加上offset

    transform.position  = player_transform.position + offset
    

    注意点:四步完成可以简单实现相机跟随
    第一,遇到死角遮挡。第二,某些时刻滑动会有卡顿,用户体验不好
    有以下的解决方式
    首先,我们看一张图

    分析图.png
    • 我们模拟出这么一种情况,玩家走到墙角,如图所示,被墙挡住摄像机,那我们就看不见我们的角色了。
    • 我们的解决方案就是,利用摄像机向角色发射射线,再利用角色的垂直方向,得出相机需要运动的方向,同时在运动方向截取3个点,在3个点同时发射射线,判断是不是射线与角色产生碰撞。如果射线并没有与角色碰撞,而是与其他物体碰撞,那么可以判断为,该摄像机位置被遮挡,我们就将摄像机按顺序往后移动。最坏的结果就是摄像机移动角色垂直方向,如图中摄像机2的位置。这样就可以在死角也能够看到角色。

    技术要点

    1.均匀取射线点,用到以下方法

    Vector3.Lerp();
    

    2.发射射线

    RayCastHit hitInfo;
    if (Physics.RayCast(...,...,out hitInfo)){
        //do some thing
    }
    

    完成这些后还不够,因为移动相机,会卡顿,体验极其不友好,所以这里需要用到部分插值运算。
    以下是缓动代码部分

            transform.position = Vector3.Lerp(transform.position, newPos, Time.deltaTime * moveSpeed);
            Quaternion oldRotation = transform.rotation;
            transform.LookAt(player_transform.position);
            transform.rotation = Quaternion.Lerp(oldRotation, transform.rotation, Time.deltaTime * rotateSpeed);
    

    至此,摄像机脚本初步完成,有些地方,根据自己需要自行修改。

    相关文章

      网友评论

          本文标题:Unity 如何让相机平滑跟随角色

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