在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);
它返回玩家的起始位置,但在玩家四处移动时不会更新。它保持不变。因此,这显然是相机无法跟随播放器的原因。
问题是:为什么玩家的位置不会更新?或者很可能是这样,但脚本没有看到它。我做错了什么?
答案 0 :(得分:1)
根据您的评论,这是您的问题。
拖动预制件时,您可以指定预制件的变换。玩家实际上是预制件(克隆)的一个实例,但不是预制件本身。
您需要创建新对象并将其转换为它。
GameObject player = (GameObject)Network.Instantiate(playerPrefab, Vector3.up * 5, Quaternion.identity, 0);
target = player.transform;
offset = transform.position - target.position;