相機跟隨其實就是讓 Camera 跟 player 保持一定的距離,當(dāng) player 移動時距離不變,則視角就是跟著移動。
單個主角:
對于單個主角,只需要設(shè)置相機與主角相對距離即可。
public GameObject Player; //主角
private Vector3 offset ; //相對距離
void Start () {
offset = transform.position - Player.transform.position ; //獲取初始相對距離
}
void Update () {
this.transform.position = Player.transform.position+ offset;//相對距離保持不變
}
兩個主角:
對于兩個主角的情況,除了需要設(shè)置相對距離外,還應(yīng)該設(shè)置 Camera 的 size。當(dāng)兩主角之間的距離變大時,相機視角也應(yīng)該相應(yīng)增大,當(dāng)兩主角靠近時,視角應(yīng)該減小。一般取兩主角的中心點作為視野點,同時注意限制 Camera 的最小 size 和最大 size ,否則效果會不當(dāng)。
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;
}
這里有個細節(jié),跟隨兩個物體時我們沒有考慮當(dāng)一個物體消失時的情況,例如一個玩家被消滅,此時會出現(xiàn)空指針異常。這里應(yīng)該根據(jù)需要自己做一定的修改。需求不同實現(xiàn)也是不同,如果是兩方對戰(zhàn),此時游戲結(jié)束,相機可以不跟隨也可以給獲勝玩家一個特寫。如果是雙人合作,那么可以將鏡頭跟隨剩余的玩家。
不僅僅是相機的跟隨,一個物體跟隨另一個物體的原理都是一樣的,都可以利用設(shè)置相對位置的方式。例如主角身上有 buff 的特效,跟蹤導(dǎo)彈等等。具體的實現(xiàn)方式需要根據(jù)具體的要求。