2015-12-02 77 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