我正在统一使用镜像制作纸牌游戏,我遇到了 NetworkServer.Spawn() 的问题,它会在我实例化它的相同位置和旋转处生成 GameObject。然而我看到的是 NetworkServer.Spawn() 正在将所有对象发送到 0,0,0。尽管我在自定义位置实例化对象,如下面的代码所示:
public override void OnStartServer()
{
base.OnStartServer();
cards = GenerateDeckInitial();
}
public override void OnStartClient()
{
Debug.Log("Cards CLIENT: " + cards.Count());
}
public SyncList<GameObject> GenerateDeckInitial() {
SyncList<GameObject> cardsList = new SyncList<GameObject>();
GameObject parentPosition = GameObject.Find("parentActions");
foreach (var prefab in PrefabsActionCards)
{
Type ScriptCard = Type.GetType(prefab.name + ",Assembly-CSharp");
var script = prefab.GetComponent(ScriptCard);
var quantidade = (int)script.GetType().GetField("Quantidade").GetValue(script);
for (int j = 0; j < quantidade; j++)
{
GameObject card = Instantiate(prefab, gameObject.transform.position ,gameObject.transform.rotation, gameObject.transform);
NetworkServer.Spawn(card);
card.name = prefab.name.Replace("(Clone)", "");
cardsList.Add(card);
}
}
//ShuffleList(cardsList);
//OrganizeCardHierarchy(cardsList, parentPosition, gameObject);
return cardsList;
}
此问题仅发生在客户端,在主机上,对象生成工作正常。如果有人可以帮助我,谢谢!
这里有同样的问题但已解决。就我而言,问题的原因是我在生成该对象后设置了一个父对象,而该父对象是客户端的非网络对象。解决方案是将此父对象设置为网络对象,并将其位置与网络变换同步,或将其本地位置重置为零。