相机跟随

作者: Baqun | 来源:发表于2016-10-31 09:22 被阅读123次

相机跟随其实就是让 Camera 跟 player 保持一定的距离,当 player 移动时距离不变,则视角就是跟着移动。
单个主角:
  对于单个主角,只需要设置相机与主角相对距离即可。

    public GameObject Player; //主角
    private Vector3 offset ;  //相对距离

    void Start () {
        offset = transform.position - Player.transform.position ; //获取初始相对距离
    }
    void Update () {
        this.transform.position = Player.transform.position+ offset;//相对距离保持不变
    }

两个主角:
  对于两个主角的情况,除了需要设置相对距离外,还应该设置 Camera 的 size。当两主角之间的距离变大时,相机视角也应该相应增大,当两主角靠近时,视角应该减小。一般取两主角的中心点作为视野点,同时注意限制 Camera 的最小 size 和最大 size ,否则效果会不当。

    public Transform Player1;
    public Transform Player2;

    public float minCameraSize = 10.0f; //相机最小 size
    public float maxCameraSize = 30.0f; //相机最大 size

    private Vector3 offset ;  //距离差值
    private Camera myCamera;  //相机

    void Start () {
        offset = transform.position - (Player1.position + Player2.position)/2 ; //取两物体的中点
        myCamera = this.GetComponent<Camera> ();

    }
    void Update () {
        this.transform.position = (Player1.position + Player2.position)/2+ offset; //与两物体的中点保持差值

        float size = Vector3.Distance (Player1.position, Player2.position) * 1.0f;//1.0f 为自定义比例
        if (size < minCameraSize) {
            size = minCameraSize;
        }
        if (size > maxCameraSize) {
            size = maxCameraSize;
        }
        myCamera.orthographicSize = size;
    }

这里有个细节,跟随两个物体时我们没有考虑当一个物体消失时的情况,例如一个玩家被消灭,此时会出现空指针异常。这里应该根据需要自己做一定的修改。需求不同实现也是不同,如果是两方对战,此时游戏结束,相机可以不跟随也可以给获胜玩家一个特写。如果是双人合作,那么可以将镜头跟随剩余的玩家。
  不仅仅是相机的跟随,一个物体跟随另一个物体的原理都是一样的,都可以利用设置相对位置的方式。例如主角身上有 buff 的特效,跟踪导弹等等。具体的实现方式需要根据具体的要求。

相关文章

网友评论

    本文标题:相机跟随

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