Unity+PUN:"Instantiate "有时会创建过多的GameObjects。

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

我正在开发一款赛车游戏,目前面临的问题是加载赛道场景后实例化赛车。

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

也许我做了一些很基本的错误。由于这是我第一次创建多人游戏,我看了教程,上网搜索等等,但没有找到任何可以描述我的问题的方法。

unity3d instantiation photon
1个回答
0
投票

首先我会确保你的 "RaceGuard "脚本在场景中的实例不超过1个。但我不认为这是你的问题。

我认为最可能的问题是由于场景加载,你发布的方法被多次执行。这里还有一个人也有类似的问题。https:/forum.photonengine.comdiscussion13198new-players-spawning-two-on-existing-players.

所以请确保你不要多次加载你的场景。

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

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