【问题标题】:Need help getting camera to follow instantiated GameObject (player)需要帮助让相机跟随实例化的游戏对象(玩家)
【发布时间】: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 中分配目标。你在代码中看不到。

标签: c# unity3d


【解决方案1】:

根据您的 cmets,这是您的问题。

当您拖动预制件时,您指定了预制件的变换。播放器实际上是预制件的一个实例(克隆),而不是预制件本身。

您需要创建新对象并将其变换分配给它。

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

【讨论】:

  • 这似乎也没有解决它。只是在游戏中和编辑器相机中出现黑屏仍然不会随着玩家移动。
  • 那个脚本是附在相机上的吗?
  • 是的。似乎这个脚本导致相机与玩家对象一起下降到地下。之后它就停在那里
  • Nvm。解决了。忘记将新的游戏对象添加到全局范围,所以它不会更新它 xD 非常感谢 m8!你让我免于遭受很多挫折!
  • 介意我在最后一件事上请你帮忙吗?似乎 Unity 并不喜欢多台摄像机。就像其他玩家每次更新都会看到他的相机在玩家之间跳跃一样。有没有简单的方法来解决这个问题?
猜你喜欢
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2014-11-30
  • 1970-01-01
  • 2015-07-30
  • 2021-08-02
  • 1970-01-01
  • 2022-01-14
相关资源
最近更新 更多