我正在为我和我的朋友正在开发的多人游戏编写c#代码,我遇到了以下错误:"Assets\Scripts\Multiplayer\Launcher.cs(99,43(:错误CS1503:参数2:无法从"UnityEngine.GameObject"转换为"UnityEngine.Transform">
我相信它在抱怨这些本应控制多人游戏大厅一部分的代码行:
public override void OnRoomListUpdate(List<RoomInfo> roomList)
{
foreach(Transform trans in roomListContent)
{
Destroy(trans.gameObject);
}
for(int i = 0; i < roomList.Count; i++)
{
Instantiate(RoomListItemPrefab, roomListContent).GetComponent<RoomListItem>().SetUp(roomList[i]);
}
}
public override void OnPlayerEnteredRoom(Player newPlayer)
{
Instantiate(PlayerListItemPrefab, playerListContent).GetComponent<PlayerListItem>().SetUp(newPlayer);
}
}
这样的错误消息只意味着您传递了错误类型的参数。在这种情况下,它很可能向Instantiate()
抱怨第二个arg,它应该是Transform
,但却是GameObject
。很难说,因为你甚至没有发布完整的源代码。playerListContent
是什么类型的?
正如gregee所说,很难确切地知道这里的问题,但很可能playerListContent
不是gameObject
类型。当您给定实例化两个参数时,它们必须适合特定的类型,这些类型将根据您给定的参数总数而变化。在这种情况下:
Instantiate(Object original, Transform parent)
这意味着playerListContent
也应该是实例化对象的父对象的转换。