C# 如何使用光子在unity中的固定位置生成多人游戏用户?

C# 如何使用光子在unity中的固定位置生成多人游戏用户?,c#,unity3d,unity5,photon,C#,Unity3d,Unity5,Photon,我一直在使用光子统一网络插件进行多人游戏。在下面的角色实例化代码中,我希望生成加入的玩家,在固定点生成,然后随机生成。我在这方面是新手,我试图通过在按钮点击事件中提供固定的游戏对象位置来编辑它,但未能做到这一点。这是代码- using UnityEngine; public class CharacterInstantiation : OnJoinedInstantiate { public delegate void OnCharacterInstantiated(GameObject

我一直在使用光子统一网络插件进行多人游戏。在下面的角色实例化代码中,我希望生成加入的玩家,在固定点生成,然后随机生成。我在这方面是新手,我试图通过在按钮点击事件中提供固定的游戏对象位置来编辑它,但未能做到这一点。这是代码-

using UnityEngine;
public class CharacterInstantiation : OnJoinedInstantiate {
    public delegate void OnCharacterInstantiated(GameObject character);
    public static event OnCharacterInstantiated CharacterInstantiated;
    public new void OnJoinedRoom() {
        if (this.PrefabsToInstantiate != null) {
            GameObject o = PrefabsToInstantiate[(PhotonNetwork.player.ID - 1) % 4];
            //Debug.Log("Instantiating: " + o.name);
            Vector3 spawnPos = Vector3.zero;
            if (this.SpawnPosition != null) {
                spawnPos = this.SpawnPosition.position;
            }
            Vector3 random = Random.insideUnitSphere;
            random = this.PositionOffset * random.normalized;
            spawnPos += random;
            spawnPos.y = 0;
            Camera.main.transform.position += spawnPos;

            o = PhotonNetwork.Instantiate(o.name, spawnPos, Quaternion.identity, 0);
            if (CharacterInstantiated != null) {
                CharacterInstantiated(o);
            }
        }
    }
}
此代码在插件的测试场景中。只想繁殖加入的玩家都是固定点,比如繁殖点[0],繁殖点[1]等等。提前谢谢你的帮助

下面是插件中预置实例化的代码-

 public class OnJoinedInstantiate : MonoBehaviour
{
   public Transform SpawnPosition;
   public float PositionOffset = 2.0f;
   public GameObject[] PrefabsToInstantiate;  
public void OnJoinedRoom()
{
    if (this.PrefabsToInstantiate != null)
    {
        foreach (GameObject o in this.PrefabsToInstantiate)
        {
            Debug.Log("Instantiating: " + o.name);

            Vector3 spawnPos = Vector3.up;
            if (this.SpawnPosition != null)
            {
                spawnPos = this.SpawnPosition.position;
            }

            Vector3 random = Random.insideUnitSphere;
            random.y = 0;
            random = random.normalized;
            Vector3 itempos = spawnPos + this.PositionOffset * random;

            PhotonNetwork.Instantiate(o.name, itempos, Quaternion.identity, 0);
        }
    }
  }
}

如果要创建不同的繁殖点,应将脚本更改为:

using UnityEngine;

public class CharacterInstantiation : OnJoinedInstantiate {

    public delegate void OnCharacterInstantiated(GameObject character);

    public static event OnCharacterInstantiated CharacterInstantiated;
    public int counter = 0;
    public Vector3[] spawnPositions;
    public new void OnJoinedRoom() {
        if (this.PrefabsToInstantiate != null) {
            GameObject o = PrefabsToInstantiate[(PhotonNetwork.player.ID - 1) % 4];
            //Debug.Log("Instantiating: " + o.name);
            Vector3 spawnPos = Vector3.zero;
            if (this.SpawnPosition != null) {
                spawnPos = spawnPositions[counter];
            }
            Vector3 random = Random.insideUnitSphere;
            random = this.PositionOffset * random.normalized;
            spawnPos += random;
            spawnPos.y = 0;
            Camera.main.transform.position += spawnPos;

            o = PhotonNetwork.Instantiate(o.name, spawnPos, Quaternion.identity, 0);
            if (CharacterInstantiated != null) {
                CharacterInstantiated(o);
                counter++;
            }
        }
    }
}

您只需要为
spawnPositions

指定值,您不能编辑它是什么意思?你不能打开脚本?是的,我可以编辑脚本,我已经更正了问题:)当你实例化对象时,你可以通过这个职位。在你的情况下,用
新向量3(0,0,0)
或任何生成点替换
spawnPos
。你必须改变你的第一个脚本,而不是第二个,那么它应该可以工作。在第一个脚本中,所有加入的玩家在同一位置用偏移量实例化。实例化对象位于列表player.ID中。当我应用该方法时,我只能更改每个玩家生成的位置。感谢您的帮助,我尝试了,但加入的玩家仍在与第一个玩家相同的位置实例化。您是否为我的
生成位置
添加了至少两个不同的点?是的,我添加了3个生成点第一个启动服务器的用户的位置正确,但其他用户的位置与第一个相同。您是否可以添加断点并测试位置是否发生了更改。或者,即使曾经调用过OnJoinedRoom()。这可能需要更长的时间,因此为了清晰起见,如果可以的话,请在新项目中导入光子语音资源,然后转到演示语音场景,自己可以看到它。|我会为你的帮助标出答案,谢谢:)|如果你也这样做,我会等你的