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); } } }
/// <summary> /// 初始化角色 /// </summary> public void InitCharacter() { GameDataBean gameData = GameDataHandler.Instance.manager.GetGameData(); if (gameData.userCharacter != null && npcAI != null && npcAI as NpcAIUserCpt) { npcAI.SetCharacterData(gameData.userCharacter); audioForWalk.clip = AudioHandler.Instance.manager.GetSoundClip("sound_walk_1"); GameConfigBean gameConfig = GameDataHandler.Instance.manager.GetGameConfig(); audioForWalk.volume = gameConfig.soundVolume * 0.5f; } }
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); }
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> /// 展示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); }
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> /// <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; } } }