Unity + PUN:“实例化”有时会创建太多游戏对象

时间:2020-05-20 13:05:17

标签: unity3d instantiation photon

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

我有一个本地的“ 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次,但我不知道为什么。

也许我在做一些非常基本的错误。由于这是我第一次创建多人游戏,因此我观看了教程,用Google搜索等,但没有发现任何描述我问题的信息。

1 个答案:

答案 0 :(得分:0)

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

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

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

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

相关问题