public void BuildGuestTeam(NpcTeamBean npcTeam, Vector3 npcPosition) { if (npcTeam == null) { return; } //设置小队相关 string teamCode = SystemUtil.GetUUID(SystemUtil.UUIDTypeEnum.N); Color teamColor = new Color(UnityEngine.Random.Range(0f, 1f), UnityEngine.Random.Range(0f, 1f), UnityEngine.Random.Range(0f, 1f)); //设置是否想吃 bool isWant = IsWantEat(CustomerTypeEnum.Team); //获取小队成员数据 npcTeam.GetTeamCharacterData(out List <CharacterBean> listLeader, out List <CharacterBean> listMembers); //设置小队人数(团队领袖全生成,小队成员随机生成) int npcNumber = UnityEngine.Random.Range(listLeader.Count + 1, listLeader.Count + 1 + npcTeam.team_number); for (int i = 0; i < npcNumber; i++) { CharacterBean characterData = null; if (i < listLeader.Count) { characterData = listLeader[i]; } else { characterData = RandomUtil.GetRandomDataByList(listMembers); } //如果发现成员数据为空 默认取领导的 if (characterData == null) { characterData = listLeader[0]; } //随机生成身体数据 characterData.body.CreateRandomEye(); GameObject npcObj = BuildNpc(listGuestTeamHide, objGuestTeamModel, characterData, npcPosition + new Vector3(UnityEngine.Random.Range(-0.5f, 0.5f), UnityEngine.Random.Range(-0.5f, 0.5f))); BaseNpcAI baseNpcAI = npcObj.GetComponent <BaseNpcAI>(); baseNpcAI.SetCharacterData(characterData); baseNpcAI.AddStatusIconForGuestTeam(teamColor); NpcAICustomerForGuestTeamCpt customerAI = baseNpcAI.GetComponent <NpcAICustomerForGuestTeamCpt>(); customerAI.SetTeamData(teamCode, npcTeam, i, teamColor); if (GameTimeHandler.Instance.GetDayStatus() == GameTimeHandler.DayEnum.Work && isWant) { customerAI.SetIntent(NpcAICustomerCpt.CustomerIntentEnum.Want); } else { customerAI.SetIntent(NpcAICustomerCpt.CustomerIntentEnum.Walk); } } }
public void BuildTownFriendsForTeam(NpcTeamBean teamData, Vector3 npcPosition) { if (teamData == null) { return; } if (listExistTeamId.Contains(teamData.id)) { return; } //设置小队相关 string teamCode = SystemUtil.GetUUID(SystemUtil.UUIDTypeEnum.N); Color teamColor = new Color(UnityEngine.Random.Range(0f, 1f), UnityEngine.Random.Range(0f, 1f), UnityEngine.Random.Range(0f, 1f)); //获取小队成员数据 teamData.GetTeamCharacterData(out List <CharacterBean> listLeader, out List <CharacterBean> listMembers); GameDataBean gameData = GameDataHandler.Instance.manager.GetGameData(); //设置小队人数(团队领袖全生成,小队成员随机生成) int npcNumber = listLeader.Count + listMembers.Count; for (int i = 0; i < npcNumber; i++) { CharacterBean characterData = null; if (i < listLeader.Count) { characterData = listLeader[i]; } else { characterData = listMembers[i - listLeader.Count]; } //获取好感 CharacterFavorabilityBean characterFavorability = gameData.GetCharacterFavorability(characterData.npcInfoData.id); GameObject npcObj = Instantiate(objContainer, objFriendModel); npcObj.transform.localScale = new Vector3(1, 1); npcObj.transform.position = npcPosition + new Vector3(UnityEngine.Random.Range(-0.5f, 0.5f), UnityEngine.Random.Range(-0.5f, 0.5f)); BaseNpcAI baseNpcAI = npcObj.GetComponent <BaseNpcAI>(); baseNpcAI.SetCharacterData(characterData); baseNpcAI.AddStatusIconForFriend(); baseNpcAI.AddStatusIconForGuestTeam(teamColor); baseNpcAI.SetFavorabilityData(characterFavorability); NpcAICostomerForFriendCpt customerAI = baseNpcAI.GetComponent <NpcAICostomerForFriendCpt>(); customerAI.SetTeamData(teamCode, teamData, i, teamColor); customerAI.SetIntent(NpcAICustomerCpt.CustomerIntentEnum.Want); } listExistTeamId.Add(teamData.id); }
/// <summary> /// 意图-离开 /// </summary> protected void SetIntentForLeave() { InnHandler.Instance.rascalrQueue.Remove(this); npcFight = null; characterLifeCpt.gameObject.SetActive(false); objFightShow.SetActive(false); objRascalSpaceShow.SetActive(false); //随机获取一个退出点 如果已经有团队的点则不需要获取 if (leavePosition == Vector3.zero) { SceneInnManager sceneInnManager = GameScenesHandler.Instance.manager.GetSceneManager <SceneInnManager>(); leavePosition = sceneInnManager.GetRandomSceneExportPosition(); } movePosition = leavePosition + new Vector3(Random.Range(-0.5f, 0.5f), Random.Range(-0.5f, 0.5f)); characterMoveCpt.SetDestination(movePosition); }
public void BuildTownFriendsForOne(CharacterBean characterData, CharacterFavorabilityBean characterFavorability, Vector3 npcPosition) { //生成NPC GameObject npcObj = BuildNpc(listFriendHide, objFriendModel, characterData, npcPosition); BaseNpcAI baseNpcAI = npcObj.GetComponent <BaseNpcAI>(); baseNpcAI.SetCharacterData(characterData); baseNpcAI.SetFavorabilityData(characterFavorability); baseNpcAI.AddStatusIconForFriend(); NpcAICostomerForFriendCpt customerAI = baseNpcAI.GetComponent <NpcAICostomerForFriendCpt>(); customerAI.SetIntent(NpcAICustomerCpt.CustomerIntentEnum.Want); listExistNpcId.Add(characterData.npcInfoData.id); }
/// <summary> /// 清楚选择 /// </summary> protected void ClearSelect() { //如果是员工 if (selectNpc != null && selectNpc as NpcAIWorkerCpt) { NpcAIWorkerCpt npcAIWorker = selectNpc as NpcAIWorkerCpt; //恢复偷懒 npcAIWorker.SetDazeEnabled(true); } selectNpc = null; selectBed = null; if (dialogSelectView != null) { Destroy(dialogSelectView.gameObject); dialogSelectView = null; } }
/// <summary> /// 展示NPC /// </summary> public static GameObject ShowNpc(GameObject objNpcContainer, GameObject objNpcModel, CharacterBean characterData) { CptUtil.RemoveChildsByActiveInEditor(objNpcContainer); GameObject objNpc = GameObject.Instantiate(objNpcModel, objNpcContainer.transform); objNpc.SetActive(true); objNpc.transform.position = new Vector3(characterData.npcInfoData.position_x, characterData.npcInfoData.position_y); BaseNpcAI baseNpcAI = objNpc.GetComponent <BaseNpcAI>(); baseNpcAI.Awake(); CharacterDressCpt characterDress = CptUtil.GetCptInChildrenByName <CharacterDressCpt>(baseNpcAI.gameObject, "Body"); characterDress.Awake(); baseNpcAI.SetCharacterData(characterData); return(objNpc); }
/// <summary> /// 设置数据 /// </summary> /// <param name="baseNpc"></param> public void SetData(BaseNpcAI baseNpc) { this.targetNpcAI = baseNpc; //添加通知 baseNpc.AddObserver(this); CharacterBean characterData = baseNpc.characterData; if (characterData == null) { return; } SetCharacterUI(characterData); if (baseNpc as NpcAICustomerCpt) { SetDataForCustomerFood((NpcAICustomerCpt)baseNpc); //如果时好友顾客也显示名字 if (baseNpc as NpcAICostomerForFriendCpt) { SetName(characterData.baseInfo.name); } } else if (baseNpc as NpcAICustomerForHotelCpt) { SetDataForCustomerHotel(baseNpc as NpcAICustomerForHotelCpt); } else if (baseNpc as NpcAIWorkerCpt) { SetName(characterData.baseInfo.name); SetDataForWork((NpcAIWorkerCpt)baseNpc); } else if (baseNpc as NpcAIRascalCpt) { SetName(characterData.baseInfo.name); SetDataForRascal((NpcAIRascalCpt)baseNpc); } else { SetName(characterData.baseInfo.name); } }
public GameObject BuildNpc(Queue <GameObject> listHide, GameObject objModel, CharacterBean characterData, Vector3 startPosition) { if (characterData == null || characterData.body == null) { return(null); } GameObject npcObj = null; if (listHide.Count > 0) { npcObj = listHide.Dequeue(); if (npcObj == null) { return(BuildNpc(listHide, objModel, characterData, startPosition)); } } else { npcObj = Instantiate(objContainer, objModel); } if (!npcObj.activeSelf) { npcObj.gameObject.SetActive(true); } npcObj.transform.localScale = new Vector3(1, 1); npcObj.transform.position = startPosition; BaseNpcAI baseNpcAI = npcObj.GetComponent <BaseNpcAI>(); baseNpcAI.ClearAllStatusIcon(); //如果没有眼睛 if (CheckUtil.StringIsNull(characterData.body.eye)) { //随机生成身体数据 characterData.body.CreateRandomEye(); } baseNpcAI.SetCharacterData(characterData); return(npcObj); }
public GameObject CreateNpc(long createNpcId, Vector3 position, int number) { CharacterBean characterData = null; GameObject objNpc = null; if (createNpcId == 0) { characterData = new CharacterBean(); } else { characterData = new CharacterBean(mapNpcInfo[createNpcId]); } if (characterData == null) { LogUtil.LogError("没有找到id为" + createNpcId + "的NPC"); return(null); } objNpc = Instantiate(StoryInfoHandler.Instance.manager.objNpcModel, StoryInfoHandler.Instance.builderForStory.transform); BaseNpcAI baseNpcAI = objNpc.GetComponent <BaseNpcAI>(); baseNpcAI.Awake(); CharacterDressCpt characterDress = CptUtil.GetCptInChildrenByName <CharacterDressCpt>(baseNpcAI.gameObject, "Body"); characterDress.Awake(); baseNpcAI.transform.localPosition = position; baseNpcAI.SetCharacterData(characterData); baseNpcAI.name = "character_" + number; objNpc.SetActive(true); return(objNpc); }
/// <summary> /// 意图-继续闹事 /// </summary> protected void SetIntentForContinueMakeTrouble() { npcFight = null; objFightShow.SetActive(false); StartCoroutine(CoroutineForStartMakeTrouble()); }
private void Start() { mNpcAI = GetComponent <BaseNpcAI>(); }
/// <summary> /// Npc Item /// </summary> public static void GUINpcInfoItem(GameObject objNpcContainer, NpcInfoBean npcInfo) { if (GUILayout.Button("获取场景位置数据", GUILayout.Width(120), GUILayout.Height(20))) { BaseNpcAI npcAI = objNpcContainer.GetComponentInChildren <BaseNpcAI>(); npcInfo.position_x = npcAI.transform.position.x; npcInfo.position_y = npcAI.transform.position.y; } GUILayout.Label("NPCID:", GUILayout.Width(100), GUILayout.Height(20)); npcInfo.id = long.Parse(EditorGUILayout.TextArea(npcInfo.id + "", GUILayout.Width(100), GUILayout.Height(20))); npcInfo.npc_id = npcInfo.id; GUILayout.BeginHorizontal(); npcInfo.npc_type = (int)EditorUI.GUIEnum <NpcTypeEnum>("Npc类型:", npcInfo.npc_type); NpcTypeEnum npcType = (NpcTypeEnum)npcInfo.npc_type; GUILayout.Label("对话选项:", GUILayout.Width(100), GUILayout.Height(20)); npcInfo.talk_types = EditorUI.GUIEditorText(npcInfo.talk_types, 50); GUILayout.EndHorizontal(); if (npcType != NpcTypeEnum.Passerby) { GUILayout.BeginHorizontal(); GUILayout.Label("姓名:", GUILayout.Width(100), GUILayout.Height(20)); npcInfo.name = EditorGUILayout.TextArea(npcInfo.name + "", GUILayout.Width(100), GUILayout.Height(20)); GUILayout.Label("性别:1男 2女", GUILayout.Width(100), GUILayout.Height(20)); npcInfo.sex = int.Parse(EditorGUILayout.TextArea(npcInfo.sex + "", GUILayout.Width(30), GUILayout.Height(20))); GUILayout.Label("称号:", GUILayout.Width(100), GUILayout.Height(20)); npcInfo.title_name = EditorGUILayout.TextArea(npcInfo.title_name + "", GUILayout.Width(100), GUILayout.Height(20)); GUILayout.Label("朝向 1左 2右", GUILayout.Width(100), GUILayout.Height(20)); npcInfo.face = int.Parse(EditorGUILayout.TextArea(npcInfo.face + "", GUILayout.Width(30), GUILayout.Height(20))); GUILayout.Label("位置XY:", GUILayout.Width(100), GUILayout.Height(20)); npcInfo.position_x = float.Parse(EditorGUILayout.TextArea(npcInfo.position_x + "", GUILayout.Width(100), GUILayout.Height(20))); npcInfo.position_y = float.Parse(EditorGUILayout.TextArea(npcInfo.position_y + "", GUILayout.Width(100), GUILayout.Height(20))); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("眼睛:", GUILayout.Width(100), GUILayout.Height(20)); npcInfo.eye_id = EditorGUILayout.TextArea(npcInfo.eye_id + "", GUILayout.Width(200), GUILayout.Height(20)); string eyePath = "Assets/Texture/Character/Eye/"; EditorUI.GUIPic(eyePath, npcInfo.eye_id); GUILayout.Label("眼睛颜色:", GUILayout.Width(100), GUILayout.Height(20)); ColorBean eyeColorData = new ColorBean(npcInfo.eye_color); Color eyeColor = eyeColorData.GetColor();; eyeColor = EditorGUILayout.ColorField(eyeColor, GUILayout.Width(50), GUILayout.Height(20)); npcInfo.eye_color = eyeColor.r + "," + eyeColor.g + "," + eyeColor.b + "," + eyeColor.a; GUILayout.Label("嘴巴:", GUILayout.Width(100), GUILayout.Height(20)); npcInfo.mouth_id = EditorGUILayout.TextArea(npcInfo.mouth_id + "", GUILayout.Width(200), GUILayout.Height(20)); string mouthPath = "Assets/Texture/Character/Mouth/"; EditorUI.GUIPic(mouthPath, npcInfo.mouth_id); GUILayout.Label("嘴巴颜色:", GUILayout.Width(100), GUILayout.Height(20)); ColorBean mouthColorData = new ColorBean(npcInfo.mouth_color); Color mouthColor = mouthColorData.GetColor();; mouthColor = EditorGUILayout.ColorField(mouthColor, GUILayout.Width(50), GUILayout.Height(20)); npcInfo.mouth_color = mouthColor.r + "," + mouthColor.g + "," + mouthColor.b + "," + mouthColor.a; GUILayout.Label("头发:", GUILayout.Width(100), GUILayout.Height(20)); npcInfo.hair_id = EditorGUILayout.TextArea(npcInfo.hair_id + "", GUILayout.Width(200), GUILayout.Height(20)); string hairPath = "Assets/Texture/Character/Hair/"; EditorUI.GUIPic(hairPath, npcInfo.hair_id); GUILayout.Label("头发颜色:", GUILayout.Width(100), GUILayout.Height(20)); ColorBean hairColorData = new ColorBean(npcInfo.hair_color); Color hairColor = hairColorData.GetColor();; hairColor = EditorGUILayout.ColorField(hairColor, GUILayout.Width(50), GUILayout.Height(20)); npcInfo.hair_color = hairColor.r + "," + hairColor.g + "," + hairColor.b + "," + hairColor.a; GUILayout.Label("皮肤颜色:", GUILayout.Width(100), GUILayout.Height(20)); ColorBean skinColorData = new ColorBean(npcInfo.skin_color); Color skinColor = skinColorData.GetColor();; skinColor = EditorGUILayout.ColorField(skinColor, GUILayout.Width(50), GUILayout.Height(20)); npcInfo.skin_color = skinColor.r + "," + skinColor.g + "," + skinColor.b + "," + skinColor.a; GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("命:", GUILayout.Width(30), GUILayout.Height(20)); npcInfo.attributes_life = int.Parse(EditorGUILayout.TextArea(npcInfo.attributes_life + "", GUILayout.Width(50), GUILayout.Height(20))); GUILayout.Label("厨:", GUILayout.Width(30), GUILayout.Height(20)); npcInfo.attributes_cook = int.Parse(EditorGUILayout.TextArea(npcInfo.attributes_cook + "", GUILayout.Width(50), GUILayout.Height(20))); GUILayout.Label("速:", GUILayout.Width(30), GUILayout.Height(20)); npcInfo.attributes_speed = int.Parse(EditorGUILayout.TextArea(npcInfo.attributes_speed + "", GUILayout.Width(50), GUILayout.Height(20))); GUILayout.Label("算:", GUILayout.Width(30), GUILayout.Height(20)); npcInfo.attributes_account = int.Parse(EditorGUILayout.TextArea(npcInfo.attributes_account + "", GUILayout.Width(50), GUILayout.Height(20))); GUILayout.Label("魅:", GUILayout.Width(30), GUILayout.Height(20)); npcInfo.attributes_charm = int.Parse(EditorGUILayout.TextArea(npcInfo.attributes_charm + "", GUILayout.Width(50), GUILayout.Height(20))); GUILayout.Label("武:", GUILayout.Width(30), GUILayout.Height(20)); npcInfo.attributes_force = int.Parse(EditorGUILayout.TextArea(npcInfo.attributes_force + "", GUILayout.Width(50), GUILayout.Height(20))); GUILayout.Label("运:", GUILayout.Width(30), GUILayout.Height(20)); npcInfo.attributes_lucky = int.Parse(EditorGUILayout.TextArea(npcInfo.attributes_lucky + "", GUILayout.Width(50), GUILayout.Height(20))); if (npcType == NpcTypeEnum.RecruitTown) { GUILayout.Label("忠诚:", GUILayout.Width(30), GUILayout.Height(20)); npcInfo.attributes_loyal = int.Parse(EditorGUILayout.TextArea(npcInfo.attributes_loyal + "", GUILayout.Width(50), GUILayout.Height(20))); GUILayout.Label("工资 S:", GUILayout.Width(30), GUILayout.Height(20)); npcInfo.wage_s = int.Parse(EditorGUILayout.TextArea(npcInfo.wage_s + "", GUILayout.Width(50), GUILayout.Height(20))); } GUILayout.Label("喜欢的东西ID(用,分隔):", GUILayout.Width(150), GUILayout.Height(20)); npcInfo.love_items = EditorGUILayout.TextArea(npcInfo.love_items + "", GUILayout.Width(100), GUILayout.Height(20)); GUILayout.Label("喜欢的菜品:", GUILayout.Width(100), GUILayout.Height(20)); npcInfo.love_menus = EditorGUILayout.TextArea(npcInfo.love_menus + "", GUILayout.Width(50), GUILayout.Height(20)); GUILayout.Label("技能:", GUILayout.Width(100), GUILayout.Height(20)); npcInfo.skill_ids = EditorUI.GUIEditorText(npcInfo.skill_ids, 100); GUILayout.EndHorizontal(); } GUILayout.BeginHorizontal(); EditorUI.GUIText("|", 10); EditorUI.GUIText("面具:", 50); npcInfo.mask_id = long.Parse(EditorGUILayout.TextArea(npcInfo.mask_id + "", GUILayout.Width(100), GUILayout.Height(20))); string maskPath = "Assets/Texture/Character/Dress/Mask/"; ItemsInfoBean maskInfo = GameItemsHandler.Instance.manager.GetItemsById(npcInfo.mask_id); if (maskInfo != null) { EditorUI.GUIPic(maskPath, maskInfo.icon_key); } EditorUI.GUIText("|", 10); EditorUI.GUIText("帽子:", 50); npcInfo.hat_id = long.Parse(EditorGUILayout.TextArea(npcInfo.hat_id + "", GUILayout.Width(100), GUILayout.Height(20))); string hatPath = "Assets/Texture/Character/Dress/Hat/"; ItemsInfoBean hatInfo = GameItemsHandler.Instance.manager.GetItemsById(npcInfo.hat_id); if (hatInfo != null) { EditorUI.GUIPic(hatPath, hatInfo.icon_key); } EditorUI.GUIText("|", 10); EditorUI.GUIText("衣服:", 50); npcInfo.clothes_id = long.Parse(EditorGUILayout.TextArea(npcInfo.clothes_id + "", GUILayout.Width(100), GUILayout.Height(20))); string clothesPath = "Assets/Texture/Character/Dress/Clothes/"; ItemsInfoBean clothesInfo = GameItemsHandler.Instance.manager.GetItemsById(npcInfo.clothes_id); if (clothesInfo != null) { EditorUI.GUIPic(clothesPath, clothesInfo.icon_key); } EditorUI.GUIText("|", 10); EditorUI.GUIText("鞋子:", 50); npcInfo.shoes_id = long.Parse(EditorGUILayout.TextArea(npcInfo.shoes_id + "", GUILayout.Width(100), GUILayout.Height(20))); string shoesPath = "Assets/Texture/Character/Dress/Shoes/"; ItemsInfoBean shoesInfo = GameItemsHandler.Instance.manager.GetItemsById(npcInfo.shoes_id); if (shoesInfo != null) { EditorUI.GUIPic(shoesPath, shoesInfo.icon_key); } EditorUI.GUIText("|", 10); EditorUI.GUIText("武器:", 50); npcInfo.hand_id = long.Parse(EditorGUILayout.TextArea(npcInfo.hand_id + "", GUILayout.Width(100), GUILayout.Height(20))); ItemsInfoBean handInfo = GameItemsHandler.Instance.manager.GetItemsById(npcInfo.hand_id); if (handInfo != null) { EditorUI.GUIText(handInfo.name, 50); } EditorUI.GUIText("|", 10); GUILayout.EndHorizontal(); npcInfo.condition = EditorUI.GUIListData <ShowConditionEnum>("Npc出现条件", npcInfo.condition); }
/// <summary> /// 刷新场景数据 /// </summary> /// <param name="listData"></param> public void RefreshSceneData(List <StoryInfoDetailsBean> listData) { if (listData == null) { return; } if (listStoryTextInfo != null) { listStoryTextInfo.Clear(); } listStoryTextInfo = null; foreach (StoryInfoDetailsBean itemData in listData) { StoryInfoDetailsBean.StoryInfoDetailsTypeEnum storyInfoDetailsType = itemData.GetStoryInfoDetailsType(); if (storyInfoDetailsType == StoryInfoDetailsBean.StoryInfoDetailsTypeEnum.NpcPosition) { GameObject objNpc = GetSceneObjByName("character_" + itemData.num); BaseNpcAI npcAI = null; if (objNpc != null) { npcAI = objNpc.GetComponent <BaseNpcAI>(); } if (npcAI == null) { NpcInfoBean npcInfoBean; if (itemData.npc_id == 0) { npcInfoBean = new NpcInfoBean(); } else if (itemData.npc_id == -1) { npcInfoBean = new NpcInfoBean(); } else { if (mapNpcInfo.TryGetValue(itemData.npc_id, out NpcInfoBean npcInfo)) { npcInfoBean = npcInfo; } else { npcInfoBean = new NpcInfoBean(); LogUtil.LogError("创建NPC失败 找不到ID为" + itemData.npc_id + "的NPC信息"); } } objNpc = CreateNpc(npcInfoBean.npc_id, new Vector3(itemData.position_x, itemData.position_y), itemData.num); npcAI = objNpc.GetComponent <BaseNpcAI>(); } npcAI.transform.localPosition = new Vector3(itemData.position_x, itemData.position_y); //设置朝向 npcAI.SetCharacterFace(itemData.face); } else if (storyInfoDetailsType == StoryInfoDetailsBean.StoryInfoDetailsTypeEnum.NpcEquip) { GameObject objNpc = GetSceneObjByName("character_" + itemData.num); if (objNpc == null) { continue; } BaseNpcAI npcAI = objNpc.GetComponent <BaseNpcAI>(); if (npcAI == null) { continue; } SexEnum sex = npcAI.characterData.body.GetSex(); itemData.GetNpcEquip(sex, out long hatId, out long clothesId, out long shoesId); if (hatId != -1) { npcAI.characterData.equips.hatTFId = hatId; } if (clothesId != -1) { npcAI.characterData.equips.clothesTFId = clothesId; } if (shoesId != -1) { npcAI.characterData.equips.shoesTFId = shoesId; } npcAI.SetCharacterData(npcAI.characterData); } else if (storyInfoDetailsType == StoryInfoDetailsBean.StoryInfoDetailsTypeEnum.PropPosition) { GameObject objProp = GetSceneObjByName("prop_" + itemData.num); if (objProp == null) { GameObject objModel = StoryInfoHandler.Instance.manager.GetStoryPropModelByName(itemData.key_name); objProp = Instantiate(objModel, StoryInfoHandler.Instance.builderForStory.transform); objProp.name = "prop_" + itemData.num; } //设置位置和朝向 objProp.transform.localPosition = new Vector3(itemData.position_x, itemData.position_y); Vector3 bodyScale = objProp.transform.localScale; switch (itemData.face) { case 1: bodyScale.x = -1; break; case 2: bodyScale.x = 1; break; } objProp.transform.localScale = bodyScale; } //如果是对话 查询对话数据 else if (storyInfoDetailsType == StoryInfoDetailsBean.StoryInfoDetailsTypeEnum.Talk) { listStoryTextInfo = textInfoService.QueryDataByMarkId(TextEnum.Story, itemData.text_mark_id); } else if (storyInfoDetailsType == StoryInfoDetailsBean.StoryInfoDetailsTypeEnum.NpcDestory) { int[] numList = StringUtil.SplitBySubstringForArrayInt(itemData.npc_destroy, ','); foreach (int num in numList) { BaseNpcAI npcAI = CptUtil.GetCptInChildrenByName <BaseNpcAI>(StoryInfoHandler.Instance.builderForStory.gameObject, num + ""); DestroyImmediate(npcAI.gameObject); } } else if (storyInfoDetailsType == StoryInfoDetailsBean.StoryInfoDetailsTypeEnum.CameraPosition) { Vector3 cameraWorldPosition = StoryInfoHandler.Instance.builderForStory.transform.TransformPoint(new Vector3(itemData.position_x, itemData.position_y, -10)); GameCameraHandler.Instance.manager.camera2D.Follow = null; GameCameraHandler.Instance.manager.camera2D.transform.position = cameraWorldPosition; } else if (itemData.type == (int)StoryInfoDetailsBean.StoryInfoDetailsTypeEnum.CameraFollowCharacter) { BaseNpcAI npcAI = CptUtil.GetCptInChildrenByName <BaseNpcAI>(StoryInfoHandler.Instance.builderForStory.gameObject, "character_" + itemData.num); GameCameraHandler.Instance.manager.camera2D.Follow = npcAI.transform; } } }
/// <summary> /// 选中物体处理 /// </summary> public void HandleForSelect() { if (EventSystem.current.IsPointerOverGameObject()) { return; } //偷懒员工选中处理 NpcAIWorkerCpt workerDaze = HandleForDazeWorker(); if (Input.GetButtonDown(InputInfo.Confirm)) { if (dialogSelectView != null) { return; } Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); //如有已经提前选中了偷懒的员工 if (workerDaze != null) { AudioHandler.Instance.PlaySound(AudioSoundEnum.Fight); workerDaze.SetExpression(CharacterExpressionCpt.CharacterExpressionEnum.Surprise, 3); workerDaze.SetDazeBufferTime(10); workerDaze.SetIntent(NpcAIWorkerCpt.WorkerIntentEnum.Idle); return; } RaycastHit2D[] hitAll = Physics2D.RaycastAll(mousePos, Vector2.zero); foreach (RaycastHit2D itemHit in hitAll) { if (itemHit.collider.transform.tag.Equals(TagInfo.Tag_NpcBody)) { GameObject objSelect = itemHit.collider.gameObject; selectNpc = objSelect.GetComponentInParent <BaseNpcAI>(); if (selectNpc) { AudioHandler.Instance.PlaySound(AudioSoundEnum.ButtonForShow); DialogBean dialogData = new DialogBean(); dialogSelectView = DialogHandler.Instance.CreateDialog <SelectForNpcDialogView>(DialogEnum.SelectForNpc, this, dialogData); ((SelectForNpcDialogView)dialogSelectView).SetData(selectNpc); //如果是员工 if (selectNpc as NpcAIWorkerCpt) { NpcAIWorkerCpt npcAIWorker = selectNpc as NpcAIWorkerCpt; npcAIWorker.SetDazeEnabled(false); } return; } } else if (itemHit.collider.transform.tag.Equals(TagInfo.Tag_Bed)) { GameObject objSelect = itemHit.collider.gameObject; selectBed = objSelect.GetComponentInParent <BuildBedCpt>(); if (selectBed) { AudioHandler.Instance.PlaySound(AudioSoundEnum.ButtonForShow); DialogBean dialogData = new DialogBean(); dialogSelectView = DialogHandler.Instance.CreateDialog <SelectForBedDialogView>(DialogEnum.SelectForBed, this, dialogData); ((SelectForBedDialogView)dialogSelectView).SetData(selectBed); return; } } } selectNpc = null; selectBed = null; } }