需要帮助让相机跟随实例化的GameObject(播放器)

时间:2015-12-02 13:14:30

标签: c# unity3d

在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);
}

当然,我已将玩家预制分配给目标。因此,当游戏开始时,摄像机位置将转换为玩家位置。但在那之后,它拒绝跟随玩家。它只是坐在那里。

所以我开始用以下方法调试:

Debug.log(target.position);

它返回玩家的起始位置,但在玩家四处移动时不会更新。它保持不变。因此,这显然是相机无法跟随播放器的原因。

问题是:为什么玩家的位置不会更新?或者很可能是这样,但脚本没有看到它。我做错了什么?

1 个答案:

答案 0 :(得分:1)

根据您的评论,这是您的问题。

拖动预制件时,您可以指定预制件的变换。玩家实际上是预制件(克隆)的一个实例,但不是预制件本身。

您需要创建新对象并将其转换为它。

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