Beispiel #1
0
    //同步敌人生成: 实例化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);
        }
    }
Beispiel #2
0
    //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;
    }
Beispiel #3
0
    //同步敌人的生成
    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);
    }