From 26b69bc870e3a0c89792f814e1fd3f5405a0d3cf Mon Sep 17 00:00:00 2001 From: SepComet <202308010230@stu.csust.edu.cn> Date: Mon, 9 Feb 2026 12:56:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E5=AF=B9=E8=AF=9DUI?= =?UTF-8?q?=EF=BC=8C=E5=9F=BA=E6=9C=AC=E5=AE=8C=E6=88=90=E5=AF=B9=E8=AF=9D?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E8=AE=BE=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/GameMain/DataTables/UIForm.txt | 3 + .../GameMain/Scripts/Base/GameEntry.Custom.cs | 2 + ...{BuiltinData.meta => CustomComponent.meta} | 0 .../BuiltinDataComponent.cs | 0 .../BuiltinDataComponent.cs.meta | 0 .../CombineComponent.cs | 0 .../CombineComponent.cs.meta | 2 +- .../CustomComponent/DialogComponent.cs | 407 ++++++++ .../CustomComponent/DialogComponent.cs.meta | 11 + .../CustomComponent/SpriteCacheComponent.cs | 72 ++ .../SpriteCacheComponent.cs.meta | 11 + Assets/GameMain/Scripts/DataTable/DRDialog.cs | 4 +- .../{DialogUIMode.cs => DialogFormMode.cs} | 2 +- ...gUIMode.cs.meta => DialogFormMode.cs.meta} | 0 .../Scripts/Definition/Enum/UIFormId.cs | 15 + .../Event/DialogNextLineRequestEventArgs.cs | 21 + .../DialogNextLineRequestEventArgs.cs.meta | 11 + .../Event/DialogSkipRequestEventArgs.cs | 21 + .../Event/DialogSkipRequestEventArgs.cs.meta | 11 + .../Event/DialogStopRequestEventArgs.cs | 21 + .../Event/DialogStopRequestEventArgs.cs.meta | 11 + .../Scripts/Procedure/ProcedureCombine.cs | 18 +- Assets/GameMain/Scripts/UI/Dialog.meta | 8 + .../GameMain/Scripts/UI/Dialog/Context.meta | 8 + .../UI/Dialog/Context/DialogFormContext.cs | 24 + .../Dialog/Context/DialogFormContext.cs.meta | 11 + .../Scripts/UI/Dialog/Controller.meta | 8 + .../Dialog/Controller/DialogFormController.cs | 167 ++++ .../Controller/DialogFormController.cs.meta | 11 + Assets/GameMain/Scripts/UI/Dialog/View.meta | 8 + .../UI/Dialog/View/BottomDialogForm.cs | 144 +++ .../UI/Dialog/View/BottomDialogForm.cs.meta | 11 + .../Scripts/UI/Dialog/View/DialogFormBase.cs | 71 ++ .../UI/Dialog/View/DialogFormBase.cs.meta | 11 + .../Scripts/UI/Dialog/View/MaskDialogForm.cs | 38 + .../UI/Dialog/View/MaskDialogForm.cs.meta | 11 + .../GameMain/Scripts/Utility/AssetUtility.cs | 5 + .../UI/UIForms/BottomDialogForm.prefab | 934 ++++++++++++++++++ .../UI/UIForms/BottomDialogForm.prefab.meta | 7 + .../GameMain/UI/UIForms/MaskDialogForm.prefab | 422 ++++++++ .../UI/UIForms/MaskDialogForm.prefab.meta | 7 + Assets/GameMain/UI/UISprites/Dialog.meta | 8 + Assets/Launcher.unity | 49 +- 数据表/DialogLine.xlsx | Bin 11607 -> 11609 bytes 数据表/UIForm.txt | 3 + 数据表/UIForm.xlsx | Bin 10165 -> 10322 bytes 46 files changed, 2598 insertions(+), 11 deletions(-) rename Assets/GameMain/Scripts/{BuiltinData.meta => CustomComponent.meta} (100%) rename Assets/GameMain/Scripts/{BuiltinData => CustomComponent}/BuiltinDataComponent.cs (100%) rename Assets/GameMain/Scripts/{BuiltinData => CustomComponent}/BuiltinDataComponent.cs.meta (100%) rename Assets/GameMain/Scripts/{Gameplay/CoreGameplayA => CustomComponent}/CombineComponent.cs (100%) rename Assets/GameMain/Scripts/{Gameplay/CoreGameplayA => CustomComponent}/CombineComponent.cs.meta (83%) create mode 100644 Assets/GameMain/Scripts/CustomComponent/DialogComponent.cs create mode 100644 Assets/GameMain/Scripts/CustomComponent/DialogComponent.cs.meta create mode 100644 Assets/GameMain/Scripts/CustomComponent/SpriteCacheComponent.cs create mode 100644 Assets/GameMain/Scripts/CustomComponent/SpriteCacheComponent.cs.meta rename Assets/GameMain/Scripts/Definition/Enum/{DialogUIMode.cs => DialogFormMode.cs} (91%) rename Assets/GameMain/Scripts/Definition/Enum/{DialogUIMode.cs.meta => DialogFormMode.cs.meta} (100%) create mode 100644 Assets/GameMain/Scripts/Event/DialogNextLineRequestEventArgs.cs create mode 100644 Assets/GameMain/Scripts/Event/DialogNextLineRequestEventArgs.cs.meta create mode 100644 Assets/GameMain/Scripts/Event/DialogSkipRequestEventArgs.cs create mode 100644 Assets/GameMain/Scripts/Event/DialogSkipRequestEventArgs.cs.meta create mode 100644 Assets/GameMain/Scripts/Event/DialogStopRequestEventArgs.cs create mode 100644 Assets/GameMain/Scripts/Event/DialogStopRequestEventArgs.cs.meta create mode 100644 Assets/GameMain/Scripts/UI/Dialog.meta create mode 100644 Assets/GameMain/Scripts/UI/Dialog/Context.meta create mode 100644 Assets/GameMain/Scripts/UI/Dialog/Context/DialogFormContext.cs create mode 100644 Assets/GameMain/Scripts/UI/Dialog/Context/DialogFormContext.cs.meta create mode 100644 Assets/GameMain/Scripts/UI/Dialog/Controller.meta create mode 100644 Assets/GameMain/Scripts/UI/Dialog/Controller/DialogFormController.cs create mode 100644 Assets/GameMain/Scripts/UI/Dialog/Controller/DialogFormController.cs.meta create mode 100644 Assets/GameMain/Scripts/UI/Dialog/View.meta create mode 100644 Assets/GameMain/Scripts/UI/Dialog/View/BottomDialogForm.cs create mode 100644 Assets/GameMain/Scripts/UI/Dialog/View/BottomDialogForm.cs.meta create mode 100644 Assets/GameMain/Scripts/UI/Dialog/View/DialogFormBase.cs create mode 100644 Assets/GameMain/Scripts/UI/Dialog/View/DialogFormBase.cs.meta create mode 100644 Assets/GameMain/Scripts/UI/Dialog/View/MaskDialogForm.cs create mode 100644 Assets/GameMain/Scripts/UI/Dialog/View/MaskDialogForm.cs.meta create mode 100644 Assets/GameMain/UI/UIForms/BottomDialogForm.prefab create mode 100644 Assets/GameMain/UI/UIForms/BottomDialogForm.prefab.meta create mode 100644 Assets/GameMain/UI/UIForms/MaskDialogForm.prefab create mode 100644 Assets/GameMain/UI/UIForms/MaskDialogForm.prefab.meta create mode 100644 Assets/GameMain/UI/UISprites/Dialog.meta diff --git a/Assets/GameMain/DataTables/UIForm.txt b/Assets/GameMain/DataTables/UIForm.txt index f8de70d..53ec801 100644 --- a/Assets/GameMain/DataTables/UIForm.txt +++ b/Assets/GameMain/DataTables/UIForm.txt @@ -7,3 +7,6 @@ 101 设置 SettingForm Default False True 102 关于 AboutForm Default False True 103 组装玩法UI CombineForm Default False False + 104 Mask对话UI MaskDialogForm Default False False + 105 Bottom对话UI BottomDialogForm Default False False + 106 Bubble对话UI BubbleDialogForm Default True False diff --git a/Assets/GameMain/Scripts/Base/GameEntry.Custom.cs b/Assets/GameMain/Scripts/Base/GameEntry.Custom.cs index 73dfeb0..dd0d4d6 100644 --- a/Assets/GameMain/Scripts/Base/GameEntry.Custom.cs +++ b/Assets/GameMain/Scripts/Base/GameEntry.Custom.cs @@ -15,10 +15,12 @@ public partial class GameEntry : MonoBehaviour { public static BuiltinDataComponent BuiltinData { get; private set; } public static CombineComponent Combine { get; private set; } + public static DialogComponent Dialog { get; private set; } private static void InitCustomComponents() { BuiltinData = UnityGameFramework.Runtime.GameEntry.GetComponent(); Combine = UnityGameFramework.Runtime.GameEntry.GetComponent(); + Dialog = UnityGameFramework.Runtime.GameEntry.GetComponent(); } } diff --git a/Assets/GameMain/Scripts/BuiltinData.meta b/Assets/GameMain/Scripts/CustomComponent.meta similarity index 100% rename from Assets/GameMain/Scripts/BuiltinData.meta rename to Assets/GameMain/Scripts/CustomComponent.meta diff --git a/Assets/GameMain/Scripts/BuiltinData/BuiltinDataComponent.cs b/Assets/GameMain/Scripts/CustomComponent/BuiltinDataComponent.cs similarity index 100% rename from Assets/GameMain/Scripts/BuiltinData/BuiltinDataComponent.cs rename to Assets/GameMain/Scripts/CustomComponent/BuiltinDataComponent.cs diff --git a/Assets/GameMain/Scripts/BuiltinData/BuiltinDataComponent.cs.meta b/Assets/GameMain/Scripts/CustomComponent/BuiltinDataComponent.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/BuiltinData/BuiltinDataComponent.cs.meta rename to Assets/GameMain/Scripts/CustomComponent/BuiltinDataComponent.cs.meta diff --git a/Assets/GameMain/Scripts/Gameplay/CoreGameplayA/CombineComponent.cs b/Assets/GameMain/Scripts/CustomComponent/CombineComponent.cs similarity index 100% rename from Assets/GameMain/Scripts/Gameplay/CoreGameplayA/CombineComponent.cs rename to Assets/GameMain/Scripts/CustomComponent/CombineComponent.cs diff --git a/Assets/GameMain/Scripts/Gameplay/CoreGameplayA/CombineComponent.cs.meta b/Assets/GameMain/Scripts/CustomComponent/CombineComponent.cs.meta similarity index 83% rename from Assets/GameMain/Scripts/Gameplay/CoreGameplayA/CombineComponent.cs.meta rename to Assets/GameMain/Scripts/CustomComponent/CombineComponent.cs.meta index 797c163..d791c80 100644 --- a/Assets/GameMain/Scripts/Gameplay/CoreGameplayA/CombineComponent.cs.meta +++ b/Assets/GameMain/Scripts/CustomComponent/CombineComponent.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 0103c893efce444d9c6fe671306746fe +guid: cc0388c578bec9746813380eee9038d4 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/GameMain/Scripts/CustomComponent/DialogComponent.cs b/Assets/GameMain/Scripts/CustomComponent/DialogComponent.cs new file mode 100644 index 0000000..6cf6f39 --- /dev/null +++ b/Assets/GameMain/Scripts/CustomComponent/DialogComponent.cs @@ -0,0 +1,407 @@ +using System.Collections.Generic; +using DataTable; +using Definition.Enum; +using Event; +using GameFramework.DataTable; +using GameFramework.Event; +using UI; +using UnityEngine; +using UnityGameFramework.Runtime; + +namespace CustomComponent +{ + [DisallowMultipleComponent] + public class DialogComponent : GameFrameworkComponent + { + #region Property + + private const int DialogChapterDivisor = 1000; + private const int LineChapterDivisor = 100000000; + private const int LineDialogDivisor = 100000; + + private readonly Dictionary _dialogMap = new(); + + private readonly Dictionary> _dialogLinesMap = new(); + + private readonly Dictionary _dialogFirstLineIdMap = new(); + + private IDataTable _dtDialog; + private IDataTable _dtDialogLine; + private DialogFormController _formController; + private DialogFormContext _formContext; + + private int _currentChapterId; + private int _currentLineIndex = -1; + private bool _isInitialized; + private bool _isPlaying; + + public bool IsInitialized => _isInitialized; + + public bool IsPlaying => _isPlaying; + + public int CurrentChapterId => _currentChapterId; + + public int CurrentDialogId => _formContext != null ? _formContext.DialogId : 0; + + public int CurrentLineId => _formContext != null ? _formContext.CurrentLineId : 0; + + #endregion + + + private void Start() + { + GameEntry.Event.Subscribe(DialogNextLineRequestEventArgs.EventId, OnDialogNextLineRequest); + GameEntry.Event.Subscribe(DialogSkipRequestEventArgs.EventId, OnDialogSkipRequest); + GameEntry.Event.Subscribe(DialogStopRequestEventArgs.EventId, OnDialogStopRequest); + } + + private void OnDestroy() + { + GameEntry.Event.Unsubscribe(DialogNextLineRequestEventArgs.EventId, OnDialogNextLineRequest); + GameEntry.Event.Unsubscribe(DialogSkipRequestEventArgs.EventId, OnDialogSkipRequest); + GameEntry.Event.Unsubscribe(DialogStopRequestEventArgs.EventId, OnDialogStopRequest); + } + + public bool Init(int chapterId) + { + if (chapterId <= 0) + { + Log.Warning("Dialog init failed. chapterId must be positive."); + return false; + } + + if (!EnsureDataTables()) + { + return false; + } + + StopDialog(); + _dialogMap.Clear(); + _dialogLinesMap.Clear(); + _dialogFirstLineIdMap.Clear(); + + DRDialog[] dialogRows = _dtDialog.GetDataRows((a, b) => a.Id.CompareTo(b.Id)); + for (int i = 0; i < dialogRows.Length; i++) + { + DRDialog dialogRow = dialogRows[i]; + if (dialogRow == null) + { + continue; + } + + if (ParseChapterIdFromDialogId(dialogRow.Id) != chapterId) + { + continue; + } + + _dialogMap[dialogRow.Id] = dialogRow; + } + + if (_dialogMap.Count == 0) + { + Log.Warning("Dialog init failed. No dialog rows found for chapter '{0}'.", chapterId.ToString()); + return false; + } + + DRDialogLine[] lineRows = _dtDialogLine.GetDataRows((a, b) => a.Id.CompareTo(b.Id)); + for (int i = 0; i < lineRows.Length; i++) + { + DRDialogLine lineRow = lineRows[i]; + if (lineRow == null) + { + continue; + } + + if (ParseChapterIdFromLineId(lineRow.Id) != chapterId) + { + continue; + } + + int dialogId = ParseDialogIdFromLineId(lineRow.Id); + if (!_dialogMap.ContainsKey(dialogId)) + { + continue; + } + + if (!_dialogLinesMap.TryGetValue(dialogId, out List dialogLines)) + { + dialogLines = new List(); + _dialogLinesMap.Add(dialogId, dialogLines); + } + + dialogLines.Add(lineRow); + } + + List invalidDialogIds = new List(); + foreach (KeyValuePair dialogPair in _dialogMap) + { + if (!_dialogLinesMap.TryGetValue(dialogPair.Key, out List dialogLines) || + dialogLines.Count == 0) + { + Log.Warning("Dialog init warning. Dialog '{0}' has no lines and will be ignored.", + dialogPair.Key.ToString()); + invalidDialogIds.Add(dialogPair.Key); + continue; + } + + dialogLines.Sort((a, b) => a.Id.CompareTo(b.Id)); + _dialogFirstLineIdMap[dialogPair.Key] = dialogLines[0].Id; + } + + for (int i = 0; i < invalidDialogIds.Count; i++) + { + _dialogMap.Remove(invalidDialogIds[i]); + } + + if (_dialogMap.Count == 0) + { + Log.Warning("Dialog init failed. No valid dialog remains for chapter '{0}'.", chapterId.ToString()); + return false; + } + + EnsureFormController(); + _formContext = null; + _currentChapterId = chapterId; + _currentLineIndex = -1; + _isInitialized = true; + _isPlaying = false; + return true; + } + + public bool StartDialog(int dialogId) + { + if (!_isInitialized) + { + Log.Warning("Start dialog failed. Dialog component is not initialized."); + return false; + } + + if (ParseChapterIdFromDialogId(dialogId) != _currentChapterId) + { + Log.Warning("Start dialog failed. Dialog '{0}' does not belong to chapter '{1}'.", dialogId.ToString(), + _currentChapterId.ToString()); + return false; + } + + if (!_dialogMap.TryGetValue(dialogId, out DRDialog dialogRow)) + { + Log.Warning("Start dialog failed. Dialog '{0}' was not found in current chapter cache.", + dialogId.ToString()); + return false; + } + + if (!_dialogLinesMap.TryGetValue(dialogId, out List dialogLines) || dialogLines.Count == 0) + { + Log.Warning("Start dialog failed. Dialog '{0}' has no playable lines.", dialogId.ToString()); + return false; + } + + if (_isPlaying) + { + StopDialog(); + } + + EnsureFormController(); + if (_formContext == null) + { + _formContext = new DialogFormContext(); + } + + _formContext.ChapterId = _currentChapterId; + _formContext.DialogId = dialogRow.Id; + _formContext.DialogTitle = dialogRow.Title; + _formContext.DialogUIMode = dialogRow.UIMode; + + _currentLineIndex = 0; + ApplyLineToContext(dialogLines[_currentLineIndex], _currentLineIndex, dialogLines.Count); + _isPlaying = true; + + _formController.OpenUI(_formContext); + _formController.OnDialogStarted(_formContext); + _formController.OnDialogLineChanged(_formContext); + return true; + } + + public bool NextLine() + { + if (!_isPlaying) + { + Log.Warning("Next line failed. No dialog is playing."); + return false; + } + + if (!TryGetCurrentDialogLines(out List dialogLines)) + { + StopDialog(); + return false; + } + + int nextLineIndex = _currentLineIndex + 1; + if (nextLineIndex >= dialogLines.Count) + { + EndDialogInternal(); + return true; + } + + _currentLineIndex = nextLineIndex; + ApplyLineToContext(dialogLines[_currentLineIndex], _currentLineIndex, dialogLines.Count); + _formController.OnDialogLineChanged(_formContext); + return true; + } + + public bool SkipDialog() + { + if (!_isPlaying) + { + Log.Warning("Skip dialog failed. No dialog is playing."); + return false; + } + + EndDialogInternal(); + return true; + } + + public void StopDialog() + { + if (!_isPlaying) + { + return; + } + + EndDialogInternal(); + } + + public void ClearRuntimeContext() + { + StopDialog(); + + _dialogMap.Clear(); + _dialogLinesMap.Clear(); + _dialogFirstLineIdMap.Clear(); + + _formContext = null; + _currentChapterId = 0; + _currentLineIndex = -1; + _isInitialized = false; + _isPlaying = false; + } + + private bool EnsureDataTables() + { + _dtDialog = GameEntry.DataTable.GetDataTable(); + if (_dtDialog == null) + { + Log.Warning("Dialog init failed. Data table DRDialog is missing."); + return false; + } + + _dtDialogLine = GameEntry.DataTable.GetDataTable(); + if (_dtDialogLine == null) + { + Log.Warning("Dialog init failed. Data table DRDialogLine is missing."); + return false; + } + + return true; + } + + private void EnsureFormController() + { + if (_formController == null) + { + _formController = new DialogFormController(); + } + } + + private bool TryGetCurrentDialogLines(out List dialogLines) + { + dialogLines = null; + if (_formContext == null) + { + Log.Warning("Dialog state invalid. Form context is null."); + return false; + } + + if (!_dialogLinesMap.TryGetValue(_formContext.DialogId, out dialogLines)) + { + Log.Warning("Dialog state invalid. Dialog lines are missing for dialog '{0}'.", + _formContext.DialogId.ToString()); + return false; + } + + return true; + } + + private void EndDialogInternal() + { + _isPlaying = false; + _currentLineIndex = -1; + + _formController.OnDialogEnded(_formContext); + _formController.CloseUI(); + } + + private void ApplyLineToContext(DRDialogLine lineRow, int lineIndex, int totalLines) + { + _formContext.CurrentLineId = lineRow.Id; + _formContext.SpeakerId = lineRow.SpeakerId; + _formContext.SpeakerName = lineRow.SpeakerName; + _formContext.Expression = lineRow.Expression; + _formContext.Direction = lineRow.Direction; + _formContext.Text = lineRow.Text; + _formContext.Emphasis = lineRow.Emphasis; + _formContext.LineIndex = lineIndex; + _formContext.TotalLines = totalLines; + _formContext.IsLastLine = lineIndex >= totalLines - 1; + } + + private static int ParseChapterIdFromDialogId(int dialogId) + { + return dialogId / DialogChapterDivisor; + } + + private static int ParseChapterIdFromLineId(int lineId) + { + return lineId / LineChapterDivisor; + } + + private static int ParseDialogIdFromLineId(int lineId) + { + return lineId / LineDialogDivisor; + } + + #region Event Handlers + + private void OnDialogNextLineRequest(object sender, GameEventArgs e) + { + if (!(e is DialogNextLineRequestEventArgs)) + { + return; + } + + NextLine(); + } + + private void OnDialogSkipRequest(object sender, GameEventArgs e) + { + if (!(e is DialogSkipRequestEventArgs)) + { + return; + } + + SkipDialog(); + } + + private void OnDialogStopRequest(object sender, GameEventArgs e) + { + if (!(e is DialogStopRequestEventArgs)) + { + return; + } + + StopDialog(); + } + + #endregion + } +} \ No newline at end of file diff --git a/Assets/GameMain/Scripts/CustomComponent/DialogComponent.cs.meta b/Assets/GameMain/Scripts/CustomComponent/DialogComponent.cs.meta new file mode 100644 index 0000000..bdcaace --- /dev/null +++ b/Assets/GameMain/Scripts/CustomComponent/DialogComponent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d6174838c30e460429e5628757bbf015 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Scripts/CustomComponent/SpriteCacheComponent.cs b/Assets/GameMain/Scripts/CustomComponent/SpriteCacheComponent.cs new file mode 100644 index 0000000..a9af45e --- /dev/null +++ b/Assets/GameMain/Scripts/CustomComponent/SpriteCacheComponent.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using CustomUtility; +using Definition; +using GameFramework.Resource; +using UnityEngine; +using UnityGameFramework.Runtime; + +namespace CustomComponent +{ + public class SpriteCacheComponent : GameFrameworkComponent + { + [SerializeField] private float _pixelsPerUnit = 100f; + [SerializeField] private Vector2 _defaultPivot = new(0.5f, 0.5f); + + private Dictionary _spriteCache; + private ResourceComponent _resource; + + void Start() + { + _spriteCache = new Dictionary(); + _resource = GameEntry.Resource; + } + + public void GetSprite(string assetName, Action callback) + { + if (_spriteCache.TryGetValue(assetName, out var sprite)) + { + callback?.Invoke(sprite); + return; + } + else + { + _resource.LoadAsset + ( + AssetUtility.GetUIDialogAsset(assetName), + Constant.AssetPriority.UIFormAsset, + new LoadAssetCallbacks( + (resourcePath, asset, duration, userData) => + { + Log.Debug(resourcePath); + Texture2D texture = asset as Texture2D; + if (texture != null) + { + Sprite newSprite = Sprite.Create( + texture, + new Rect(0, 0, texture.width, texture.height), + _defaultPivot, + _pixelsPerUnit); + _spriteCache.Add(assetName, newSprite); + callback?.Invoke(newSprite); + } + }, + (resourcePath, status, errorMessage, userData) => + { + Log.Error("Can not load icon '{0}' from '{1}' with error message '{2}'.", + assetName, + resourcePath, + errorMessage); + } + ) + ); + } + } + + private void OnDestroy() + { + _spriteCache.Clear(); + _resource = null; + } + } +} \ No newline at end of file diff --git a/Assets/GameMain/Scripts/CustomComponent/SpriteCacheComponent.cs.meta b/Assets/GameMain/Scripts/CustomComponent/SpriteCacheComponent.cs.meta new file mode 100644 index 0000000..68ce095 --- /dev/null +++ b/Assets/GameMain/Scripts/CustomComponent/SpriteCacheComponent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 42b4751aefa33c545a86f146a48536ee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Scripts/DataTable/DRDialog.cs b/Assets/GameMain/Scripts/DataTable/DRDialog.cs index f192b0e..92476e0 100644 --- a/Assets/GameMain/Scripts/DataTable/DRDialog.cs +++ b/Assets/GameMain/Scripts/DataTable/DRDialog.cs @@ -21,7 +21,7 @@ namespace DataTable /// /// 获取对话形式。 /// - public DialogUIMode UIMode { get; private set; } + public DialogFormMode UIMode { get; private set; } public override bool ParseDataRow(string dataRowString, object userData) { @@ -31,7 +31,7 @@ namespace DataTable m_Id = int.Parse(fields[index++]); index++; Title = fields[index++]; - UIMode = EnumUtility.Get(fields[index++]); + UIMode = EnumUtility.Get(fields[index++]); return true; } diff --git a/Assets/GameMain/Scripts/Definition/Enum/DialogUIMode.cs b/Assets/GameMain/Scripts/Definition/Enum/DialogFormMode.cs similarity index 91% rename from Assets/GameMain/Scripts/Definition/Enum/DialogUIMode.cs rename to Assets/GameMain/Scripts/Definition/Enum/DialogFormMode.cs index 8fff194..91c1a70 100644 --- a/Assets/GameMain/Scripts/Definition/Enum/DialogUIMode.cs +++ b/Assets/GameMain/Scripts/Definition/Enum/DialogFormMode.cs @@ -1,6 +1,6 @@ namespace Definition.Enum { - public enum DialogUIMode + public enum DialogFormMode { None = 0, diff --git a/Assets/GameMain/Scripts/Definition/Enum/DialogUIMode.cs.meta b/Assets/GameMain/Scripts/Definition/Enum/DialogFormMode.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/Definition/Enum/DialogUIMode.cs.meta rename to Assets/GameMain/Scripts/Definition/Enum/DialogFormMode.cs.meta diff --git a/Assets/GameMain/Scripts/Definition/Enum/UIFormId.cs b/Assets/GameMain/Scripts/Definition/Enum/UIFormId.cs index 68e9590..c55f37f 100644 --- a/Assets/GameMain/Scripts/Definition/Enum/UIFormId.cs +++ b/Assets/GameMain/Scripts/Definition/Enum/UIFormId.cs @@ -38,5 +38,20 @@ namespace UI /// 核心玩法A MVC测试界面。 /// CombineForm = 103, + + /// + /// 蒙版剧情对话界面。 + /// + MaskDialogForm = 104, + + /// + /// 底部剧情对话界面。 + /// + BottomDialogForm = 105, + + /// + /// 气泡剧情对话界面。 + /// + BubbleDialogForm = 106, } } diff --git a/Assets/GameMain/Scripts/Event/DialogNextLineRequestEventArgs.cs b/Assets/GameMain/Scripts/Event/DialogNextLineRequestEventArgs.cs new file mode 100644 index 0000000..0fe2c5d --- /dev/null +++ b/Assets/GameMain/Scripts/Event/DialogNextLineRequestEventArgs.cs @@ -0,0 +1,21 @@ +using GameFramework; +using GameFramework.Event; + +namespace Event +{ + public class DialogNextLineRequestEventArgs : GameEventArgs + { + public static readonly int EventId = typeof(DialogNextLineRequestEventArgs).GetHashCode(); + + public override int Id => EventId; + + public static DialogNextLineRequestEventArgs Create() + { + return ReferencePool.Acquire(); + } + + public override void Clear() + { + } + } +} diff --git a/Assets/GameMain/Scripts/Event/DialogNextLineRequestEventArgs.cs.meta b/Assets/GameMain/Scripts/Event/DialogNextLineRequestEventArgs.cs.meta new file mode 100644 index 0000000..687f94a --- /dev/null +++ b/Assets/GameMain/Scripts/Event/DialogNextLineRequestEventArgs.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: de8ad9563f91a584da8c775e9fa916b5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Scripts/Event/DialogSkipRequestEventArgs.cs b/Assets/GameMain/Scripts/Event/DialogSkipRequestEventArgs.cs new file mode 100644 index 0000000..a470899 --- /dev/null +++ b/Assets/GameMain/Scripts/Event/DialogSkipRequestEventArgs.cs @@ -0,0 +1,21 @@ +using GameFramework; +using GameFramework.Event; + +namespace Event +{ + public class DialogSkipRequestEventArgs : GameEventArgs + { + public static readonly int EventId = typeof(DialogSkipRequestEventArgs).GetHashCode(); + + public override int Id => EventId; + + public static DialogSkipRequestEventArgs Create() + { + return ReferencePool.Acquire(); + } + + public override void Clear() + { + } + } +} diff --git a/Assets/GameMain/Scripts/Event/DialogSkipRequestEventArgs.cs.meta b/Assets/GameMain/Scripts/Event/DialogSkipRequestEventArgs.cs.meta new file mode 100644 index 0000000..e677f6c --- /dev/null +++ b/Assets/GameMain/Scripts/Event/DialogSkipRequestEventArgs.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: df023ccfed92923439c0f66ca1bd457c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Scripts/Event/DialogStopRequestEventArgs.cs b/Assets/GameMain/Scripts/Event/DialogStopRequestEventArgs.cs new file mode 100644 index 0000000..e00aceb --- /dev/null +++ b/Assets/GameMain/Scripts/Event/DialogStopRequestEventArgs.cs @@ -0,0 +1,21 @@ +using GameFramework; +using GameFramework.Event; + +namespace Event +{ + public class DialogStopRequestEventArgs : GameEventArgs + { + public static readonly int EventId = typeof(DialogStopRequestEventArgs).GetHashCode(); + + public override int Id => EventId; + + public static DialogStopRequestEventArgs Create() + { + return ReferencePool.Acquire(); + } + + public override void Clear() + { + } + } +} diff --git a/Assets/GameMain/Scripts/Event/DialogStopRequestEventArgs.cs.meta b/Assets/GameMain/Scripts/Event/DialogStopRequestEventArgs.cs.meta new file mode 100644 index 0000000..cce9b8d --- /dev/null +++ b/Assets/GameMain/Scripts/Event/DialogStopRequestEventArgs.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8d49a133afe91ef4e9bc7502e7adc71b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Scripts/Procedure/ProcedureCombine.cs b/Assets/GameMain/Scripts/Procedure/ProcedureCombine.cs index 2d2be32..76a2302 100644 --- a/Assets/GameMain/Scripts/Procedure/ProcedureCombine.cs +++ b/Assets/GameMain/Scripts/Procedure/ProcedureCombine.cs @@ -87,7 +87,11 @@ namespace Procedure { base.OnEnter(procedureOwner); - InitializeProcedureState(); + //InitializeProcedureState(); + GameEntry.Dialog.Init(1); + + GameEntry.Dialog.StartDialog(1001); + //GameEntry.Dialog.StartDialog(1002); } /// @@ -109,12 +113,16 @@ namespace Procedure { base.OnUpdate(procedureOwner, elapseSeconds, realElapseSeconds); - if (TryUpdateRound(realElapseSeconds)) + if (GameEntry.Dialog.IsInitialized) { - return; + } - - TryRestartScene(procedureOwner, realElapseSeconds); + // if (TryUpdateRound(realElapseSeconds)) + // { + // return; + // } + // + // TryRestartScene(procedureOwner, realElapseSeconds); } #endregion diff --git a/Assets/GameMain/Scripts/UI/Dialog.meta b/Assets/GameMain/Scripts/UI/Dialog.meta new file mode 100644 index 0000000..567372b --- /dev/null +++ b/Assets/GameMain/Scripts/UI/Dialog.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d81d2a322c2e93948b4d5aa7e36c99f2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Scripts/UI/Dialog/Context.meta b/Assets/GameMain/Scripts/UI/Dialog/Context.meta new file mode 100644 index 0000000..7b46b65 --- /dev/null +++ b/Assets/GameMain/Scripts/UI/Dialog/Context.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ae5528a06773f5a45b75a99f619c2e22 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Scripts/UI/Dialog/Context/DialogFormContext.cs b/Assets/GameMain/Scripts/UI/Dialog/Context/DialogFormContext.cs new file mode 100644 index 0000000..9f1eb9c --- /dev/null +++ b/Assets/GameMain/Scripts/UI/Dialog/Context/DialogFormContext.cs @@ -0,0 +1,24 @@ +using Definition.Enum; + +namespace UI +{ + public class DialogFormContext : UIContext + { + public int ChapterId = 0; + public int DialogId = 0; + public string DialogTitle = string.Empty; + public DialogFormMode DialogUIMode = DialogFormMode.None; + + public int CurrentLineId = 0; + public string SpeakerId = string.Empty; + public string SpeakerName = string.Empty; + public ExpressionType Expression = ExpressionType.None; + public int Direction = 0; + public string Text = string.Empty; + public EmphasisType Emphasis = EmphasisType.None; + + public int LineIndex = -1; + public int TotalLines = 0; + public bool IsLastLine = false; + } +} diff --git a/Assets/GameMain/Scripts/UI/Dialog/Context/DialogFormContext.cs.meta b/Assets/GameMain/Scripts/UI/Dialog/Context/DialogFormContext.cs.meta new file mode 100644 index 0000000..3610a60 --- /dev/null +++ b/Assets/GameMain/Scripts/UI/Dialog/Context/DialogFormContext.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 38341401b5804de47bb0a9a1c79d20d8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Scripts/UI/Dialog/Controller.meta b/Assets/GameMain/Scripts/UI/Dialog/Controller.meta new file mode 100644 index 0000000..5d8ca16 --- /dev/null +++ b/Assets/GameMain/Scripts/UI/Dialog/Controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3c721a41db518484e9a1771952725489 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Scripts/UI/Dialog/Controller/DialogFormController.cs b/Assets/GameMain/Scripts/UI/Dialog/Controller/DialogFormController.cs new file mode 100644 index 0000000..592f803 --- /dev/null +++ b/Assets/GameMain/Scripts/UI/Dialog/Controller/DialogFormController.cs @@ -0,0 +1,167 @@ +using Definition.Enum; +using GameFramework.Event; +using UnityGameFramework.Runtime; + +namespace UI +{ + public class DialogFormController : IFormController + { + private DialogFormContext _context; + private DialogFormBase _dialogForm; + private int? _formSerialId; + private bool _pendingRefresh; + + public DialogFormController() + { + GameEntry.Event.Subscribe(OpenUIFormSuccessEventArgs.EventId, OnOpenUIFormSuccess); + GameEntry.Event.Subscribe(CloseUIFormCompleteEventArgs.EventId, OnCloseUIFormComplete); + } + + public int? OpenUI(DialogFormContext context) + { + if (context == null) + { + Log.Warning("DialogFormController open failed. context is null."); + return null; + } + + _context = context; + + UIFormId targetFormId = MapDialogFormId(context.DialogUIMode); + if (targetFormId == UIFormId.Undefined) + { + Log.Warning("DialogFormController open failed. Unsupported mode '{0}'.", context.DialogUIMode.ToString()); + return null; + } + + if (_dialogForm != null && _dialogForm.UIMode == context.DialogUIMode) + { + _dialogForm.StartDialog(context); + return _formSerialId; + } + + CloseUI(); + _pendingRefresh = true; + _formSerialId = GameEntry.UI.OpenUIForm(targetFormId, context); + return _formSerialId; + } + + public void CloseUI() + { + _pendingRefresh = false; + + if (_formSerialId.HasValue) + { + GameEntry.UI.CloseUIForm(_formSerialId.Value); + return; + } + + if (_dialogForm != null) + { + _dialogForm.Close(); + } + } + + public void OnDialogStarted(DialogFormContext context) + { + _context = context; + TryRefreshUI(); + } + + public void OnDialogLineChanged(DialogFormContext context) + { + _context = context; + TryRefreshUI(); + } + + public void OnDialogEnded(DialogFormContext context) + { + _context = context; + } + + ~DialogFormController() + { + GameEntry.Event.Unsubscribe(OpenUIFormSuccessEventArgs.EventId, OnOpenUIFormSuccess); + GameEntry.Event.Unsubscribe(CloseUIFormCompleteEventArgs.EventId, OnCloseUIFormComplete); + } + + private void TryRefreshUI() + { + if (_context == null) + { + return; + } + + if (_dialogForm == null) + { + _pendingRefresh = true; + return; + } + + _dialogForm.StartDialog(_context); + _pendingRefresh = false; + } + + private static UIFormId MapDialogFormId(DialogFormMode mode) + { + switch (mode) + { + case DialogFormMode.Mask: + return UIFormId.MaskDialogForm; + case DialogFormMode.BottomBox: + return UIFormId.BottomDialogForm; + case DialogFormMode.BubbleBox: + return UIFormId.BottomDialogForm; + default: + return UIFormId.Undefined; + } + } + + private void OnOpenUIFormSuccess(object sender, GameEventArgs e) + { + if (!(e is OpenUIFormSuccessEventArgs args)) + { + return; + } + + if (!_formSerialId.HasValue) + { + return; + } + + if (args.UIForm == null || args.UIForm.SerialId != _formSerialId.Value || args.UserData != _context) + { + return; + } + + _dialogForm = args.UIForm.Logic as DialogFormBase; + if (_dialogForm == null) + { + Log.Warning("DialogFormController open success but form logic is invalid."); + return; + } + + if (_pendingRefresh) + { + TryRefreshUI(); + } + } + + private void OnCloseUIFormComplete(object sender, GameEventArgs e) + { + if (!(e is CloseUIFormCompleteEventArgs args)) + { + return; + } + + if (args.SerialId != _formSerialId) + { + return; + } + + _dialogForm = null; + _formSerialId = null; + _pendingRefresh = false; + } + } +} diff --git a/Assets/GameMain/Scripts/UI/Dialog/Controller/DialogFormController.cs.meta b/Assets/GameMain/Scripts/UI/Dialog/Controller/DialogFormController.cs.meta new file mode 100644 index 0000000..dcfffc7 --- /dev/null +++ b/Assets/GameMain/Scripts/UI/Dialog/Controller/DialogFormController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 52cc4e85f8030334689fdcff90748161 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Scripts/UI/Dialog/View.meta b/Assets/GameMain/Scripts/UI/Dialog/View.meta new file mode 100644 index 0000000..87409a9 --- /dev/null +++ b/Assets/GameMain/Scripts/UI/Dialog/View.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c4b7102b2e334264398178de3d6325b4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Scripts/UI/Dialog/View/BottomDialogForm.cs b/Assets/GameMain/Scripts/UI/Dialog/View/BottomDialogForm.cs new file mode 100644 index 0000000..1c53f1a --- /dev/null +++ b/Assets/GameMain/Scripts/UI/Dialog/View/BottomDialogForm.cs @@ -0,0 +1,144 @@ +using Definition.Enum; +using TMPro; +using UnityEngine; +using UnityEngine.UI; +using UnityGameFramework.Runtime; + +namespace UI +{ + public class BottomDialogForm : DialogFormBase + { + public override DialogFormMode UIMode => DialogFormMode.BottomBox; + + [SerializeField] private TMP_Text _speakerNameText; + + [SerializeField] private TMP_Text _contentText; + + [SerializeField] private Image _leftSprite; + + [SerializeField] private Image _rightSprite; + + [SerializeField] private int _leftSpritePosition = 450; + + [SerializeField] private int _rightSpritePosition = -450; + + private readonly int _singleSpeakerCenterPosition = Screen.width / 2; + + private string _leftSpeakerToken = string.Empty; + private string _rightSpeakerToken = string.Empty; + + public override void StartDialog(DialogFormContext context) + { + if (context == null) + { + Log.Warning("BottomDialogForm start failed. context is null."); + return; + } + + _context = context; + + string speakerName = NormalizeValue(context.SpeakerName); + if (string.IsNullOrEmpty(speakerName)) + { + speakerName = NormalizeValue(context.SpeakerId); + } + + if (_speakerNameText != null) + { + _speakerNameText.text = speakerName; + } + + if (_contentText != null) + { + _contentText.text = NormalizeValue(context.Text); + } + + if (string.IsNullOrEmpty(speakerName)) + { + ClearSpeakerState(); + ApplySpeakerLayout(false, false); + return; + } + + bool isRightSpeaker = context.Direction > 0; + if (isRightSpeaker) + { + _rightSpeakerToken = speakerName; + } + else + { + _leftSpeakerToken = speakerName; + } + + bool hasLeftSpeaker = !string.IsNullOrEmpty(_leftSpeakerToken); + bool hasRightSpeaker = !string.IsNullOrEmpty(_rightSpeakerToken); + ApplySpeakerLayout(hasLeftSpeaker, hasRightSpeaker); + } + + protected override void OnClose(bool isShutdown, object userData) + { + ClearSpeakerState(); + ApplySpeakerLayout(false, false); + base.OnClose(isShutdown, userData); + } + + private void ClearSpeakerState() + { + _leftSpeakerToken = string.Empty; + _rightSpeakerToken = string.Empty; + } + + private void ApplySpeakerLayout(bool hasLeftSpeaker, bool hasRightSpeaker) + { + if (hasLeftSpeaker && hasRightSpeaker) + { + SetSpriteVisible(_leftSprite, true); + SetSpriteVisible(_rightSprite, true); + SetSpritePosition(_leftSprite.rectTransform, _leftSpritePosition); + SetSpritePosition(_rightSprite.rectTransform, _rightSpritePosition); + return; + } + + if (hasLeftSpeaker) + { + SetSpriteVisible(_leftSprite, true); + SetSpriteVisible(_rightSprite, false); + SetSpritePosition(_leftSprite.rectTransform, _singleSpeakerCenterPosition); + return; + } + + if (hasRightSpeaker) + { + SetSpriteVisible(_leftSprite, false); + SetSpriteVisible(_rightSprite, true); + SetSpritePosition(_rightSprite.rectTransform, -_singleSpeakerCenterPosition); + return; + } + + SetSpriteVisible(_leftSprite, false); + SetSpriteVisible(_rightSprite, false); + } + + private static void SetSpriteVisible(Image spriteImage, bool visible) + { + if (spriteImage == null) + { + return; + } + + spriteImage.gameObject.SetActive(visible); + } + + private static void SetSpritePosition(RectTransform rectTransform, float xPosition) + { + if (rectTransform == null) + { + return; + } + + Vector2 anchoredPosition = rectTransform.anchoredPosition; + anchoredPosition.x = xPosition; + rectTransform.anchoredPosition = anchoredPosition; + } + } +} \ No newline at end of file diff --git a/Assets/GameMain/Scripts/UI/Dialog/View/BottomDialogForm.cs.meta b/Assets/GameMain/Scripts/UI/Dialog/View/BottomDialogForm.cs.meta new file mode 100644 index 0000000..6a7766b --- /dev/null +++ b/Assets/GameMain/Scripts/UI/Dialog/View/BottomDialogForm.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ea6f55294a4cd2946a83649e7be82314 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Scripts/UI/Dialog/View/DialogFormBase.cs b/Assets/GameMain/Scripts/UI/Dialog/View/DialogFormBase.cs new file mode 100644 index 0000000..edfab3b --- /dev/null +++ b/Assets/GameMain/Scripts/UI/Dialog/View/DialogFormBase.cs @@ -0,0 +1,71 @@ +using Definition.Enum; +using Event; +using UnityEngine; + +namespace UI +{ + public abstract class DialogFormBase : UGuiForm + { + [SerializeField] protected float _playSpeed; + + protected DialogFormContext _context; + + public abstract DialogFormMode UIMode { get; } + + public abstract void StartDialog(DialogFormContext context); + + protected override void OnOpen(object userData) + { + base.OnOpen(userData); + + if (!(userData is DialogFormContext context)) + { + return; + } + + _context = context; + StartDialog(context); + } + + protected override void OnClose(bool isShutdown, object userData) + { + _context = null; + base.OnClose(isShutdown, userData); + } + + public void OnClickNextLine() + { + GameEntry.Event.Fire(this, DialogNextLineRequestEventArgs.Create()); + } + + public void OnClickSkipDialog() + { + GameEntry.Event.Fire(this, DialogSkipRequestEventArgs.Create()); + } + + public void OnClickStopDialog() + { + GameEntry.Event.Fire(this, DialogStopRequestEventArgs.Create()); + } + + protected static string NormalizeValue(string value) + { + if (string.IsNullOrEmpty(value)) + { + return string.Empty; + } + + if (string.Equals(value, "Null", System.StringComparison.OrdinalIgnoreCase)) + { + return string.Empty; + } + + if (string.Equals(value, "None", System.StringComparison.OrdinalIgnoreCase)) + { + return string.Empty; + } + + return value; + } + } +} diff --git a/Assets/GameMain/Scripts/UI/Dialog/View/DialogFormBase.cs.meta b/Assets/GameMain/Scripts/UI/Dialog/View/DialogFormBase.cs.meta new file mode 100644 index 0000000..bb6d8d5 --- /dev/null +++ b/Assets/GameMain/Scripts/UI/Dialog/View/DialogFormBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aafc42873758b514282b3a75e3ba4665 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Scripts/UI/Dialog/View/MaskDialogForm.cs b/Assets/GameMain/Scripts/UI/Dialog/View/MaskDialogForm.cs new file mode 100644 index 0000000..68fd91a --- /dev/null +++ b/Assets/GameMain/Scripts/UI/Dialog/View/MaskDialogForm.cs @@ -0,0 +1,38 @@ +using Definition.Enum; +using TMPro; +using UnityEngine; +using UnityEngine.UI; +using UnityGameFramework.Runtime; + +namespace UI +{ + public class MaskDialogForm : DialogFormBase + { + public override DialogFormMode UIMode => DialogFormMode.Mask; + + [SerializeField] private Image _maskImage; + + [SerializeField] private TMP_Text _text; + + public override void StartDialog(DialogFormContext context) + { + if (context == null) + { + Log.Warning("MaskDialogForm start failed. context is null."); + return; + } + + _context = context; + + if (_maskImage != null) + { + _maskImage.gameObject.SetActive(true); + } + + if (_text != null) + { + _text.text = NormalizeValue(context.Text); + } + } + } +} diff --git a/Assets/GameMain/Scripts/UI/Dialog/View/MaskDialogForm.cs.meta b/Assets/GameMain/Scripts/UI/Dialog/View/MaskDialogForm.cs.meta new file mode 100644 index 0000000..d4586ae --- /dev/null +++ b/Assets/GameMain/Scripts/UI/Dialog/View/MaskDialogForm.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5a63462640e70af40972b9841beafe6c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Scripts/Utility/AssetUtility.cs b/Assets/GameMain/Scripts/Utility/AssetUtility.cs index 4b9449a..f41d109 100644 --- a/Assets/GameMain/Scripts/Utility/AssetUtility.cs +++ b/Assets/GameMain/Scripts/Utility/AssetUtility.cs @@ -65,5 +65,10 @@ namespace CustomUtility { return Utility.Text.Format("Assets/GameMain/UI/UISounds/{0}.wav", assetName); } + + public static string GetUIDialogAsset(string assetName) + { + return Utility.Text.Format("Assets/GameMain/UI/Dialogs/{0}.prefab", assetName); + } } } diff --git a/Assets/GameMain/UI/UIForms/BottomDialogForm.prefab b/Assets/GameMain/UI/UIForms/BottomDialogForm.prefab new file mode 100644 index 0000000..ad6f356 --- /dev/null +++ b/Assets/GameMain/UI/UIForms/BottomDialogForm.prefab @@ -0,0 +1,934 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &577377382380353288 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 478704929657922221} + - component: {fileID: 3708131469420921886} + - component: {fileID: 1177229253130277070} + - component: {fileID: 8970091190510382761} + m_Layer: 5 + m_Name: NextLineButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &478704929657922221 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 577377382380353288} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4703471767818675053} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &3708131469420921886 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 577377382380353288} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1177229253130277070 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 577377382380353288} + m_CullTransparentMesh: 1 +--- !u!114 &8970091190510382761 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 577377382380353288} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 0 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 0} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2327325990879817607} + m_TargetAssemblyTypeName: UI.DialogFormBase, Assembly-CSharp + m_MethodName: OnClickNextLine + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &1001066407702705397 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3708143324325626536} + - component: {fileID: 6873615243070434848} + - component: {fileID: 6431296888118130931} + m_Layer: 5 + m_Name: ContentText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3708143324325626536 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1001066407702705397} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7192457896265437741} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -200, y: -100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6873615243070434848 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1001066407702705397} + m_CullTransparentMesh: 1 +--- !u!114 &6431296888118130931 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1001066407702705397} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: "\u674E\u8BEB" + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 99d811b0183246646a2ce8df996f4bca, type: 2} + m_sharedMaterial: {fileID: -1106088975554028259, guid: 99d811b0183246646a2ce8df996f4bca, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4293980400 + m_fontColor: {r: 0.9411765, g: 0.9411765, b: 0.9411765, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 70 + m_fontSizeBase: 70 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &1966594047748998563 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7192457896265437741} + m_Layer: 5 + m_Name: ContentArea + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7192457896265437741 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1966594047748998563} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8762364413705962150} + - {fileID: 3708143324325626536} + m_Father: {fileID: 2330152971407905255} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -50} + m_SizeDelta: {x: 0, y: -100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &2526382269717144677 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4594737505273760298} + - component: {fileID: 1858592913377441272} + - component: {fileID: 7945103967507868302} + m_Layer: 5 + m_Name: LeftSpeaker + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4594737505273760298 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2526382269717144677} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6089528910385973127} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 450, y: -200} + m_SizeDelta: {x: 900, y: 1205.4878} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1858592913377441272 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2526382269717144677} + m_CullTransparentMesh: 1 +--- !u!114 &7945103967507868302 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2526382269717144677} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &3736358320082617150 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6089528910385973127} + m_Layer: 5 + m_Name: SpeakerArea + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6089528910385973127 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3736358320082617150} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4594737505273760298} + - {fileID: 1023330169278438415} + m_Father: {fileID: 4703471767818675053} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3752068138017298928 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1792700702723432816} + - component: {fileID: 6515285980419930672} + - component: {fileID: 8566667250576683572} + m_Layer: 5 + m_Name: bg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1792700702723432816 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3752068138017298928} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5100528644975002445} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6515285980419930672 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3752068138017298928} + m_CullTransparentMesh: 1 +--- !u!114 &8566667250576683572 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3752068138017298928} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &4403804830056219076 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5100528644975002445} + m_Layer: 5 + m_Name: NameArea + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5100528644975002445 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4403804830056219076} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1792700702723432816} + - {fileID: 8619101080858191825} + m_Father: {fileID: 2330152971407905255} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 250, y: -50} + m_SizeDelta: {x: 500, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &4514918814497795030 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8762364413705962150} + - component: {fileID: 2347793963973952820} + - component: {fileID: 7254061520918156868} + m_Layer: 5 + m_Name: bg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8762364413705962150 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4514918814497795030} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7192457896265437741} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2347793963973952820 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4514918814497795030} + m_CullTransparentMesh: 1 +--- !u!114 &7254061520918156868 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4514918814497795030} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.39215687, g: 0.39215687, b: 0.39215687, a: 0.39215687} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &4995567450066526950 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4703471767818675053} + - component: {fileID: 4643264964412212504} + - component: {fileID: 2327325990879817607} + m_Layer: 5 + m_Name: BottomDialogForm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4703471767818675053 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4995567450066526950} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6089528910385973127} + - {fileID: 2330152971407905255} + - {fileID: 478704929657922221} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &4643264964412212504 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4995567450066526950} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 25 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &2327325990879817607 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4995567450066526950} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ea6f55294a4cd2946a83649e7be82314, type: 3} + m_Name: + m_EditorClassIdentifier: + _playSpeed: 0 + _speakerNameText: {fileID: 2470970474825277305} + _contentText: {fileID: 6431296888118130931} + _leftSprite: {fileID: 7945103967507868302} + _rightSprite: {fileID: 5385698520020721016} + _leftSpritePosition: 450 + _rightSpritePosition: -450 +--- !u!1 &7381337123922490182 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8619101080858191825} + - component: {fileID: 5148587339817138371} + - component: {fileID: 2470970474825277305} + m_Layer: 5 + m_Name: NameText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8619101080858191825 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7381337123922490182} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5100528644975002445} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 100, y: 0} + m_SizeDelta: {x: -200, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5148587339817138371 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7381337123922490182} + m_CullTransparentMesh: 1 +--- !u!114 &2470970474825277305 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7381337123922490182} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: "\u674E\u8BEB" + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 99d811b0183246646a2ce8df996f4bca, type: 2} + m_sharedMaterial: {fileID: -1106088975554028259, guid: 99d811b0183246646a2ce8df996f4bca, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4280163870 + m_fontColor: {r: 0.11764706, g: 0.11764706, b: 0.11764706, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 50 + m_fontSizeBase: 50 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &7436457223957886746 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1023330169278438415} + - component: {fileID: 23627497045646178} + - component: {fileID: 5385698520020721016} + m_Layer: 5 + m_Name: RightSpeaker + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1023330169278438415 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7436457223957886746} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6089528910385973127} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: -450, y: -200} + m_SizeDelta: {x: 900, y: 1205.4878} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &23627497045646178 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7436457223957886746} + m_CullTransparentMesh: 1 +--- !u!114 &5385698520020721016 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7436457223957886746} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &7992201661324843749 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2330152971407905255} + m_Layer: 5 + m_Name: DialogBox + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2330152971407905255 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7992201661324843749} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7192457896265437741} + - {fileID: 5100528644975002445} + m_Father: {fileID: 4703471767818675053} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 300} + m_SizeDelta: {x: 0, y: 600} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/Assets/GameMain/UI/UIForms/BottomDialogForm.prefab.meta b/Assets/GameMain/UI/UIForms/BottomDialogForm.prefab.meta new file mode 100644 index 0000000..81a89c4 --- /dev/null +++ b/Assets/GameMain/UI/UIForms/BottomDialogForm.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 75da5a4ba56425747be081b9b396ba4e +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/UI/UIForms/MaskDialogForm.prefab b/Assets/GameMain/UI/UIForms/MaskDialogForm.prefab new file mode 100644 index 0000000..fbe659d --- /dev/null +++ b/Assets/GameMain/UI/UIForms/MaskDialogForm.prefab @@ -0,0 +1,422 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &256497562328743555 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7307862436028937289} + - component: {fileID: 5693490679758014302} + - component: {fileID: 3049537029752604282} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7307862436028937289 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 256497562328743555} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6730913572669710148} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1600, y: 900} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5693490679758014302 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 256497562328743555} + m_CullTransparentMesh: 1 +--- !u!114 &3049537029752604282 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 256497562328743555} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: "\u76F8\u4F20" + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 99d811b0183246646a2ce8df996f4bca, type: 2} + m_sharedMaterial: {fileID: -1106088975554028259, guid: 99d811b0183246646a2ce8df996f4bca, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 80 + m_fontSizeBase: 80 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &4692228887313498605 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3823388611956485626} + - component: {fileID: 5658364238492869697} + - component: {fileID: 4516264451202920644} + - component: {fileID: 1141121294664198277} + m_Layer: 5 + m_Name: NextLineButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3823388611956485626 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4692228887313498605} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6730913572669710148} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &5658364238492869697 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4692228887313498605} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &4516264451202920644 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4692228887313498605} + m_CullTransparentMesh: 1 +--- !u!114 &1141121294664198277 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4692228887313498605} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 0 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 0} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 440091646659500568} + m_TargetAssemblyTypeName: UI.DialogFormBase, Assembly-CSharp + m_MethodName: OnClickNextLine + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &5632933866905369215 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4485858263841547480} + - component: {fileID: 5051123720036041340} + - component: {fileID: 5798302535966784477} + m_Layer: 5 + m_Name: Mask + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4485858263841547480 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5632933866905369215} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6730913572669710148} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5051123720036041340 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5632933866905369215} + m_CullTransparentMesh: 1 +--- !u!114 &5798302535966784477 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5632933866905369215} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &5808177156550932694 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6730913572669710148} + - component: {fileID: 440091646659500568} + - component: {fileID: 6496478377742295264} + m_Layer: 5 + m_Name: MaskDialogForm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6730913572669710148 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5808177156550932694} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4485858263841547480} + - {fileID: 7307862436028937289} + - {fileID: 3823388611956485626} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &440091646659500568 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5808177156550932694} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5a63462640e70af40972b9841beafe6c, type: 3} + m_Name: + m_EditorClassIdentifier: + _playSpeed: 0 + _maskImage: {fileID: 5798302535966784477} + _text: {fileID: 3049537029752604282} +--- !u!223 &6496478377742295264 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5808177156550932694} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 25 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 diff --git a/Assets/GameMain/UI/UIForms/MaskDialogForm.prefab.meta b/Assets/GameMain/UI/UIForms/MaskDialogForm.prefab.meta new file mode 100644 index 0000000..2c4ba5f --- /dev/null +++ b/Assets/GameMain/UI/UIForms/MaskDialogForm.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 59ac12de6091b7741bc2819cf790146f +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/UI/UISprites/Dialog.meta b/Assets/GameMain/UI/UISprites/Dialog.meta new file mode 100644 index 0000000..9f76b90 --- /dev/null +++ b/Assets/GameMain/UI/UISprites/Dialog.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ccd89cbb1579632438412d3b736e314a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Launcher.unity b/Assets/Launcher.unity index bac3db4..720e3fc 100644 --- a/Assets/Launcher.unity +++ b/Assets/Launcher.unity @@ -281,6 +281,7 @@ Transform: m_Children: - {fileID: 513208573} - {fileID: 1968988098} + - {fileID: 434859534} m_Father: {fileID: 1852670053} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &120093239 @@ -796,6 +797,50 @@ Transform: type: 3} m_PrefabInstance: {fileID: 343730742} m_PrefabAsset: {fileID: 0} +--- !u!1 &434859533 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 434859534} + - component: {fileID: 434859535} + m_Layer: 0 + m_Name: Dialog + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &434859534 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 434859533} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 119167776} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &434859535 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 434859533} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d6174838c30e460429e5628757bbf015, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &513208572 GameObject: m_ObjectHideFlags: 0 @@ -1067,7 +1112,7 @@ GameObject: - component: {fileID: 1968988098} - component: {fileID: 1968988099} m_Layer: 0 - m_Name: GameplayAComponent + m_Name: Combine m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -1097,7 +1142,7 @@ MonoBehaviour: m_GameObject: {fileID: 1968988097} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0103c893efce444d9c6fe671306746fe, type: 3} + m_Script: {fileID: 11500000, guid: cc0388c578bec9746813380eee9038d4, type: 3} m_Name: m_EditorClassIdentifier: _autoCollectChildren: 1 diff --git a/数据表/DialogLine.xlsx b/数据表/DialogLine.xlsx index 7caec299921935cbd514a55ac74097042be81107..e6680d4745b3117c686fc13e3a3b624d6e60ce68 100644 GIT binary patch delta 2161 zcmV-%2#)vHTG?8#wE+dP=HvNOlez&af7niFRjf3X0Cl1gQj0)r#=f=@v18eWwmTEA z#K6n2@D?~}8(M)FegA*o{daOcTB|C00qe?I4-riWia?86mU=Nnx3h6PK#}uYOJ3C) zhG+v0jf&HgTo@*53pchlV0{TL3MB2AFhjKT-Y|@vSc2j%2@V~^d2JQ<;b|Axe{k`{ z7l2bj`dESIl6#IDU~D=f+99RrkmlJ|EkFtk6)4c&VVY3<stc?-!Q+z+Up0=yTrEYE|02R3uOjzK)w#5{T2lWUx#|PEs zf)#gu5{^ADL0)W%ulLu_kGCBEMpgo@O}}M=j6xo^O}|&}vdgR47!@f=vzYW^n$9R? zw8sc}Xa*nkH~F>&wHyCGu^*E(Cg(GfG1_Nmg9G9oP_(&^|3vY#Cj-y{3E+vBlT!u& z03VVCA%AUeqc{-$e$xF1#PZ zCjJ{M{ZG^1e;Z$T@uNI4COlv`mlOXeM1CIx<$vzTPD$D0IXlCZ120aAfUm_}!Vm;u;QqIHWr^=ey?i>nk;1IBfZMN_Pb>`9bt{{1j-{+ELyGcTSwAU5kiF)+s4|Jm(*PIEUaK(<~Kl zDt}z#5EGW?a=G*_dD+{YD=!)e3U31@X3wSIr+Fe0e>zqQd?|wIc%MQRrSx9G4io=# zc)txJA1)}!-zmG4jdM>VkKb6vc7pApR(wy^z$52BBybHweMznWk}}ze^o7k>mQDQC z01B)8SIr{NVTz!hqj_%Ti&foxDZD*9B!ADDnDOkNbT5t*|IRmKU-@Ol(x;;UXNHn; z$1|{p|K2HuY99FBDS1`Li?$7;-d(@(@x7f&Ohp}5B-%Wx%;8v>4_fA>c*|f_KrT9n zh85AMCJINrn_=T4*Vq+Aw-pf_Z9t=_@#*vfma@tR98Ewsz3`*`K*B0N;H)DckbgiC z!O{3}`wmfeWkAoK|-d%-wXd^-wu`~!-tdex22OzYXbWocF z;7{$8)P`_M4tG1%Mnv@t%7=LyF@JOsi#FoMMZ|5y$VDvMh+7x2Y9l_nh;|5X+K)AYWDl1hK3M2r7Y% zhQR;2lyT78PKc9w=$TaN<#2cE+lUZV;*5ZxQk)YIRErA&f{HP2Lk6fAmwyDr7Ne?^ z6#+p4t_cVdaHAnjbq1)Iwgkj#?5J}?t0RY{I;Oilm;u==!+szB;Gery6zh|J13IH)A` z=qznXJ7WYkVAo8oqZaHtsDHI2haI)dKvOMLX)}YdAx5aA=WWOU<#|CsP@-Z2f>@RY zLaC*%HPwnx;jN9i4P}6w*l37SOQDWQ!S=r1EN@2l8`vy+WvVv552N?RL`mFs(QZd- z53Xoo?@`lYtu3dcHEazjt>v(zwHat?jatUcU~GaSJFC8nwIMC734aJmb4)<6)&@dp zt*<#+qfpky+=kN9T0>e|Yk8rgK?gI76R~eQOjR?~%}*^+YwE}*pR(J#y9YTeWvf(z zN9N`tR}#z&#)cN5#y%$?wy`Ug1pz@_I3^%iB?F;U($^f7P#vs|xecYIl7{?BB`Q(d z4pXbrpsSI>^A4qw9Dl|t;e}!_Hna%cJr)E6OVEZ4QTJUMh$D;EP*w37K(gOq%=_DSOmM+bhoNOHoBpmM=t~d6JZ$$%n;4BtTB`j z)kQ}Mv}o5gfpxYeMTNOa3*_Lo%NC1aZCx?s(<{-oG30n-WvKa4)z6i& z1ljn8D2WRKgL4p57{s%zF{BvUTSp9ho2Ut_v)GYMg}F)$l#FecEf&Mtx+_C&45^i& zpMdK-x)Q^#u79dc8IX;yy)xPuoP${HPF+#)?rd3ONHO#zju_~!wXO-Qv)B>6O`iBy ziGh+K-$%>xC2g@7)>ez5Uoq= z&oX}bUb6ky&0}OCr|9pq+EDP&!v~K13Xstd$5x%^c!t; zE_kj+;py*D(VK5a_#uVC`@?<@(sSS(!qQ)063P3GiRawQlbjXb(x2c4+>=BZYw$gO_QlBHUV^#;444@ z9+M#~JORFwUMwLT;E9)$Qw9J49~uAv7ytkO000000RSKX008O)li@5Cldvo=0dte! nEJXrf4U^$46_bw*1r|_C1qJ{B000vJ69AJ0006Kk00000<*@3R delta 2159 zcmV-#2$1*LTGv{zwE+dW2+dwnlez&af7(vf3am7h0Cl1gQj0)r#=f=@v18eWv^x{8 z#K6n2@D?~p8&ZK7egA*o{daOY-Krvb0qgQoPY@jt6oD3{%=LPLZkMz83`Nd!EqPID zn4ldvG|f&=Qel`VE!^1Bfb}`JD3G*c!c5S{d&4kxVgri1L2&3Gu1c%84^O+se};=E zz6P8SGR6u#m)vt)17p(>(H<#9hcwT&XaG`RC_sVs4$}d}KVA=3xj!2krRP++-;3if<1NL%MU{YS(zi^IQOLvE^atf`czLy)p)4WEFeamzCQC{g z9Wg>4>cL0-b-uQs_T&F2j$@L<mh7HMx)fME0{N1JD5pv+eRT~-aX4f!TxKvkKzHsdLcgl8EQ5Oe3*cGQhx#mWB7u;EKo^}oqk*rf%eSaxG0C5SyJ!N^u ze}BkuwL^>>p3CJjxRmu^cW%7sBq+QM7+<{9yf`gWp8E5tRN!+J%%}SdvM8kYDt4Ip zzlHZn82NBPLjKCwrS6=2Jbn7ga<=1a54GZZq6VId;=2HDU}z}FB|uQ7JD$C=1LXVqMIqRdMm4 zX8=K6rlO;T_dp93B}RV}!}223TMeVH^Wijjh2q^chzA!D+K9DAh+-9_TQvZowWOog zBmjR}r-U|yQ)0N^DHjp7Ge{qnE`MTdBUUcr#zw?0VqzoKF5=ckJi3UFHe%x>2O28pVz@u&E+RCts-zPTq|1tcAYozxf>_oB1o`qvKoHA@fS?lC zDhT{xFH}&z^#IG)fu5;N(hM2*iz?)R!0mAb#!-o&;z1bhQlHJ!9RP&E;PoJ%?Js$ zBp^tz6#+ql#RLSgtTlva?vLskG>^8tM@a9DHt#@?6I%s|;P!EtKimW|BO)u);2@JU zptF>acG?JRz^_oX zLaC*$b=8Vc;cc|J31x(w*eZxrOQMcx#rD41DsLzETi7albtbpH50m%BL`h8gXp@QD zflFH0d$hDzYr|=24O>G>YcXtTtp~bVqn5GI7?YsL%&P8UF2vEAfPbJg#{>jxts#`w z>YAlB3T30sO(>4m3gT$3< z=I$bw5-c>vgchO3z9b-~u}hW}0YP0jCLmZP4WU$0*DRG#9c;9@3B^%KL4KwZm8hi0 z)TlJ-YozeJL#ZT&v42WB#xR5dGzH1GUC1c-eAJw(41Y_J3wYl-r zkw8JNk^p5P=`qC;7*lJZhzCVV138XGFpEufs}^LU8=HC5LLe{^mVv;G(Ol~mLkZDb zw3I-LcGD6VXB{aT%vD+-2a`TqEQYbQ#Sl-gMB5V2;@uSy5r2Ja*@8@bW89Sp49-DJ zVQ^n+F;rt}E?QzB#WyX1aTYtWZ7@F*gGxryXKTcW`kGS+0gz&d@y^PS^P{R?N@D>s z@r_XuR|E#q2RO@C>SiO*dbE(Yfymb+71RJ=P|w-{0kHHjq#x@&D(0^=-pL~WC2{#9b2 zWQe!XqI^kPEQYaFVyIWl>fK)Y!izY|IjfrOyL!{z{POUBU!{9scz=+z4+V!8>~WFj z#pPSg_FvNTGrSrWZ^YRf|Gnn0hYXAt^J$qrvp>@6Ib1u}Ud|5iSUDWPPO?&OwB=j@C=A{o4hN8)Ls39j>I+OFc)v3KQhH@tvg&L0FSr4B-lEFj2NU@_ z$;>Z{idSjI#k0C1izSP2vi)Ia{vVTI4KcH%3pO1A3X|I?KmlZv94Rvah?7t$lLfg5 z&0bQI=qXeID3d)ZKmnYSekw2lu#>MUHUZa@<|;=4o0BdpK>>)9a4R|iOOvZBHUe@F zlaLP;llUtt0UVPfEIa|dlVB_%9OY$I+ENAp038|t02lxO000000096X0002#1e1>o l6_c_oF9LB3laC7;ll?3z0$vT1j|&x(J}ngnt|$Ni0002Q=~Dmz diff --git a/数据表/UIForm.txt b/数据表/UIForm.txt index f8de70d..53ec801 100644 --- a/数据表/UIForm.txt +++ b/数据表/UIForm.txt @@ -7,3 +7,6 @@ 101 设置 SettingForm Default False True 102 关于 AboutForm Default False True 103 组装玩法UI CombineForm Default False False + 104 Mask对话UI MaskDialogForm Default False False + 105 Bottom对话UI BottomDialogForm Default False False + 106 Bubble对话UI BubbleDialogForm Default True False diff --git a/数据表/UIForm.xlsx b/数据表/UIForm.xlsx index 9cfa1b13be1bd8dcdca0e720bc5e849634bab4cd..33a879a8eba683dd1f9fbab55ce967962e43a86c 100644 GIT binary patch delta 2123 zcmV-R2(e@($(2Wo;yL{%KZNGycR@fD=L{Sb}4MIfh$cs0Sk2Aq5|h z`q@++KyVBdNKnq=e>jTqkJo{b_Roe+IdIC-ZMENN7x$1YcrOm_jV%Xb(=<^t>SFl( zF}|N)FS=F3Qnk0@fbvvu$_+4An|uMBypIKf+RGaP(mKsBf&@gZN9!BcjNyhCLuX5 z$e4~tG(IHm0eP4E_)p~DP)h>@k|i3mAOo-g3fAM0WgG+m0PPQx+5{kf+m53+5Qgtp z+IK*{9}eks(rG0bO#{iSG%Jnvcul}bPy=SL6T07i%67nDyV+=k6rlXMT)$oA;PvOX zvT&}rp*g8GC~$q`;3_3qUY$1R@4t4Ro{&RXQe{a&D!f7On4-_yUw>J*qJv=w}_#nq) zp5ln4ml9V@I%#l`Fo>U?^O|>jR{RML)zA{f6LdlW2DJeY} znyGT-twuV_)No{(tTJg{FZCyIT!XknUgYdu$n65cO!;Zs)@^Hl>Za8#iopa0OAoW~ zLK!Kege7RZ7Ax?*@wV$MhgsxH?=<+hL0^LBeK14NAdr7@+|t3b!;-_FxWFmH8RQCb zcn%y0dF9}5VDhT*pOfCfr zN%3!GC#O=mmNWl=m_^#b_@b{{-~};UN^UnPAaDVCSdFc;untK-Z>H_ zcSlzcDZ0YF>$>`1F+i-s5!{udftLBbViq??aKAa4L2!3}&BOB674BWvg&RDnizm>; zgnDviMN;uR->w_dIo+ z`0fYbftdqv>+}F7G3y5qK}II=FeYM?n2(8_Nj#2;y-6&3Vk8t&)FPByr-hotvL8SS zHHoJ&5&tKDu``L)*vEc~7zyP$Ypy7_P75`OK+CGof~d5TlVL%$#E313mKi$>qNT>( zf~edWO$e`lV?tiIl}`w-9!*5pwK;u#1uCngP79*tMQlN|#MljygDsT(6fsf>yOu>I zxArQ1eLcI@fle*$A`_WuUSbmobe%&)>eQUO74Ry6Pd_1MyvbS!kBW0UrJK0HWWWS$*Qx>h?FbOJ@ON^ zPEPpuq&ejkbqaihS@hi{{9iTl7$aX8skwe4=Rg>o;l$$^&e0e?V|^FkBO$DNffJ5w z+X*8-X7va4?N5*%v$qI91`1z4aR})F001=vlK~GJe|?kRZqqOn#_y4Mhsa#B6b5LT zl1ydOP%es)pby|QUTcxqC3g68In->Epj(C13Y86MV;cWNi&Oz!H}*7jlD!4)a_6L6 z`uooB$mct@vGUUQwC5;bm=Y7*S||Yxks5U|shgnsWc}t6&=`lrg&rly1g{VSE7tXE z24h^4e=K1pXmH+K)^%2EARn>?+C)S;8#M4Cm&c&4vu1#x%NhuA-_viGO80ahVgj@p z4GA~Fox4B_34Ru$)l67i1eU?DWpL|;p>xa7XNOEkx^FKJjxM8i@^_FPeo<}PRh2Sh zh(ClrQjMzpAfREh$SQjteNhQLj%_lVzm|g^f5DK+>&onqTea8av}$`yxGFIo$YfR3 zq102gY|7-kC-(m2ydOQW^G+OZ$D`c%>91Bi>4;7{`TR4-T_u;CwTkWd{ZMpHM6{U> z#^Sg?9e>L%AqF3(7jM*NS#{ihEjIVlqwga6ot|tZA9_i@m0>C%&QHbmBtG0yjWsME ze^p^8WlvsqCV;1LOvF?`Z3~MZleeg(P%o^Re`cYLta!a zBTYX=$?n&9)UDbown}{m6I29NAbTo?r|Iw@kIlUK(cGt;Q-2Y%$ zH3R?v6aWAK000000RSKX003nVlNTmH0+JJxStdCG6$z7+CN%;)36skvKLUUelME+2 z0hg0VCm|fx1ONc-4*&od000000000103ZMW0K){6-UJ$xpC=FoH6#E4004SR B(qsSt delta 1951 zcmV;Q2VnTpP_<96lK};q#*}YPlb8W43#1CHB$WVlq7qVzlg|Mce^P z=~h<33m9A0Do1fdPymY8qEzb~-7aV0849dpO0cR{kfR+~G%Zd~GOj7F4cwSogK;I; zz>}1vT<2)xoTeCCz5&T>Y3tJ+BB{L`$lX8eh*0Vjk^umr~ha}2k@P!B}3M+!b5 z^|PrufZ!M^kf5B!e{mG!AFl%=?Vk;uGIGk&?X=%%A9u_aycY-e)|P{@X_}}>yBI!y zjPK{yi*D7hRPC)epdu5Tas$lOrdWV>ARobGcvNjKSTXD7{@AM$#Ko@odVl@=c+2o_ z#pAm4JrhLW^Uyy1LAgsWua+}ZBqW)HBn}g@Bngctl#qvZBJfdvo3Ag({rG>0Nl4CH zVw%!qOgsRJF8A@DD82zuO9KRxoh2HxAp@`h3J^uz{GkH?04)uZ+XNtg*^b*F6o&6B z^&Kqk$4e%=l8mO=TB(&rU9X8v5^HSZ8WPXEeGd?Cz@%vvDYg$EKj(*oLuL;zY2uto z!D5=tQQ-Q>Az4VHI6KVIkMEniF>)BkS%edskvV!L3_UE~znhh`cxFdJxC06qo1-J= z`PB1RcqA!iF3m{>Eqhvjq?p5Faqw7P5FE))Y2x*Kf9Rz+&X7`=7Pn~7{XP!KiiW3@ zWL$|9B*7f=XU8~amD)>mlU`Kd61-OVv{GEDmRc|98~LSiSWrgy+zn~!snkrD6K~S- znTCdtWwKISJfHGA5YEBeE>2?pD(zMY5#H#OW$BhVbHnVCMQeh8f{{n~^29hzSD0h8 zn8_7*D!j!kieVPT(mMs&&(UKr-A)k1CGj&RC2QR~9Phr7goK<#P%6j~C9tFPS%9A) z%R$6F4B^#dwC}6&HnMD<3MV3ad`kF|Ccol{ALnT7 zj(V-nJ*tqewERea;=_?cZhhp?6Hnrdd?sg-K<_ykicv$Fz!325q_L=X{@ zQV6b<(D1)9g3P55Tq~i8+j7>w)!OhP1lNmD50bmd%;?g86|Pm+;lIp^r`B1Pm?-+i zte~X>F9cX{mSgd{3Z^3{*H8o>MO3yy?J$U*7yisULtTa!;)6*9HQ|AFJ%Cs)a{v*& zK7dK|>H%buE0ehI5^Iy_cZrQj47$YDB!)H7F$x81F)E_hjhe)$9zYp2iE)=$|CQL7 z#H6dSy+(9@jEb5yS5!o=8#ReQtE#01Y064Xh6T|IV{JjS%Gg*Ctu(e4q^XV0goyob zOvncj6%!(Mk7i<7wK?_v3Yw}?J}rn=7i$Zm6~?BG>};uQuMr)W@Yb@p6w%tHudip- z+VZKD-O5CIn#$Tl0^MgDQ9d=1tw}VC((wteSc^}85p8@nUFBjetJcP6PeWD~M6X*D zF?_ZWyHAs7GU@mf=UB69MYQp$Ww@+bTRyd&wXz`E&RUy@;j@j{eVW7@J||Y6BHH-W zOf0L`md|GItNm#~v@N_g5yNL2vHQG6sP$9_NA;_o;{*AEi$k0-Cn0-yz4-13ws@h= zf$D)K(_C10c9g>zSl%Ate+YqJe%}RnPbse+;E1T&HZmyAsr4V7#UGF!voi@m1`2Rv zA4$jo004gjlYI{we{GY?YTG~*hWCZOgP5)xIVq&2ND3w)MT?X|>jxNHC-#6e<7!5| zEK{tc&^R##o8Vj^7m{9x6EJOEC(YA%B;_qSsa73pIsbpY!<_%jSPSn0-*^KdCyd%? zcBX_3pf%c;nl}SXC^Bj+qQXXx=8+Lm@;ZXWT$p=|9E%gj z63zq56pm%y9daSJjVg(M#X&=vZz^Pm3^PRU5R`_ zTzWTuZ3=#Ye~uZd?WO%zj_H8B{w+7g$>F+gED`m%OX@`lF2O2RJJ5m2=qlUZlkKi< ztN@LQ`ecI}^;q=kmmq}NMiC(6;bgp}1LZ1*DgyNqllCS#0+|StF()+wzzCCQCqDw?5R<7VI{}uH