Esempio n. 1
0
        public void InitSceneEvent(SceneEvents sceneEvents)
        {
            currSceneEvents = sceneEvents;

            currSceneEvents.ResultDelegates += (Result result) =>
            {
                switch (result.resultType)
                {
                case ResultType.AddRole:
                {
                    string roleId = (string)result.parameters[0];

                    int    count  = Convert.ToInt32(result.parameters[1]);
                    string roomId = (string)result.parameters[2];
                    string areaId = (string)result.parameters[3];

                    SceneController sceneController = GetScene(roomId);
                    Debug.Assert(sceneController != null, "找不到场景:" + roomId);

                    if (sceneController)
                    {
                        for (int i = 0; i < count; i++)
                        {
                            sceneController.AddRole(roleId, areaId);
                        }
                    }
                }
                break;

                case ResultType.SetObjState:
                {
                    string objId = (string)result.parameters[0];
                    int    state = Convert.ToInt32(result.parameters[1]);

                    SceneObjectController sceneObjectController = SceneObjectControllerManager.Instance.GetFirst(objId);
                    IInteractable         interactable          = sceneObjectController.GetComponent <IInteractable>();

//                        IInteractable interactable =  GetObjectComponent<IInteractable>(objId, roomId);
                    interactable.State = state;
                }
                break;

                case ResultType.GamePass:
                {
                    GameManager.Instance.GamePass();
                }
                break;

                default:
                    break;
                }
            };
        }
Esempio n. 2
0
        public async Task<SceneController> CreateScene(SceneData sceneData, int difficultyLevel = 1)
        {
            // 新建场景
            GameObject prefab = await AssetManager.LoadAssetAsync<GameObject>("Assets/Resources_moved/Prefabs/Scenes/" + sceneData.rawSceneId+".prefab");
            Debug.Assert(prefab != null, "找不到场景预制体:" + "Prefabs / Scenes / " + sceneData.rawSceneId);
            GameObject scene = Instantiate(prefab);

            // Debug.Log(" 预制体id " + sceneData.rawSceneId);
            scene.transform.parent = SceneRoot.transform;
            scene.transform.localPosition = GetOnlyScenePosition();
            scene.name = sceneData.sceneId;
            SceneController sceneController = scene.GetComponent<SceneController>();
            sceneController.SceneData = sceneData;

            {
                // 添加怪物 add by TangJian 2017/08/03 21:35:51
                {
                    foreach (var roleData in sceneData.roleDatas)
                    {
                        roleData.locationData.position = sceneController.GetAreaRandomPosition(roleData.locationData.areaId);
                        roleData.difficultyLevel = difficultyLevel;
                        sceneController.AddRole(roleData);
                    }
                }

                // 添加物品 add by TangJian 2017/08/22 19:45:51
                {
                    foreach (var itemData in sceneData.itemDatas)
                    {
                        var item = GameObjectManager.Instance.Create(itemData.id);
                        DropItemController dropItemController = item.GetComponent<DropItemController>();
                        itemData.position = sceneController.GetAreaRandomPosition("MonsterAreas");
                        sceneController.DropItemEnterWithLocalPosition(dropItemController, itemData.position);
                    }
                }

                // 添加放置物体 add by TangJian 2018/01/23 15:52:08
                {
                    foreach (var placementData in sceneData.PlacementDatas)
                    {
                        var placementObject = GameObjectManager.Instance.Create(placementData.id);
                        SceneObjectController sceneObjectController = placementObject.GetComponent<SceneObjectController>();
                        
                        PlacementController treasureBoxController = placementObject.GetComponent<PlacementController>();
                        treasureBoxController.Placementdata = placementData;

                        placementData.position = sceneController.GetAreaRandomPosition("MonsterAreas");
                        sceneController.PlacementEnterWithLocalPosition(sceneObjectController, placementData.position);

                        ScenePlacementComponent sceneComponent = treasureBoxController.gameObject.GetComponent<ScenePlacementComponent>();
                        if (sceneComponent != null)
                        {
                            sceneComponent.GridPos = placementObject.transform.localPosition;
                        }
                    }
                }

                // 设置门数据 add by TangJian 2018/12/26 16:00
                for (int i = 0; i < sceneData.portalDatas.Count; i++)
                {
                    PortalData portalData = sceneData.portalDatas[i];

                    Transform portalTransform = scene.transform.Find("Portals/" + portalData.id);
                    Debug.Assert(portalTransform != null, "找不到门: " + sceneData.sceneId + ":" + portalData.id);

                    PortalController portalController = portalTransform.GetComponent<PortalController>();
                    portalController.PortalData = portalData;
                    portalController.State = 1;
                }

                // 为丢失NavMeshDataBuild
                {
                    foreach(var item in scene.GetComponents<UnityEngine.AI.NavMeshSurface>())
                    {
                        if (item.navMeshData == null)
                        {
                            item.BuildNavMesh();
                        }
                    }
                }
            }

            // 初始化
            // sceneController.InitData();


            return sceneController;
        }