你如何在 unity 2d 中将相机连接到生成的玩家?

How do you attach a camera to a spawned player in unity 2d?

所以我正在使用 unity 2d 开发一个简单的平台游戏。我创建了一个关卡生成器,可以在关卡开始时生成随机地形、敌人和玩家角色。我想让相机跟随玩家角色。我尝试使用 SetParent() 方法将玩家角色设置为主相机的子角色。我收到此错误消息:“设置驻留在预制资产中的转换的父级被禁用以防止数据损坏。”有办法解决这个问题吗?或者有其他方法可以让我的主摄像头跟随生成的玩家角色吗?

这是我的关卡生成器的玩家角色生成药水:

                if (x == 1)
                    {
                        Instantiate(player, new Vector3Int(x, y + 2, 0), Quaternion.identity);
                        player.transform.SetParent(MainCamera);
                    }

如有任何帮助,我们将不胜感激。谢谢!!

尝试直接将父项指定为预制件的实例,然后将相机的局部变换归零:

GameObject myPlayer = Instantiate(player, new Vector3Int(x, y + 2, 0), Quaternion.identity); //GameObject can be whatever object type player is
myPlayer.transform.parent = MainCamera.transform;
MainCamera.transform.localPosition = Vector3.zero;

预制件没有父级,这就是您遇到该问题的原因。

正在修改player正在修改预制件。但是,您的意思是修改从该预制件制作的实例。您需要获取 Instantiate 的结果并对其进行修改。

您可能还想保存它供以后参考,因此为此添加一个字段是合适的。

一共:

private GameObject playerInstance; 

// ...  

playerInstance = Instantiate(player, new Vector3Int(x, y + 2, 0), Quaternion.identity); 
playerInstance.transform.SetParent(MainCamera.transform);

或者,如果您想让相机成为玩家的子项,以便它自动跟随玩家。如果这样做,您可能还想将 SetParentworldPositionStays 参数设置为 false,以便在设置父级时相机保持其本地位置。

private GameObject playerInstance; 

// ...  

playerInstance = Instantiate(player, new Vector3Int(x, y + 2, 0), Quaternion.identity); 
mainCamera.transform.SetParent(playerInstance.transform, false);