【发布时间】:2016-03-06 18:00:22
【问题描述】:
在 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);
它返回玩家的起始位置,但不会随着玩家的移动而更新。它保持不变。所以这显然是相机不会跟随玩家的原因。
问题是:为什么不更新玩家位置?或者很可能确实如此,但脚本没有看到它。我做错了什么?
【问题讨论】:
-
我不确定,但您似乎通过 Instantiate 方法实例化播放器。但是目标没有分配玩家的变换。什么是目标?
-
@fafase 通过将播放器预制件拖向它,在 Unity 中分配目标。你在代码中看不到。