//同步敌人生成: 实例化Master客户端发来的Enermy List void SyncEnermySpawnResponse(Dictionary <byte, object> parameters) { Debug.Log("SyncEnermySpawnResponse==="); object o = null; parameters.TryGetValue((byte)ParameterCode.EnermyModel, out o); EnermyModel model = JsonMapper.ToObject <EnermyModel>(o.ToString()); foreach (EnermyProperty enermy in model.list) { GameObject go = GameObject.Instantiate(Resources.Load("Enermy/" + enermy.prefabName), enermy.position.ToVector3(), Quaternion.identity) as GameObject; if (go.GetComponent <Enermy>()) { go.GetComponent <Enermy>().GUID = enermy.guid; } if (go.GetComponent <Boss>()) { go.GetComponent <Boss>().GUID = enermy.guid; } Debug.Log("敌人 " + enermy.guid + "将要进入集合"); //非master客户端在此处将敌人加入Dict enermyGoDict.Add(enermy.guid, go); } }
//level表示生成哪个关卡的怪物,不同关卡的怪物活动的范围不一样 private IEnumerator SpawnEnermy(int level) { Debug.Log("level = " + level); yield return(new WaitForSeconds(0.1f)); //使用预制体生成怪物. List <EnermyProperty> enermyList = new List <EnermyProperty>(); int index = -1; foreach (GameObject go in monsterPrefebArr) { index++; string GUID = Guid.NewGuid().ToString(); EnermyProperty enermyProperty = new EnermyProperty() { guid = GUID, prefabName = go.name, position = new Vector3Obj(posArray[index].transform.position) }; enermyList.Add(enermyProperty); Vector3 localPosition = posArray[index].transform.position; Vector3 worldPosition = transform.TransformDirection(localPosition); GameObject enermyGo = GameObject.Instantiate(go, posArray[index].transform.position, Quaternion.identity) as GameObject; if (enermyGo.GetComponent <Enermy>()) { enermyGo.GetComponent <Enermy>().GUID = GUID; enermyGo.GetComponent <Enermy>().level = level; } else if (enermyGo.GetComponent <Boss>()) { enermyGo.GetComponent <Boss>().GUID = GUID; } //master客户端在此处将敌人加入Dict EnermyController.Instance.EnermyGoDict.Add(GUID, enermyGo); } //如果是组队,还要同步到其它客户端 if (TeamInviteController.Instance.isTeam) { EnermyModel model = new EnermyModel() { list = enermyList }; enermyController.SyncEnermySpawnRequest(model); } isSpawned = true; }
//同步敌人的生成 public void SyncEnermySpawnRequest(EnermyModel model) { Dictionary <byte, object> parameters = new Dictionary <byte, object>(); parameters.Add((byte)ParameterCode.RoleId, PhotonEngine.Instance.role.ID); parameters.Add((byte)ParameterCode.MasterRoleID, PhotonEngine.Instance.masterid); //memberIndex将弃用 parameters.Add((byte)ParameterCode.MemberIndex, PhotonEngine.Instance.memeberindex); parameters.Add((byte)ParameterCode.ChannelID, PhotonEngine.Instance.ChannelId); string json = JsonMapper.ToJson(model); parameters.Add((byte)ParameterCode.EnermyModel, json); parameters.Add((byte)ParameterCode.SubCode, SubCode.SyncEnermySpawn); PhotonEngine.Instance.SendRequest(OperationCode.SyncEnermy, parameters); }