2015-12-02 75 views
1

在Unity3D中處理多人遊戲。和其他許多人一樣,我有一些嚴重的問題讓相機跟隨玩家。在普通遊戲中,您只需將相機對象作爲播放器對象的子對象,以使其跟隨播放器。在多人遊戲中,這不是玩家需要產卵的選項(預製)。需要幫助讓相機跟隨實例化的遊戲對象(玩家)

因此,您需要使用C#使相機跟隨使用播放器對象變換位置的播放器。這是我試過的:

public Transform target; 
public float smoothing = 5f; 

Vector3 offset; 

public GameObject playerPrefab; 

private void SpawnPlayer() 
{ 
    Network.Instantiate(playerPrefab, Vector3.up * 5, Quaternion.identity, 0); 
    offset = transform.position - target.position; 
} 

void LateUpdate() 
{ 
    Vector3 targetCamPos = target.position + offset; 
    transform.position = Vector3.Lerp(transform.position, targetCamPos, smoothing * Time.deltaTime); 
} 

Ofcourse我已經分配玩家預製的目標。所以當遊戲開始時,攝像頭的位置會變成玩家的位置。但之後,它拒絕跟隨玩家。它只是坐在那裏。

所以我已經開始與調試這樣的:

Debug.log(target.position); 

它返回玩家的起始位置,但作爲球員來回移動時沒有更新。它仍然是一樣的。這顯然是相機不會跟隨玩家的原因。

問題是:爲什麼玩家位置沒有得到更新?或者最有可能的,但腳本沒有看到它。我究竟做錯了什麼?

+0

我不確定,但你似乎通過Instantiate方法實例化播放器。但是目標沒有被賦予玩家的轉換。什麼是目標? – Everts

+0

@fafase通過將玩家預製向其拖動,可以在Unity內分配目標。你在代碼中看不到。 – icecub

回答

1

根據您的意見,這裏是你的問題。

當您拖動預製件時,您將指定預製件的轉換。玩家實際上是預製件(克隆)的一個實例,但不是預製件本身。

您需要創建新對象並將其轉換賦值給它。

GameObject player = (GameObject)Network.Instantiate(playerPrefab, Vector3.up * 5, Quaternion.identity, 0); 
target = player.transform; 
offset = transform.position - target.position; 
+0

這似乎並沒有解決它。只是在遊戲和編輯器相機內部出現空白屏幕仍然不會隨着播放器移動。 – icecub

+0

該腳本是否附加在相機上? – Everts

+0

是的。看起來這個腳本正在使相機在玩家對象下面落到地面下。之後,它只是在那裏 – icecub