| Main/Component/UI/Common/LayoutElementSizeClamp.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/Main.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Hero/UIHeroController.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/HeroUI/HeroSkinModel.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/InternalAffairs/AffairBaseWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/InternalAffairs/FuncNPCManager.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/InternalAffairs/FuncNPCManager.cs.meta | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Main/Component/UI/Common/LayoutElementSizeClamp.cs
@@ -7,7 +7,8 @@ // Preferred Width 和 Height 可以不勾选 // !!!必须勾选 Clamp Enable // Clamp中 Min配最小 和 Max配最大 // Target 配目标,比如脚本可以挂载文字组件上,目标也指向文字组件 // Target 配目标,比如脚本可以挂载文字组件上,目标也指向文字组件,文本同时配ContentSizeFitter; // 父组件同时配ContentSizeFitterlayout横竖都行 [ExecuteAlways] public class LayoutElementSizeClamp : LayoutElement { Main/Main.cs
@@ -91,6 +91,7 @@ managers.Add(HorseManager.Instance); managers.Add(PhantasmPavilionManager.Instance); managers.Add(AttributeManager.Instance); managers.Add(FuncNPCManager.Instance); foreach (var manager in managers) { Main/System/Hero/UIHeroController.cs
@@ -13,7 +13,7 @@ protected Spine.AnimationState spineAnimationState; private GameObject instanceGO; private Action onComplete; public Action onComplete; public void Create(int _skinID, float scale = 0.8f, Action _onComplete = null, string motionName = "idle", bool isLh = false) { if (skinID == _skinID) Main/System/HeroUI/HeroSkinModel.cs
@@ -18,5 +18,10 @@ heroModel.PlayAnimation(actionName, true); heroModel.SetEnabled(enable); } public UIHeroController GetModel() { return heroModel; } } Main/System/InternalAffairs/AffairBaseWin.cs
@@ -1,5 +1,6 @@ using System.Collections; using System.Collections.Generic; using Cysharp.Threading.Tasks; using UnityEngine; using UnityEngine.UI; @@ -19,6 +20,12 @@ [SerializeField] Text autoText; [SerializeField] GameObject flowAutoEffect; [SerializeField] Button autoBtn; //NPC对话相关 [SerializeField] HeroSkinModel[] funcNPCs; [SerializeField] Transform[] talkRects; [SerializeField] Text[] talkTexts; protected override void InitComponent() { @@ -50,6 +57,7 @@ GoldRushManager.Instance.OnAutoWorkingEvent += OnAutoWorkingEvent; GlobalTimeEvent.Instance.secondEvent += OnSecondEvent; PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefreshEvent; GlobalTimeEvent.Instance.fiveSecondEvent += OnFiveSecondEvent; Display(); if (GoldRushManager.Instance.openAutoGoldRush) @@ -64,6 +72,7 @@ GoldRushManager.Instance.OnAutoWorkingEvent -= OnAutoWorkingEvent; GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent; PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefreshEvent; GlobalTimeEvent.Instance.fiveSecondEvent -= OnFiveSecondEvent; } protected override void OnOpen() @@ -137,4 +146,27 @@ RefreshGoldRushMoney(); } } void OnFiveSecondEvent() { var index = FuncNPCManager.Instance.GetRandomAffairNpcTalk(); var talk = FuncNPCManager.Instance.GetAffairTalk(funcNPCs[index].heroSkinID); if (talk != null) { talkTexts[index].text = Language.Get(talk); talkRects[index].SetActive(true); } var npc = funcNPCs[index].GetModel(); npc.PlayAnimation("hanhua", true); Talk(index).Forget(); } async UniTask Talk(int index) { await UniTask.Delay(4500); talkRects[index].SetActive(false); var npc = funcNPCs[index].GetModel(); npc.PlayAnimation("idle", true); } } Main/System/InternalAffairs/FuncNPCManager.cs
New file @@ -0,0 +1,92 @@ using System.Collections.Generic; using System.Linq; using Codice.Client.Common; using LitJson; using UnityEngine; public class FuncNPCManager : GameSystemManager<FuncNPCManager> { //内政NPC Dictionary<int, string[]> affairNpcTalkDic = new Dictionary<int, string[]>(); public List<int> affairTalkIndexList = new List<int>(); public float lastAffairTalkTime; public int lastAffiarRandomIndex; //公会NPC Dictionary<int, string[]> guildNpcTalkDic = new Dictionary<int, string[]>(); public List<int> guildTalkIndexList = new List<int>(); public float lastGuildTalkTime; public int lastGuildRandomIndex; public override void Init() { ParseConfig(); } void ParseConfig() { var config = FuncConfigConfig.Get("FuncNPC"); var json = JsonMapper.ToObject(config.Numerical1); var keys = json.Keys.ToList(); foreach (var key in keys) { var npcID = int.Parse(key); var talkList = JsonMapper.ToObject<string[]>(json[key].ToJson()); affairNpcTalkDic.Add(npcID, talkList); } for (int i = 0; i < affairNpcTalkDic.Count; i++) { affairTalkIndexList.Add(i); } json = JsonMapper.ToObject(config.Numerical2); keys = json.Keys.ToList(); foreach (var key in keys) { var npcID = int.Parse(key); var talkList = JsonMapper.ToObject<string[]>(json[key].ToJson()); guildNpcTalkDic.Add(npcID, talkList); } for (int i = 0; i < guildNpcTalkDic.Count; i++) { guildTalkIndexList.Add(i); } } //随机某个NPC对话,与上一次随机的NPC索引不重复 public int GetRandomAffairNpcTalk() { int index = Random.Range(0, affairTalkIndexList.Count); if (index == lastAffiarRandomIndex) { index = (index + 1) % affairTalkIndexList.Count; } lastAffiarRandomIndex = index; return index; } public int GetRandomGuildNpcTalk() { int index = Random.Range(0, guildTalkIndexList.Count); if (index == lastGuildRandomIndex) { index = (index + 1) % guildTalkIndexList.Count; } lastGuildRandomIndex = index; return index; } public string GetAffairTalk(int skinID) { if (affairNpcTalkDic.ContainsKey(skinID)) { return affairNpcTalkDic[skinID][Random.Range(0, affairNpcTalkDic[skinID].Length)]; } return null; } } Main/System/InternalAffairs/FuncNPCManager.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: efdf806ad153a4d4bae560014fc20efd MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: