Unity+PUN: "Instantiate" 有时会创建太多游戏对象

Unity+PUN: "Instantiate" sometimes creates too many GameObjects

我正在开发一款赛车游戏,目前在加载赛道场景后实例化赛车时遇到问题。

我有一个本地 "RaceGuard" 基本上调用了这个方法:

public void CreateLocalPlayer()
{
    while (!PhotonNetwork.IsConnectedAndReady)
    {

    }

    GameObject Player = PhotonNetwork.Instantiate(prefabName, Vector3.zero, Quaternion.identity);

    PhotonView pV = Player.GetComponent<PhotonView>();

    Player.transform.position = raceGuard.singleRaceStart1To7[pV.OwnerActorNr - 1].position;
    Player.transform.rotation = raceGuard.singleRaceStart1To7[pV.OwnerActorNr - 1].rotation;
}

现在,我在 Unity 中构建游戏并 运行 它和 运行 游戏的第二个实例。 我在测试这个的时候,一般会遇到两种情况:

1] 一切如期进行:两场比赛的双方球员都在正确的位置。

2]一个游戏只有一辆车[本地玩家],而另一个游戏在场景中有3辆车[本地玩家,然后两个远程玩家在同一地点产生]。

我很难找到这个问题的原因,也很难调试,因为我只能单步执行 Unity 实例中的代码,但没有任何看起来可疑或抛出错误的地方。 包括一些打印件,我可以看到 "CarCreated" 方法在故障情况下被调用了 3 次,但我不知道为什么。

也许我犯了一些非常基本的错误。因为这是我第一次创建多人游戏,所以我看了教程,用谷歌搜索等,但没有找到任何能描述我的问题的东西。

我要确保的第一件事是,场景中的 "RaceGuard" 脚本实例不会超过 1 个。不过我不认为这是你的问题。

我认为最有可能的问题是由于场景加载,您发布的方法被执行了多次。这是另一个有类似问题的人:https://forum.photonengine.com/discussion/13198/new-players-spawning-twice-on-existing-players

因此请确保不要多次加载场景。

希望这些建议之一能解决您的问题。如果没有关于项目设置的更多信息,这可能很难调试。