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 7caec29..e6680d4 100644 Binary files a/数据表/DialogLine.xlsx and b/数据表/DialogLine.xlsx differ 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 9cfa1b1..33a879a 100644 Binary files a/数据表/UIForm.xlsx and b/数据表/UIForm.xlsx differ