NetworkServer.Spawn() 未使用 Mirror 和 Unity 在客户端的正确位置生成对象

问题描述 投票:0回答:1

我正在统一使用镜像制作纸牌游戏,我遇到了 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;
    }

此问题仅发生在客户端,在主机上,对象生成工作正常。如果有人可以帮助我,谢谢!

c# unity-game-engine game-development multiplayer mirror
1个回答
0
投票

这里有同样的问题但已解决。就我而言,问题的原因是我在生成该对象后设置了一个父对象,而该父对象是客户端的非网络对象。解决方案是将此父对象设置为网络对象,并将其位置与网络变换同步,或将其本地位置重置为零。

© www.soinside.com 2019 - 2024. All rights reserved.