From 67e6b33677e341d98b1c114621d252bd5af8618b Mon Sep 17 00:00:00 2001 From: SepComet <202308010230@stu.csust.edu.cn> Date: Sun, 8 Feb 2026 18:17:34 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=20Part=20?= =?UTF-8?q?=E5=9C=A8=E9=83=A8=E5=88=86=E6=94=BE=E7=BD=AE=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E7=9A=84=E6=83=85=E5=86=B5=E7=9B=B4=E6=8E=A5=E5=9B=9E=E5=88=B0?= =?UTF-8?q?=E5=8E=9F=E4=BD=8D=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GameMain/Scripts/Gameplay/CoreGameplayA/CombineComponent.cs | 2 +- .../GameMain/Scripts/UI/GameplayA/View/CombineDraggablePart.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Assets/GameMain/Scripts/Gameplay/CoreGameplayA/CombineComponent.cs b/Assets/GameMain/Scripts/Gameplay/CoreGameplayA/CombineComponent.cs index 6fa45f0..b4c880d 100644 --- a/Assets/GameMain/Scripts/Gameplay/CoreGameplayA/CombineComponent.cs +++ b/Assets/GameMain/Scripts/Gameplay/CoreGameplayA/CombineComponent.cs @@ -385,7 +385,7 @@ namespace CustomComponent /// private void RejectPlace(CombineDraggablePart part, string hint) { - part.ReturnToSpawn(); + part.ReturnToSpawnAnimated(); if (!string.IsNullOrEmpty(hint)) { diff --git a/Assets/GameMain/Scripts/UI/GameplayA/View/CombineDraggablePart.cs b/Assets/GameMain/Scripts/UI/GameplayA/View/CombineDraggablePart.cs index 746a1ee..e5a5571 100644 --- a/Assets/GameMain/Scripts/UI/GameplayA/View/CombineDraggablePart.cs +++ b/Assets/GameMain/Scripts/UI/GameplayA/View/CombineDraggablePart.cs @@ -340,7 +340,7 @@ namespace UI .SetUpdate(true); } - private void ReturnToSpawnAnimated() + public void ReturnToSpawnAnimated() { if (_spawnParent == null) { From 5973c1a4a761e3ae744a445224ef22e136b3a0b9 Mon Sep 17 00:00:00 2001 From: SepComet <202308010230@stu.csust.edu.cn> Date: Mon, 9 Feb 2026 10:23:25 +0800 Subject: [PATCH 2/6] =?UTF-8?q?-=20=E6=B7=BB=E5=8A=A0=E5=AF=B9=E8=AF=9D?= =?UTF-8?q?=E8=A1=A8=E7=BB=93=E6=9E=84=20-=20=E8=B0=83=E6=95=B4=E9=83=A8?= =?UTF-8?q?=E5=88=86=E7=B1=BB=E7=9A=84=E5=91=BD=E5=90=8D=E7=A9=BA=E9=97=B4?= =?UTF-8?q?=20-=20=E5=BC=95=E5=85=A5=20EnumUtility=20=E7=94=A8=E4=BA=8Estr?= =?UTF-8?q?ing=E4=B8=8Eenum=E7=9A=84=E8=BD=AC=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 10 ++- Assets/GameMain/DataTables/Dialog.txt | 7 ++ Assets/GameMain/DataTables/Dialog.txt.meta | 7 ++ Assets/GameMain/DataTables/DialogLine.txt | 13 ++++ .../GameMain/DataTables/DialogLine.txt.meta | 7 ++ Assets/GameMain/DataTables/Scene.txt | 1 - Assets/GameMain/DataTables/UIForm.txt | 1 - .../DataTable/BinaryReaderExtension.cs | 2 +- Assets/GameMain/Scripts/DataTable/DRDialog.cs | 39 +++++++++++ .../Scripts/DataTable/DRDialog.cs.meta | 11 +++ .../Scripts/DataTable/DRDialogLine.cs | 64 ++++++++++++++++++ .../Scripts/DataTable/DRDialogLine.cs.meta | 11 +++ Assets/GameMain/Scripts/DataTable/DREntity.cs | 10 +-- Assets/GameMain/Scripts/DataTable/DRMusic.cs | 2 +- Assets/GameMain/Scripts/DataTable/DRScene.cs | 18 +---- Assets/GameMain/Scripts/DataTable/DRSound.cs | 18 +---- Assets/GameMain/Scripts/DataTable/DRUIForm.cs | 14 +--- .../GameMain/Scripts/DataTable/DRUISound.cs | 14 +--- .../Scripts/DataTable/DataTableExtension.cs | 12 +--- .../Debugger/ChangeLanguageDebuggerWindow.cs | 1 + .../Constant/Constant.AssetPriority.cs | 2 +- .../Definition/Constant/Constant.Layer.cs | 2 +- .../Definition/Constant/Constant.Setting.cs | 2 +- .../Scripts/Definition/Enum/DialogUIMode.cs | 22 ++++++ .../Definition/Enum/DialogUIMode.cs.meta | 3 + .../Scripts/Definition/Enum/EmphasisType.cs | 13 ++++ .../Definition/Enum/EmphasisType.cs.meta | 11 +++ .../Scripts/Definition/Enum/ExpressionType.cs | 14 ++++ .../Definition/Enum/ExpressionType.cs.meta | 11 +++ .../{UI => Definition/Enum}/UIFormId.cs | 0 .../{UI => Definition/Enum}/UIFormId.cs.meta | 0 .../Scripts/Entity/EntityExtension.cs | 2 + .../Procedure/BuiltIn/ProcedureChangeScene.cs | 10 +-- .../Procedure/BuiltIn/ProcedureLaunch.cs | 10 +-- .../Procedure/BuiltIn/ProcedurePreload.cs | 15 ++-- .../GameMain/Scripts/Sound/SoundExtension.cs | 3 + Assets/GameMain/Scripts/UI/Base.meta | 8 +++ .../Scripts/UI/{ => Base}/IFormController.cs | 0 .../UI/{ => Base}/IFormController.cs.meta | 0 .../Scripts/UI/{ => Base}/UGuiForm.cs | 0 .../Scripts/UI/{ => Base}/UGuiForm.cs.meta | 0 .../Scripts/UI/{ => Base}/UIContext.cs | 0 .../Scripts/UI/{ => Base}/UIContext.cs.meta | 0 .../UI/{GameplayA.meta => Combine.meta} | 0 .../UI/{GameplayA => Combine}/Context.meta | 0 .../Context/CombineFormContext.cs | 0 .../Context/CombineFormContext.cs.meta | 0 .../Context/CombinePartContext.cs | 0 .../Context/CombinePartContext.cs.meta | 0 .../Context/CombineSlotContext.cs | 0 .../Context/CombineSlotContext.cs.meta | 0 .../UI/{GameplayA => Combine}/Controller.meta | 0 .../Controller/CombineFormController.cs | 0 .../Controller/CombineFormController.cs.meta | 0 .../UI/{GameplayA => Combine}/View.meta | 0 .../View/CombineDraggablePart.cs | 0 .../View/CombineDraggablePart.cs.meta | 0 .../View/CombineForm.cs | 0 .../View/CombineForm.cs.meta | 0 .../View/CombineSlot.cs | 0 .../View/CombineSlot.cs.meta | 0 Assets/GameMain/Scripts/UI/UIExtension.cs | 12 ++-- .../GameMain/Scripts/Utility/AssetUtility.cs | 2 +- .../GameMain/Scripts/Utility/EnumUtility.cs | 27 ++++++++ .../Scripts/Utility/EnumUtility.cs.meta | 11 +++ .../GameMain/Scripts/Utility/LitJsonHelper.cs | 2 +- Assets/GameMain/Scripts/Utility/WebUtility.cs | 11 +-- ProjectSettings/ProjectSettings.asset | 22 ++++-- 数据表/Dialog.txt | 7 ++ 数据表/Dialog.xlsx | Bin 0 -> 10774 bytes 数据表/DialogLine.txt | 13 ++++ 数据表/DialogLine.xlsx | Bin 0 -> 11607 bytes 数据表/Scene.txt | 1 - 数据表/UIForm.txt | 1 - 数据表/Weapon.txt | 5 -- 数据表/Weapon.xlsx | Bin 10510 -> 0 bytes 数据表/convert.py | 50 ++++++++------ 77 files changed, 397 insertions(+), 157 deletions(-) create mode 100644 Assets/GameMain/DataTables/Dialog.txt create mode 100644 Assets/GameMain/DataTables/Dialog.txt.meta create mode 100644 Assets/GameMain/DataTables/DialogLine.txt create mode 100644 Assets/GameMain/DataTables/DialogLine.txt.meta create mode 100644 Assets/GameMain/Scripts/DataTable/DRDialog.cs create mode 100644 Assets/GameMain/Scripts/DataTable/DRDialog.cs.meta create mode 100644 Assets/GameMain/Scripts/DataTable/DRDialogLine.cs create mode 100644 Assets/GameMain/Scripts/DataTable/DRDialogLine.cs.meta create mode 100644 Assets/GameMain/Scripts/Definition/Enum/DialogUIMode.cs create mode 100644 Assets/GameMain/Scripts/Definition/Enum/DialogUIMode.cs.meta create mode 100644 Assets/GameMain/Scripts/Definition/Enum/EmphasisType.cs create mode 100644 Assets/GameMain/Scripts/Definition/Enum/EmphasisType.cs.meta create mode 100644 Assets/GameMain/Scripts/Definition/Enum/ExpressionType.cs create mode 100644 Assets/GameMain/Scripts/Definition/Enum/ExpressionType.cs.meta rename Assets/GameMain/Scripts/{UI => Definition/Enum}/UIFormId.cs (100%) rename Assets/GameMain/Scripts/{UI => Definition/Enum}/UIFormId.cs.meta (100%) create mode 100644 Assets/GameMain/Scripts/UI/Base.meta rename Assets/GameMain/Scripts/UI/{ => Base}/IFormController.cs (100%) rename Assets/GameMain/Scripts/UI/{ => Base}/IFormController.cs.meta (100%) rename Assets/GameMain/Scripts/UI/{ => Base}/UGuiForm.cs (100%) rename Assets/GameMain/Scripts/UI/{ => Base}/UGuiForm.cs.meta (100%) rename Assets/GameMain/Scripts/UI/{ => Base}/UIContext.cs (100%) rename Assets/GameMain/Scripts/UI/{ => Base}/UIContext.cs.meta (100%) rename Assets/GameMain/Scripts/UI/{GameplayA.meta => Combine.meta} (100%) rename Assets/GameMain/Scripts/UI/{GameplayA => Combine}/Context.meta (100%) rename Assets/GameMain/Scripts/UI/{GameplayA => Combine}/Context/CombineFormContext.cs (100%) rename Assets/GameMain/Scripts/UI/{GameplayA => Combine}/Context/CombineFormContext.cs.meta (100%) rename Assets/GameMain/Scripts/UI/{GameplayA => Combine}/Context/CombinePartContext.cs (100%) rename Assets/GameMain/Scripts/UI/{GameplayA => Combine}/Context/CombinePartContext.cs.meta (100%) rename Assets/GameMain/Scripts/UI/{GameplayA => Combine}/Context/CombineSlotContext.cs (100%) rename Assets/GameMain/Scripts/UI/{GameplayA => Combine}/Context/CombineSlotContext.cs.meta (100%) rename Assets/GameMain/Scripts/UI/{GameplayA => Combine}/Controller.meta (100%) rename Assets/GameMain/Scripts/UI/{GameplayA => Combine}/Controller/CombineFormController.cs (100%) rename Assets/GameMain/Scripts/UI/{GameplayA => Combine}/Controller/CombineFormController.cs.meta (100%) rename Assets/GameMain/Scripts/UI/{GameplayA => Combine}/View.meta (100%) rename Assets/GameMain/Scripts/UI/{GameplayA => Combine}/View/CombineDraggablePart.cs (100%) rename Assets/GameMain/Scripts/UI/{GameplayA => Combine}/View/CombineDraggablePart.cs.meta (100%) rename Assets/GameMain/Scripts/UI/{GameplayA => Combine}/View/CombineForm.cs (100%) rename Assets/GameMain/Scripts/UI/{GameplayA => Combine}/View/CombineForm.cs.meta (100%) rename Assets/GameMain/Scripts/UI/{GameplayA => Combine}/View/CombineSlot.cs (100%) rename Assets/GameMain/Scripts/UI/{GameplayA => Combine}/View/CombineSlot.cs.meta (100%) create mode 100644 Assets/GameMain/Scripts/Utility/EnumUtility.cs create mode 100644 Assets/GameMain/Scripts/Utility/EnumUtility.cs.meta create mode 100644 数据表/Dialog.txt create mode 100644 数据表/Dialog.xlsx create mode 100644 数据表/DialogLine.txt create mode 100644 数据表/DialogLine.xlsx delete mode 100644 数据表/Weapon.txt delete mode 100644 数据表/Weapon.xlsx diff --git a/.gitignore b/.gitignore index 29742cc..eb6e5d3 100644 --- a/.gitignore +++ b/.gitignore @@ -84,4 +84,12 @@ crashlytics-build.properties /Assets/RawResources -/.vscode \ No newline at end of file +/.vscode + +# Excel temporary lock files +~$*.xls +~$*.xlsx +~$*.xlsm +~$*.xlsb + +/数据表/__pycache__ \ No newline at end of file diff --git a/Assets/GameMain/DataTables/Dialog.txt b/Assets/GameMain/DataTables/Dialog.txt new file mode 100644 index 0000000..a3e4690 --- /dev/null +++ b/Assets/GameMain/DataTables/Dialog.txt @@ -0,0 +1,7 @@ +# 对话标识表 筛选用数据 +# Id Title UIMode ChapterId +# int string DialogUIMode int +# 对话编号 策划备注 对话标识 对话形式 章节编号 + 1001 第一章介绍 Chapter1_Intro Mask 1.001 + 1002 第一章主流程 Chapter1_Main BottomBox 1.002 + 1003 第一章玩法开始前闲聊 Chapter1_SmallTalk1 BubbleBox 1.003 diff --git a/Assets/GameMain/DataTables/Dialog.txt.meta b/Assets/GameMain/DataTables/Dialog.txt.meta new file mode 100644 index 0000000..435ba4a --- /dev/null +++ b/Assets/GameMain/DataTables/Dialog.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 788b17ff3aef4cd4fb6c808826c875e5 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/DataTables/DialogLine.txt b/Assets/GameMain/DataTables/DialogLine.txt new file mode 100644 index 0000000..49a55c7 --- /dev/null +++ b/Assets/GameMain/DataTables/DialogLine.txt @@ -0,0 +1,13 @@ +# 对话内容表 筛选用数据 +# Id SpeakerId Expression SpeakerName Direction Text Emphasis ChapterId DialogId +# int int ExpressionType string int string EmphasisType int int +# 对话行编号 策划备注 说话人Id 表情 显示人名 说话朝向 说话内容 演出效果 章节Id 对话Id + 100100001 Id规则为 Null Null Null 0 相传。 1.00100001 1001.00001 + 100100002 第1位数为章节Id Null Null Null 0 Mask。 1.00100002 1001.00002 + 100100003 第2-4位数为对话Id Null Null Null 0 很好。 1.00100003 1001.00003 + 100200001 第5-9位数为对话行Id Xu Normal 徐晟壹 0 你好,王。 1.00200001 1002.00001 + 100200002 Wang Normal 王可嘉 1 你好,徐。 1.00200002 1002.00002 + 100200003 Master Normal 李诫 1 你们好。 1.00200003 1002.00003 + 100300001 Npc1 Null Null 0 这人谁啊? 1.00300001 1003.00001 + 100300002 Npc2 Null Null 0 不知道啊? 1.00300002 1003.00002 + 100300003 Npc1 Null Null 0 不知道你在这干嘛。 1.00300003 1003.00003 diff --git a/Assets/GameMain/DataTables/DialogLine.txt.meta b/Assets/GameMain/DataTables/DialogLine.txt.meta new file mode 100644 index 0000000..316dc2f --- /dev/null +++ b/Assets/GameMain/DataTables/DialogLine.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 378604b840f56ae49831978cf0e0a6ea +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/DataTables/Scene.txt b/Assets/GameMain/DataTables/Scene.txt index 29826e2..6aecfae 100644 --- a/Assets/GameMain/DataTables/Scene.txt +++ b/Assets/GameMain/DataTables/Scene.txt @@ -5,4 +5,3 @@ 1 菜单场景 Menu 1 2 战斗场景 Main 2 3 压力测试场景 StressTest 0 - 4 玩法A测试场景 GameplayA 0 \ No newline at end of file diff --git a/Assets/GameMain/DataTables/UIForm.txt b/Assets/GameMain/DataTables/UIForm.txt index f2b96f5..6b11bd8 100644 --- a/Assets/GameMain/DataTables/UIForm.txt +++ b/Assets/GameMain/DataTables/UIForm.txt @@ -6,4 +6,3 @@ 100 主菜单 MenuForm Default False True 101 设置 SettingForm Default False True 102 关于 AboutForm Default False True - 103 �����淨A MVC���Խ��� CombineForm Default False True diff --git a/Assets/GameMain/Scripts/DataTable/BinaryReaderExtension.cs b/Assets/GameMain/Scripts/DataTable/BinaryReaderExtension.cs index c38ba21..585d668 100644 --- a/Assets/GameMain/Scripts/DataTable/BinaryReaderExtension.cs +++ b/Assets/GameMain/Scripts/DataTable/BinaryReaderExtension.cs @@ -9,7 +9,7 @@ using System; using System.IO; using UnityEngine; -namespace StarForce +namespace DataTable { public static class BinaryReaderExtension { diff --git a/Assets/GameMain/Scripts/DataTable/DRDialog.cs b/Assets/GameMain/Scripts/DataTable/DRDialog.cs new file mode 100644 index 0000000..91274f2 --- /dev/null +++ b/Assets/GameMain/Scripts/DataTable/DRDialog.cs @@ -0,0 +1,39 @@ +using CustomUtility; +using Definition.Enum; +using UnityGameFramework.Runtime; + +namespace DataTable +{ + public class DRDialog : DataRowBase + { + private int m_Id; + + /// + /// 获取对话编号。 + /// + public override int Id => m_Id; + + /// + /// 获取对话标识。 + /// + public string Title { get; private set; } + + /// + /// 获取对话形式。 + /// + public DialogUIMode UIMode { get; private set; } + + public override bool ParseDataRow(string dataRowString, object userData) + { + string[] fields = dataRowString.Split('\t'); + + int index = 1; + m_Id = int.Parse(fields[index++]); + index++; + Title = fields[index++]; + UIMode = EnumUtility.Get(fields[index++]); + + return true; + } + } +} \ No newline at end of file diff --git a/Assets/GameMain/Scripts/DataTable/DRDialog.cs.meta b/Assets/GameMain/Scripts/DataTable/DRDialog.cs.meta new file mode 100644 index 0000000..a22d4d9 --- /dev/null +++ b/Assets/GameMain/Scripts/DataTable/DRDialog.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fb12692f2a7e6174eae3b0d28c769e55 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Scripts/DataTable/DRDialogLine.cs b/Assets/GameMain/Scripts/DataTable/DRDialogLine.cs new file mode 100644 index 0000000..f211f38 --- /dev/null +++ b/Assets/GameMain/Scripts/DataTable/DRDialogLine.cs @@ -0,0 +1,64 @@ +using CustomUtility; +using Definition.Enum; +using UnityGameFramework.Runtime; + +namespace DataTable +{ + public class DRDialogLine : DataRowBase + { + private int m_Id; + + /// + /// 获取对话行编号 + /// + public override int Id { get; } + + /// + /// 获取说话人 Id。 + /// + public string SpeakerId { get; private set; } + + /// + /// 获取说话人表情。 + /// + public ExpressionType Expression { get; private set; } + + /// + /// 获取说话人显示名。 + /// + public string SpeakerName { get; private set; } + + /// + /// 获取说话人朝向。 + /// + public int Direction { get; private set; } + + /// + /// 获取对话内容。 + /// + public string Text { get; private set; } + + /// + /// 获取对话效果。 + /// + public EmphasisType Emphasis { get; private set; } + + public override bool ParseDataRow(string dataRowString, object userData) + { + string[] fields = dataRowString.Split('\t'); + + int index = 0; + index++; + m_Id = int.Parse(fields[index++]); + index++; + SpeakerId = fields[index++]; + Expression = EnumUtility.Get(fields[index++]); + SpeakerName = fields[index++]; + Direction = int.Parse(fields[index++]); + Text = fields[index++]; + Emphasis = EnumUtility.Get(fields[index++]); + + return true; + } + } +} \ No newline at end of file diff --git a/Assets/GameMain/Scripts/DataTable/DRDialogLine.cs.meta b/Assets/GameMain/Scripts/DataTable/DRDialogLine.cs.meta new file mode 100644 index 0000000..d4e701e --- /dev/null +++ b/Assets/GameMain/Scripts/DataTable/DRDialogLine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fc6d3e8e61ab627488e22bb5fc28f95d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Scripts/DataTable/DREntity.cs b/Assets/GameMain/Scripts/DataTable/DREntity.cs index 84fe1b2..e89ffa6 100644 --- a/Assets/GameMain/Scripts/DataTable/DREntity.cs +++ b/Assets/GameMain/Scripts/DataTable/DREntity.cs @@ -16,7 +16,7 @@ using System.Text; using UnityEngine; using UnityGameFramework.Runtime; -namespace StarForce +namespace DataTable { /// /// 实体表。 @@ -28,13 +28,7 @@ namespace StarForce /// /// 获取实体编号。 /// - public override int Id - { - get - { - return m_Id; - } - } + public override int Id => m_Id; /// /// 获取资源名称。 diff --git a/Assets/GameMain/Scripts/DataTable/DRMusic.cs b/Assets/GameMain/Scripts/DataTable/DRMusic.cs index 7bad7ce..83b2a31 100644 --- a/Assets/GameMain/Scripts/DataTable/DRMusic.cs +++ b/Assets/GameMain/Scripts/DataTable/DRMusic.cs @@ -16,7 +16,7 @@ using System.Text; using UnityEngine; using UnityGameFramework.Runtime; -namespace StarForce +namespace DataTable { /// /// 音乐配置表。 diff --git a/Assets/GameMain/Scripts/DataTable/DRScene.cs b/Assets/GameMain/Scripts/DataTable/DRScene.cs index af6154e..d68a454 100644 --- a/Assets/GameMain/Scripts/DataTable/DRScene.cs +++ b/Assets/GameMain/Scripts/DataTable/DRScene.cs @@ -1,22 +1,8 @@ -//------------------------------------------------------------ -// Game Framework -// Copyright © 2013-2021 Jiang Yin. All rights reserved. -// Homepage: https://gameframework.cn/ -// Feedback: mailto:ellan@gameframework.cn -//------------------------------------------------------------ -// 此文件由工具自动生成,请勿直接修改。 -// 生成时间:2021-06-16 21:54:35.610 -//------------------------------------------------------------ - -using GameFramework; -using System; -using System.Collections.Generic; -using System.IO; +using System.IO; using System.Text; -using UnityEngine; using UnityGameFramework.Runtime; -namespace StarForce +namespace DataTable { /// /// 场景配置表。 diff --git a/Assets/GameMain/Scripts/DataTable/DRSound.cs b/Assets/GameMain/Scripts/DataTable/DRSound.cs index 0ce1445..fe12887 100644 --- a/Assets/GameMain/Scripts/DataTable/DRSound.cs +++ b/Assets/GameMain/Scripts/DataTable/DRSound.cs @@ -1,22 +1,8 @@ -//------------------------------------------------------------ -// Game Framework -// Copyright © 2013-2021 Jiang Yin. All rights reserved. -// Homepage: https://gameframework.cn/ -// Feedback: mailto:ellan@gameframework.cn -//------------------------------------------------------------ -// 此文件由工具自动生成,请勿直接修改。 -// 生成时间:2021-06-16 21:54:35.625 -//------------------------------------------------------------ - -using GameFramework; -using System; -using System.Collections.Generic; -using System.IO; +using System.IO; using System.Text; -using UnityEngine; using UnityGameFramework.Runtime; -namespace StarForce +namespace DataTable { /// /// 声音配置表。 diff --git a/Assets/GameMain/Scripts/DataTable/DRUIForm.cs b/Assets/GameMain/Scripts/DataTable/DRUIForm.cs index 80f914b..712d3be 100644 --- a/Assets/GameMain/Scripts/DataTable/DRUIForm.cs +++ b/Assets/GameMain/Scripts/DataTable/DRUIForm.cs @@ -1,14 +1,4 @@ -//------------------------------------------------------------ -// Game Framework -// Copyright © 2013-2021 Jiang Yin. All rights reserved. -// Homepage: https://gameframework.cn/ -// Feedback: mailto:ellan@gameframework.cn -//------------------------------------------------------------ -// 此文件由工具自动生成,请勿直接修改。 -// 生成时间:2021-06-16 21:54:35.652 -//------------------------------------------------------------ - -using GameFramework; +using GameFramework; using System; using System.Collections.Generic; using System.IO; @@ -16,7 +6,7 @@ using System.Text; using UnityEngine; using UnityGameFramework.Runtime; -namespace StarForce +namespace DataTable { /// /// 界面配置表。 diff --git a/Assets/GameMain/Scripts/DataTable/DRUISound.cs b/Assets/GameMain/Scripts/DataTable/DRUISound.cs index e303c18..db77bc7 100644 --- a/Assets/GameMain/Scripts/DataTable/DRUISound.cs +++ b/Assets/GameMain/Scripts/DataTable/DRUISound.cs @@ -1,14 +1,4 @@ -//------------------------------------------------------------ -// Game Framework -// Copyright © 2013-2021 Jiang Yin. All rights reserved. -// Homepage: https://gameframework.cn/ -// Feedback: mailto:ellan@gameframework.cn -//------------------------------------------------------------ -// 此文件由工具自动生成,请勿直接修改。 -// 生成时间:2021-06-16 21:54:35.666 -//------------------------------------------------------------ - -using GameFramework; +using GameFramework; using System; using System.Collections.Generic; using System.IO; @@ -16,7 +6,7 @@ using System.Text; using UnityEngine; using UnityGameFramework.Runtime; -namespace StarForce +namespace DataTable { /// /// 声音配置表。 diff --git a/Assets/GameMain/Scripts/DataTable/DataTableExtension.cs b/Assets/GameMain/Scripts/DataTable/DataTableExtension.cs index 5e82897..b496f91 100644 --- a/Assets/GameMain/Scripts/DataTable/DataTableExtension.cs +++ b/Assets/GameMain/Scripts/DataTable/DataTableExtension.cs @@ -1,16 +1,10 @@ -//------------------------------------------------------------ -// Game Framework -// Copyright © 2013-2021 Jiang Yin. All rights reserved. -// Homepage: https://gameframework.cn/ -// Feedback: mailto:ellan@gameframework.cn -//------------------------------------------------------------ - -using GameFramework.DataTable; +using GameFramework.DataTable; using System; +using Definition; using UnityEngine; using UnityGameFramework.Runtime; -namespace StarForce +namespace DataTable { public static class DataTableExtension { diff --git a/Assets/GameMain/Scripts/Debugger/ChangeLanguageDebuggerWindow.cs b/Assets/GameMain/Scripts/Debugger/ChangeLanguageDebuggerWindow.cs index 32d46c4..b1632bb 100644 --- a/Assets/GameMain/Scripts/Debugger/ChangeLanguageDebuggerWindow.cs +++ b/Assets/GameMain/Scripts/Debugger/ChangeLanguageDebuggerWindow.cs @@ -5,6 +5,7 @@ // Feedback: mailto:ellan@gameframework.cn //------------------------------------------------------------ +using Definition; using GameFramework.Debugger; using GameFramework.Localization; using UnityEngine; diff --git a/Assets/GameMain/Scripts/Definition/Constant/Constant.AssetPriority.cs b/Assets/GameMain/Scripts/Definition/Constant/Constant.AssetPriority.cs index 9d1c0b9..6c863b6 100644 --- a/Assets/GameMain/Scripts/Definition/Constant/Constant.AssetPriority.cs +++ b/Assets/GameMain/Scripts/Definition/Constant/Constant.AssetPriority.cs @@ -5,7 +5,7 @@ // Feedback: mailto:ellan@gameframework.cn //------------------------------------------------------------ -namespace StarForce +namespace Definition { public static partial class Constant { diff --git a/Assets/GameMain/Scripts/Definition/Constant/Constant.Layer.cs b/Assets/GameMain/Scripts/Definition/Constant/Constant.Layer.cs index 29c6cda..3f89d5b 100644 --- a/Assets/GameMain/Scripts/Definition/Constant/Constant.Layer.cs +++ b/Assets/GameMain/Scripts/Definition/Constant/Constant.Layer.cs @@ -7,7 +7,7 @@ using UnityEngine; -namespace StarForce +namespace Definition { public static partial class Constant { diff --git a/Assets/GameMain/Scripts/Definition/Constant/Constant.Setting.cs b/Assets/GameMain/Scripts/Definition/Constant/Constant.Setting.cs index 05e6037..1595633 100644 --- a/Assets/GameMain/Scripts/Definition/Constant/Constant.Setting.cs +++ b/Assets/GameMain/Scripts/Definition/Constant/Constant.Setting.cs @@ -5,7 +5,7 @@ // Feedback: mailto:ellan@gameframework.cn //------------------------------------------------------------ -namespace StarForce +namespace Definition { public static partial class Constant { diff --git a/Assets/GameMain/Scripts/Definition/Enum/DialogUIMode.cs b/Assets/GameMain/Scripts/Definition/Enum/DialogUIMode.cs new file mode 100644 index 0000000..8fff194 --- /dev/null +++ b/Assets/GameMain/Scripts/Definition/Enum/DialogUIMode.cs @@ -0,0 +1,22 @@ +namespace Definition.Enum +{ + public enum DialogUIMode + { + None = 0, + + /// + /// 黑屏白字 + /// + Mask = 1, + + /// + /// 底部对话框 + /// + BottomBox = 2, + + /// + /// 对话气泡 + /// + BubbleBox = 3 + } +} \ No newline at end of file diff --git a/Assets/GameMain/Scripts/Definition/Enum/DialogUIMode.cs.meta b/Assets/GameMain/Scripts/Definition/Enum/DialogUIMode.cs.meta new file mode 100644 index 0000000..9b7298a --- /dev/null +++ b/Assets/GameMain/Scripts/Definition/Enum/DialogUIMode.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7a10763d137f413d828c534b0233f2a6 +timeCreated: 1770600423 \ No newline at end of file diff --git a/Assets/GameMain/Scripts/Definition/Enum/EmphasisType.cs b/Assets/GameMain/Scripts/Definition/Enum/EmphasisType.cs new file mode 100644 index 0000000..642dba9 --- /dev/null +++ b/Assets/GameMain/Scripts/Definition/Enum/EmphasisType.cs @@ -0,0 +1,13 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Definition.Enum +{ + public enum EmphasisType + { + None, + Shake, + Blink, + } +} \ No newline at end of file diff --git a/Assets/GameMain/Scripts/Definition/Enum/EmphasisType.cs.meta b/Assets/GameMain/Scripts/Definition/Enum/EmphasisType.cs.meta new file mode 100644 index 0000000..793bc8e --- /dev/null +++ b/Assets/GameMain/Scripts/Definition/Enum/EmphasisType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 96908bdc885697e4d9cb0f6627d13230 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Scripts/Definition/Enum/ExpressionType.cs b/Assets/GameMain/Scripts/Definition/Enum/ExpressionType.cs new file mode 100644 index 0000000..55ec0e3 --- /dev/null +++ b/Assets/GameMain/Scripts/Definition/Enum/ExpressionType.cs @@ -0,0 +1,14 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Definition.Enum +{ + public enum ExpressionType + { + None, + Normal, + Shock, + Happy, + } +} \ No newline at end of file diff --git a/Assets/GameMain/Scripts/Definition/Enum/ExpressionType.cs.meta b/Assets/GameMain/Scripts/Definition/Enum/ExpressionType.cs.meta new file mode 100644 index 0000000..664286a --- /dev/null +++ b/Assets/GameMain/Scripts/Definition/Enum/ExpressionType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 174e046d822a14d49843dc415067f13c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Scripts/UI/UIFormId.cs b/Assets/GameMain/Scripts/Definition/Enum/UIFormId.cs similarity index 100% rename from Assets/GameMain/Scripts/UI/UIFormId.cs rename to Assets/GameMain/Scripts/Definition/Enum/UIFormId.cs diff --git a/Assets/GameMain/Scripts/UI/UIFormId.cs.meta b/Assets/GameMain/Scripts/Definition/Enum/UIFormId.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/UI/UIFormId.cs.meta rename to Assets/GameMain/Scripts/Definition/Enum/UIFormId.cs.meta diff --git a/Assets/GameMain/Scripts/Entity/EntityExtension.cs b/Assets/GameMain/Scripts/Entity/EntityExtension.cs index 2f99f10..6d0da7a 100644 --- a/Assets/GameMain/Scripts/Entity/EntityExtension.cs +++ b/Assets/GameMain/Scripts/Entity/EntityExtension.cs @@ -7,6 +7,8 @@ using GameFramework.DataTable; using System; +using CustomUtility; +using DataTable; using Entity; using Entity.EntityData; using UnityGameFramework.Runtime; diff --git a/Assets/GameMain/Scripts/Procedure/BuiltIn/ProcedureChangeScene.cs b/Assets/GameMain/Scripts/Procedure/BuiltIn/ProcedureChangeScene.cs index d357d7d..97e9998 100644 --- a/Assets/GameMain/Scripts/Procedure/BuiltIn/ProcedureChangeScene.cs +++ b/Assets/GameMain/Scripts/Procedure/BuiltIn/ProcedureChangeScene.cs @@ -1,10 +1,6 @@ -//------------------------------------------------------------ -// Game Framework -// Copyright © 2013-2021 Jiang Yin. All rights reserved. -// Homepage: https://gameframework.cn/ -// Feedback: mailto:ellan@gameframework.cn -//------------------------------------------------------------ - +using CustomUtility; +using DataTable; +using Definition; using GameFramework.DataTable; using GameFramework.Event; using Scene; diff --git a/Assets/GameMain/Scripts/Procedure/BuiltIn/ProcedureLaunch.cs b/Assets/GameMain/Scripts/Procedure/BuiltIn/ProcedureLaunch.cs index 6b8e9bc..f86746a 100644 --- a/Assets/GameMain/Scripts/Procedure/BuiltIn/ProcedureLaunch.cs +++ b/Assets/GameMain/Scripts/Procedure/BuiltIn/ProcedureLaunch.cs @@ -1,12 +1,6 @@ -//------------------------------------------------------------ -// Game Framework -// Copyright © 2013-2021 Jiang Yin. All rights reserved. -// Homepage: https://gameframework.cn/ -// Feedback: mailto:ellan@gameframework.cn -//------------------------------------------------------------ - -using GameFramework.Localization; +using GameFramework.Localization; using System; +using Definition; using StarForce; using UnityGameFramework.Runtime; using ProcedureOwner = GameFramework.Fsm.IFsm; diff --git a/Assets/GameMain/Scripts/Procedure/BuiltIn/ProcedurePreload.cs b/Assets/GameMain/Scripts/Procedure/BuiltIn/ProcedurePreload.cs index 0b98cf8..d517acd 100644 --- a/Assets/GameMain/Scripts/Procedure/BuiltIn/ProcedurePreload.cs +++ b/Assets/GameMain/Scripts/Procedure/BuiltIn/ProcedurePreload.cs @@ -1,15 +1,10 @@ -//------------------------------------------------------------ -// Game Framework -// Copyright © 2013-2021 Jiang Yin. All rights reserved. -// Homepage: https://gameframework.cn/ -// Feedback: mailto:ellan@gameframework.cn -//------------------------------------------------------------ - -using GameFramework; +using GameFramework; using GameFramework.Event; using GameFramework.Resource; using System.Collections.Generic; -using StarForce; +using CustomUtility; +using DataTable; +using Definition; using TMPro; using UI; using UnityEngine; @@ -28,6 +23,8 @@ namespace Procedure "Sound", "UIForm", "UISound", + "Dialog", + "DialogLine" }; private Dictionary _loadedFlag = new Dictionary(); diff --git a/Assets/GameMain/Scripts/Sound/SoundExtension.cs b/Assets/GameMain/Scripts/Sound/SoundExtension.cs index 518fd5d..d8fce21 100644 --- a/Assets/GameMain/Scripts/Sound/SoundExtension.cs +++ b/Assets/GameMain/Scripts/Sound/SoundExtension.cs @@ -5,6 +5,9 @@ // Feedback: mailto:ellan@gameframework.cn //------------------------------------------------------------ +using CustomUtility; +using DataTable; +using Definition; using Entity; using GameFramework; using GameFramework.DataTable; diff --git a/Assets/GameMain/Scripts/UI/Base.meta b/Assets/GameMain/Scripts/UI/Base.meta new file mode 100644 index 0000000..4c418c7 --- /dev/null +++ b/Assets/GameMain/Scripts/UI/Base.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8cb383e8977814343a630c164eed6c51 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Scripts/UI/IFormController.cs b/Assets/GameMain/Scripts/UI/Base/IFormController.cs similarity index 100% rename from Assets/GameMain/Scripts/UI/IFormController.cs rename to Assets/GameMain/Scripts/UI/Base/IFormController.cs diff --git a/Assets/GameMain/Scripts/UI/IFormController.cs.meta b/Assets/GameMain/Scripts/UI/Base/IFormController.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/UI/IFormController.cs.meta rename to Assets/GameMain/Scripts/UI/Base/IFormController.cs.meta diff --git a/Assets/GameMain/Scripts/UI/UGuiForm.cs b/Assets/GameMain/Scripts/UI/Base/UGuiForm.cs similarity index 100% rename from Assets/GameMain/Scripts/UI/UGuiForm.cs rename to Assets/GameMain/Scripts/UI/Base/UGuiForm.cs diff --git a/Assets/GameMain/Scripts/UI/UGuiForm.cs.meta b/Assets/GameMain/Scripts/UI/Base/UGuiForm.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/UI/UGuiForm.cs.meta rename to Assets/GameMain/Scripts/UI/Base/UGuiForm.cs.meta diff --git a/Assets/GameMain/Scripts/UI/UIContext.cs b/Assets/GameMain/Scripts/UI/Base/UIContext.cs similarity index 100% rename from Assets/GameMain/Scripts/UI/UIContext.cs rename to Assets/GameMain/Scripts/UI/Base/UIContext.cs diff --git a/Assets/GameMain/Scripts/UI/UIContext.cs.meta b/Assets/GameMain/Scripts/UI/Base/UIContext.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/UI/UIContext.cs.meta rename to Assets/GameMain/Scripts/UI/Base/UIContext.cs.meta diff --git a/Assets/GameMain/Scripts/UI/GameplayA.meta b/Assets/GameMain/Scripts/UI/Combine.meta similarity index 100% rename from Assets/GameMain/Scripts/UI/GameplayA.meta rename to Assets/GameMain/Scripts/UI/Combine.meta diff --git a/Assets/GameMain/Scripts/UI/GameplayA/Context.meta b/Assets/GameMain/Scripts/UI/Combine/Context.meta similarity index 100% rename from Assets/GameMain/Scripts/UI/GameplayA/Context.meta rename to Assets/GameMain/Scripts/UI/Combine/Context.meta diff --git a/Assets/GameMain/Scripts/UI/GameplayA/Context/CombineFormContext.cs b/Assets/GameMain/Scripts/UI/Combine/Context/CombineFormContext.cs similarity index 100% rename from Assets/GameMain/Scripts/UI/GameplayA/Context/CombineFormContext.cs rename to Assets/GameMain/Scripts/UI/Combine/Context/CombineFormContext.cs diff --git a/Assets/GameMain/Scripts/UI/GameplayA/Context/CombineFormContext.cs.meta b/Assets/GameMain/Scripts/UI/Combine/Context/CombineFormContext.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/UI/GameplayA/Context/CombineFormContext.cs.meta rename to Assets/GameMain/Scripts/UI/Combine/Context/CombineFormContext.cs.meta diff --git a/Assets/GameMain/Scripts/UI/GameplayA/Context/CombinePartContext.cs b/Assets/GameMain/Scripts/UI/Combine/Context/CombinePartContext.cs similarity index 100% rename from Assets/GameMain/Scripts/UI/GameplayA/Context/CombinePartContext.cs rename to Assets/GameMain/Scripts/UI/Combine/Context/CombinePartContext.cs diff --git a/Assets/GameMain/Scripts/UI/GameplayA/Context/CombinePartContext.cs.meta b/Assets/GameMain/Scripts/UI/Combine/Context/CombinePartContext.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/UI/GameplayA/Context/CombinePartContext.cs.meta rename to Assets/GameMain/Scripts/UI/Combine/Context/CombinePartContext.cs.meta diff --git a/Assets/GameMain/Scripts/UI/GameplayA/Context/CombineSlotContext.cs b/Assets/GameMain/Scripts/UI/Combine/Context/CombineSlotContext.cs similarity index 100% rename from Assets/GameMain/Scripts/UI/GameplayA/Context/CombineSlotContext.cs rename to Assets/GameMain/Scripts/UI/Combine/Context/CombineSlotContext.cs diff --git a/Assets/GameMain/Scripts/UI/GameplayA/Context/CombineSlotContext.cs.meta b/Assets/GameMain/Scripts/UI/Combine/Context/CombineSlotContext.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/UI/GameplayA/Context/CombineSlotContext.cs.meta rename to Assets/GameMain/Scripts/UI/Combine/Context/CombineSlotContext.cs.meta diff --git a/Assets/GameMain/Scripts/UI/GameplayA/Controller.meta b/Assets/GameMain/Scripts/UI/Combine/Controller.meta similarity index 100% rename from Assets/GameMain/Scripts/UI/GameplayA/Controller.meta rename to Assets/GameMain/Scripts/UI/Combine/Controller.meta diff --git a/Assets/GameMain/Scripts/UI/GameplayA/Controller/CombineFormController.cs b/Assets/GameMain/Scripts/UI/Combine/Controller/CombineFormController.cs similarity index 100% rename from Assets/GameMain/Scripts/UI/GameplayA/Controller/CombineFormController.cs rename to Assets/GameMain/Scripts/UI/Combine/Controller/CombineFormController.cs diff --git a/Assets/GameMain/Scripts/UI/GameplayA/Controller/CombineFormController.cs.meta b/Assets/GameMain/Scripts/UI/Combine/Controller/CombineFormController.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/UI/GameplayA/Controller/CombineFormController.cs.meta rename to Assets/GameMain/Scripts/UI/Combine/Controller/CombineFormController.cs.meta diff --git a/Assets/GameMain/Scripts/UI/GameplayA/View.meta b/Assets/GameMain/Scripts/UI/Combine/View.meta similarity index 100% rename from Assets/GameMain/Scripts/UI/GameplayA/View.meta rename to Assets/GameMain/Scripts/UI/Combine/View.meta diff --git a/Assets/GameMain/Scripts/UI/GameplayA/View/CombineDraggablePart.cs b/Assets/GameMain/Scripts/UI/Combine/View/CombineDraggablePart.cs similarity index 100% rename from Assets/GameMain/Scripts/UI/GameplayA/View/CombineDraggablePart.cs rename to Assets/GameMain/Scripts/UI/Combine/View/CombineDraggablePart.cs diff --git a/Assets/GameMain/Scripts/UI/GameplayA/View/CombineDraggablePart.cs.meta b/Assets/GameMain/Scripts/UI/Combine/View/CombineDraggablePart.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/UI/GameplayA/View/CombineDraggablePart.cs.meta rename to Assets/GameMain/Scripts/UI/Combine/View/CombineDraggablePart.cs.meta diff --git a/Assets/GameMain/Scripts/UI/GameplayA/View/CombineForm.cs b/Assets/GameMain/Scripts/UI/Combine/View/CombineForm.cs similarity index 100% rename from Assets/GameMain/Scripts/UI/GameplayA/View/CombineForm.cs rename to Assets/GameMain/Scripts/UI/Combine/View/CombineForm.cs diff --git a/Assets/GameMain/Scripts/UI/GameplayA/View/CombineForm.cs.meta b/Assets/GameMain/Scripts/UI/Combine/View/CombineForm.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/UI/GameplayA/View/CombineForm.cs.meta rename to Assets/GameMain/Scripts/UI/Combine/View/CombineForm.cs.meta diff --git a/Assets/GameMain/Scripts/UI/GameplayA/View/CombineSlot.cs b/Assets/GameMain/Scripts/UI/Combine/View/CombineSlot.cs similarity index 100% rename from Assets/GameMain/Scripts/UI/GameplayA/View/CombineSlot.cs rename to Assets/GameMain/Scripts/UI/Combine/View/CombineSlot.cs diff --git a/Assets/GameMain/Scripts/UI/GameplayA/View/CombineSlot.cs.meta b/Assets/GameMain/Scripts/UI/Combine/View/CombineSlot.cs.meta similarity index 100% rename from Assets/GameMain/Scripts/UI/GameplayA/View/CombineSlot.cs.meta rename to Assets/GameMain/Scripts/UI/Combine/View/CombineSlot.cs.meta diff --git a/Assets/GameMain/Scripts/UI/UIExtension.cs b/Assets/GameMain/Scripts/UI/UIExtension.cs index 3b6d6b8..795c8d9 100644 --- a/Assets/GameMain/Scripts/UI/UIExtension.cs +++ b/Assets/GameMain/Scripts/UI/UIExtension.cs @@ -1,13 +1,9 @@ -//------------------------------------------------------------ -// Game Framework -// Copyright © 2013-2021 Jiang Yin. All rights reserved. -// Homepage: https://gameframework.cn/ -// Feedback: mailto:ellan@gameframework.cn -//------------------------------------------------------------ - -using GameFramework.DataTable; +using GameFramework.DataTable; using GameFramework.UI; using System.Collections; +using CustomUtility; +using DataTable; +using Definition; using Procedure; using StarForce; using UnityEngine; diff --git a/Assets/GameMain/Scripts/Utility/AssetUtility.cs b/Assets/GameMain/Scripts/Utility/AssetUtility.cs index 5557d0c..4b9449a 100644 --- a/Assets/GameMain/Scripts/Utility/AssetUtility.cs +++ b/Assets/GameMain/Scripts/Utility/AssetUtility.cs @@ -7,7 +7,7 @@ using GameFramework; -namespace StarForce +namespace CustomUtility { public static class AssetUtility { diff --git a/Assets/GameMain/Scripts/Utility/EnumUtility.cs b/Assets/GameMain/Scripts/Utility/EnumUtility.cs new file mode 100644 index 0000000..83de003 --- /dev/null +++ b/Assets/GameMain/Scripts/Utility/EnumUtility.cs @@ -0,0 +1,27 @@ +using System.Collections.Generic; +using UnityGameFramework.Runtime; + +namespace CustomUtility +{ + public static class EnumUtility where T : struct, System.Enum + { + private static readonly Dictionary _enumCache = new(); + + public static T Get(string value) + { + if (!_enumCache.TryGetValue(value, out T result)) + { + if (System.Enum.TryParse(value, true, out result)) + { + _enumCache[value] = result; + } + else + { + Log.Error($"Enum 解析失败:类型:{typeof(T).Name} 不包含值 {value}"); + } + } + + return result; + } + } +} diff --git a/Assets/GameMain/Scripts/Utility/EnumUtility.cs.meta b/Assets/GameMain/Scripts/Utility/EnumUtility.cs.meta new file mode 100644 index 0000000..6850aba --- /dev/null +++ b/Assets/GameMain/Scripts/Utility/EnumUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d0591e8f95955014f8c2f8d9ba3c9247 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Scripts/Utility/LitJsonHelper.cs b/Assets/GameMain/Scripts/Utility/LitJsonHelper.cs index 19a242e..f2d3f1e 100644 --- a/Assets/GameMain/Scripts/Utility/LitJsonHelper.cs +++ b/Assets/GameMain/Scripts/Utility/LitJsonHelper.cs @@ -9,7 +9,7 @@ using GameFramework; using LitJson; using System; -namespace StarForce +namespace CustomUtility { /// /// LitJSON 函数集辅助器。 diff --git a/Assets/GameMain/Scripts/Utility/WebUtility.cs b/Assets/GameMain/Scripts/Utility/WebUtility.cs index 8d5ceeb..f1c0fcf 100644 --- a/Assets/GameMain/Scripts/Utility/WebUtility.cs +++ b/Assets/GameMain/Scripts/Utility/WebUtility.cs @@ -1,13 +1,6 @@ -//------------------------------------------------------------ -// Game Framework -// Copyright © 2013-2021 Jiang Yin. All rights reserved. -// Homepage: https://gameframework.cn/ -// Feedback: mailto:ellan@gameframework.cn -//------------------------------------------------------------ +using System; -using System; - -namespace StarForce +namespace CustomUtility { public static class WebUtility { diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index c2da562..403c004 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -812,11 +812,23 @@ PlayerSettings: webGLMemoryGeometricGrowthCap: 96 webGLPowerPreference: 2 scriptingDefineSymbols: - Android: ENABLE_DEBUG_AND_ABOVE_LOG - Standalone: ENABLE_DEBUG_AND_ABOVE_LOG - WebGL: ENABLE_DEBUG_AND_ABOVE_LOG - Windows Store Apps: ENABLE_DEBUG_AND_ABOVE_LOG - iPhone: ENABLE_DEBUG_AND_ABOVE_LOG + Android: ENABLE_DEBUG_AND_ABOVE_LOG;DOTWEEN + EmbeddedLinux: DOTWEEN + GameCoreScarlett: DOTWEEN + GameCoreXboxOne: DOTWEEN + LinuxHeadlessSimulation: DOTWEEN + Nintendo Switch: DOTWEEN + PS4: DOTWEEN + PS5: DOTWEEN + QNX: DOTWEEN + Stadia: DOTWEEN + Standalone: ENABLE_DEBUG_AND_ABOVE_LOG;DOTWEEN + VisionOS: DOTWEEN + WebGL: ENABLE_DEBUG_AND_ABOVE_LOG;DOTWEEN + Windows Store Apps: ENABLE_DEBUG_AND_ABOVE_LOG;DOTWEEN + XboxOne: DOTWEEN + iPhone: ENABLE_DEBUG_AND_ABOVE_LOG;DOTWEEN + tvOS: DOTWEEN additionalCompilerArguments: {} platformArchitecture: {} scriptingBackend: {} diff --git a/数据表/Dialog.txt b/数据表/Dialog.txt new file mode 100644 index 0000000..a3e4690 --- /dev/null +++ b/数据表/Dialog.txt @@ -0,0 +1,7 @@ +# 对话标识表 筛选用数据 +# Id Title UIMode ChapterId +# int string DialogUIMode int +# 对话编号 策划备注 对话标识 对话形式 章节编号 + 1001 第一章介绍 Chapter1_Intro Mask 1.001 + 1002 第一章主流程 Chapter1_Main BottomBox 1.002 + 1003 第一章玩法开始前闲聊 Chapter1_SmallTalk1 BubbleBox 1.003 diff --git a/数据表/Dialog.xlsx b/数据表/Dialog.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6643c3718d1bc3b84d8167e840c0ee51786f541d GIT binary patch literal 10774 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 literal 0 HcmV?d00001 diff --git a/数据表/DialogLine.txt b/数据表/DialogLine.txt new file mode 100644 index 0000000..49a55c7 --- /dev/null +++ b/数据表/DialogLine.txt @@ -0,0 +1,13 @@ +# 对话内容表 筛选用数据 +# Id SpeakerId Expression SpeakerName Direction Text Emphasis ChapterId DialogId +# int int ExpressionType string int string EmphasisType int int +# 对话行编号 策划备注 说话人Id 表情 显示人名 说话朝向 说话内容 演出效果 章节Id 对话Id + 100100001 Id规则为 Null Null Null 0 相传。 1.00100001 1001.00001 + 100100002 第1位数为章节Id Null Null Null 0 Mask。 1.00100002 1001.00002 + 100100003 第2-4位数为对话Id Null Null Null 0 很好。 1.00100003 1001.00003 + 100200001 第5-9位数为对话行Id Xu Normal 徐晟壹 0 你好,王。 1.00200001 1002.00001 + 100200002 Wang Normal 王可嘉 1 你好,徐。 1.00200002 1002.00002 + 100200003 Master Normal 李诫 1 你们好。 1.00200003 1002.00003 + 100300001 Npc1 Null Null 0 这人谁啊? 1.00300001 1003.00001 + 100300002 Npc2 Null Null 0 不知道啊? 1.00300002 1003.00002 + 100300003 Npc1 Null Null 0 不知道你在这干嘛。 1.00300003 1003.00003 diff --git a/数据表/DialogLine.xlsx b/数据表/DialogLine.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..7caec299921935cbd514a55ac74097042be81107 GIT binary patch literal 11607 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 literal 0 HcmV?d00001 diff --git a/数据表/Scene.txt b/数据表/Scene.txt index 29826e2..6aecfae 100644 --- a/数据表/Scene.txt +++ b/数据表/Scene.txt @@ -5,4 +5,3 @@ 1 菜单场景 Menu 1 2 战斗场景 Main 2 3 压力测试场景 StressTest 0 - 4 玩法A测试场景 GameplayA 0 \ No newline at end of file diff --git a/数据表/UIForm.txt b/数据表/UIForm.txt index 20740d2..6b11bd8 100644 --- a/数据表/UIForm.txt +++ b/数据表/UIForm.txt @@ -6,4 +6,3 @@ 100 主菜单 MenuForm Default False True 101 设置 SettingForm Default False True 102 关于 AboutForm Default False True - 103 淨A MVCԽ CoreGameplayAMvcForm Default False True diff --git a/数据表/Weapon.txt b/数据表/Weapon.txt deleted file mode 100644 index 8d2b3fd..0000000 --- a/数据表/Weapon.txt +++ /dev/null @@ -1,5 +0,0 @@ -# 武器表 -# Id Attack AttackInterval BulletId BulletSpeed BulletSoundId -# int int float int float int -# 武器编号 策划备注 攻击力 攻击间隔 子弹编号 子弹速度 子弹声音编号 - 30000 玩家武器 100 0.2 50000 20 10000 diff --git a/数据表/Weapon.xlsx b/数据表/Weapon.xlsx deleted file mode 100644 index d1a405762ad0b537d996dc49ad7b286457b71bf0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10510 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 {output_file}") print(f"已复制到 -> {target_file}") count += 1 - + except Exception as e: - print(f"处理 {file_name} 时出错: {e}") + print(f"处理 {file_path} 时出错: {e}") print(f"\n任务完成!共转换了 {count} 个文件。") + if __name__ == "__main__": convert_excel_to_txt('.') - - # --- 关键修改:在这里添加暂停 --- - print("\n" + "="*30) - input("按回车键(Enter)退出程序...") \ No newline at end of file + + print("\n" + "=" * 30) + input("按回车键(Enter)退出程序...") From 197ce383151c881bc062230feeefe92e9fd7e7e2 Mon Sep 17 00:00:00 2001 From: SepComet <202308010230@stu.csust.edu.cn> Date: Mon, 9 Feb 2026 10:34:29 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E9=83=A8=E5=88=86=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/GameMain/DataTables/DialogLine.txt | 20 +++++++++--------- Assets/GameMain/DataTables/Scene.txt | 1 + Assets/GameMain/DataTables/UIForm.txt | 1 + Assets/GameMain/Scripts/DataTable/DRDialog.cs | 2 +- .../Scripts/DataTable/DRDialogLine.cs | 4 ++-- .../Scripts/DataTable/DataTableExtension.cs | 2 +- Assets/Launcher.unity | 2 +- 数据表/DialogLine.txt | 20 +++++++++--------- 数据表/Scene.txt | 1 + 数据表/Scene.xlsx | Bin 9889 -> 9922 bytes 数据表/UIForm.txt | 1 + 数据表/UIForm.xlsx | Bin 10104 -> 10165 bytes 数据表/convert.py | 3 ++- 13 files changed, 31 insertions(+), 26 deletions(-) diff --git a/Assets/GameMain/DataTables/DialogLine.txt b/Assets/GameMain/DataTables/DialogLine.txt index 49a55c7..567ba54 100644 --- a/Assets/GameMain/DataTables/DialogLine.txt +++ b/Assets/GameMain/DataTables/DialogLine.txt @@ -1,13 +1,13 @@ # 对话内容表 筛选用数据 # Id SpeakerId Expression SpeakerName Direction Text Emphasis ChapterId DialogId -# int int ExpressionType string int string EmphasisType int int +# int string ExpressionType string int string EmphasisType int int # 对话行编号 策划备注 说话人Id 表情 显示人名 说话朝向 说话内容 演出效果 章节Id 对话Id - 100100001 Id规则为 Null Null Null 0 相传。 1.00100001 1001.00001 - 100100002 第1位数为章节Id Null Null Null 0 Mask。 1.00100002 1001.00002 - 100100003 第2-4位数为对话Id Null Null Null 0 很好。 1.00100003 1001.00003 - 100200001 第5-9位数为对话行Id Xu Normal 徐晟壹 0 你好,王。 1.00200001 1002.00001 - 100200002 Wang Normal 王可嘉 1 你好,徐。 1.00200002 1002.00002 - 100200003 Master Normal 李诫 1 你们好。 1.00200003 1002.00003 - 100300001 Npc1 Null Null 0 这人谁啊? 1.00300001 1003.00001 - 100300002 Npc2 Null Null 0 不知道啊? 1.00300002 1003.00002 - 100300003 Npc1 Null Null 0 不知道你在这干嘛。 1.00300003 1003.00003 + 100100001 Id规则为 Null None Null 0 相传。 None 1.00100001 1001.00001 + 100100002 第1位数为章节Id Null None Null 0 Mask。 None 1.00100002 1001.00002 + 100100003 第2-4位数为对话Id Null None Null 0 很好。 None 1.00100003 1001.00003 + 100200001 第5-9位数为对话行Id Xu Normal 徐晟壹 0 你好,王。 None 1.00200001 1002.00001 + 100200002 Wang Normal 王可嘉 1 你好,徐。 None 1.00200002 1002.00002 + 100200003 Master Normal 李诫 1 你们好。 None 1.00200003 1002.00003 + 100300001 Npc1 None Null 0 这人谁啊? None 1.00300001 1003.00001 + 100300002 Npc2 None Null 0 不知道啊? None 1.00300002 1003.00002 + 100300003 Npc1 None Null 0 不知道你在这干嘛。 None 1.00300003 1003.00003 diff --git a/Assets/GameMain/DataTables/Scene.txt b/Assets/GameMain/DataTables/Scene.txt index 6aecfae..10e008e 100644 --- a/Assets/GameMain/DataTables/Scene.txt +++ b/Assets/GameMain/DataTables/Scene.txt @@ -5,3 +5,4 @@ 1 菜单场景 Menu 1 2 战斗场景 Main 2 3 压力测试场景 StressTest 0 + 4 GameplayA 0 diff --git a/Assets/GameMain/DataTables/UIForm.txt b/Assets/GameMain/DataTables/UIForm.txt index 6b11bd8..f8de70d 100644 --- a/Assets/GameMain/DataTables/UIForm.txt +++ b/Assets/GameMain/DataTables/UIForm.txt @@ -6,3 +6,4 @@ 100 主菜单 MenuForm Default False True 101 设置 SettingForm Default False True 102 关于 AboutForm Default False True + 103 组装玩法UI CombineForm Default False False diff --git a/Assets/GameMain/Scripts/DataTable/DRDialog.cs b/Assets/GameMain/Scripts/DataTable/DRDialog.cs index 91274f2..f192b0e 100644 --- a/Assets/GameMain/Scripts/DataTable/DRDialog.cs +++ b/Assets/GameMain/Scripts/DataTable/DRDialog.cs @@ -32,7 +32,7 @@ namespace DataTable index++; Title = fields[index++]; UIMode = EnumUtility.Get(fields[index++]); - + return true; } } diff --git a/Assets/GameMain/Scripts/DataTable/DRDialogLine.cs b/Assets/GameMain/Scripts/DataTable/DRDialogLine.cs index f211f38..fb888dd 100644 --- a/Assets/GameMain/Scripts/DataTable/DRDialogLine.cs +++ b/Assets/GameMain/Scripts/DataTable/DRDialogLine.cs @@ -11,7 +11,7 @@ namespace DataTable /// /// 获取对话行编号 /// - public override int Id { get; } + public override int Id => m_Id; /// /// 获取说话人 Id。 @@ -57,7 +57,7 @@ namespace DataTable Direction = int.Parse(fields[index++]); Text = fields[index++]; Emphasis = EnumUtility.Get(fields[index++]); - + return true; } } diff --git a/Assets/GameMain/Scripts/DataTable/DataTableExtension.cs b/Assets/GameMain/Scripts/DataTable/DataTableExtension.cs index b496f91..b114cf2 100644 --- a/Assets/GameMain/Scripts/DataTable/DataTableExtension.cs +++ b/Assets/GameMain/Scripts/DataTable/DataTableExtension.cs @@ -8,7 +8,7 @@ namespace DataTable { public static class DataTableExtension { - private const string DataRowClassPrefixName = "StarForce.DR"; + private const string DataRowClassPrefixName = "DataTable.DR"; internal static readonly char[] DataSplitSeparators = new char[] { '\t' }; internal static readonly char[] DataTrimSeparators = new char[] { '\"' }; diff --git a/Assets/Launcher.unity b/Assets/Launcher.unity index 2d12a16..bac3db4 100644 --- a/Assets/Launcher.unity +++ b/Assets/Launcher.unity @@ -779,7 +779,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 11499388, guid: adb3eb1c35fcff14f89fba7b05c9d71c, type: 3} propertyPath: m_JsonHelperTypeName - value: StarForce.LitJsonHelper + value: CustomUtility.LitJsonHelper objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] diff --git a/数据表/DialogLine.txt b/数据表/DialogLine.txt index 49a55c7..567ba54 100644 --- a/数据表/DialogLine.txt +++ b/数据表/DialogLine.txt @@ -1,13 +1,13 @@ # 对话内容表 筛选用数据 # Id SpeakerId Expression SpeakerName Direction Text Emphasis ChapterId DialogId -# int int ExpressionType string int string EmphasisType int int +# int string ExpressionType string int string EmphasisType int int # 对话行编号 策划备注 说话人Id 表情 显示人名 说话朝向 说话内容 演出效果 章节Id 对话Id - 100100001 Id规则为 Null Null Null 0 相传。 1.00100001 1001.00001 - 100100002 第1位数为章节Id Null Null Null 0 Mask。 1.00100002 1001.00002 - 100100003 第2-4位数为对话Id Null Null Null 0 很好。 1.00100003 1001.00003 - 100200001 第5-9位数为对话行Id Xu Normal 徐晟壹 0 你好,王。 1.00200001 1002.00001 - 100200002 Wang Normal 王可嘉 1 你好,徐。 1.00200002 1002.00002 - 100200003 Master Normal 李诫 1 你们好。 1.00200003 1002.00003 - 100300001 Npc1 Null Null 0 这人谁啊? 1.00300001 1003.00001 - 100300002 Npc2 Null Null 0 不知道啊? 1.00300002 1003.00002 - 100300003 Npc1 Null Null 0 不知道你在这干嘛。 1.00300003 1003.00003 + 100100001 Id规则为 Null None Null 0 相传。 None 1.00100001 1001.00001 + 100100002 第1位数为章节Id Null None Null 0 Mask。 None 1.00100002 1001.00002 + 100100003 第2-4位数为对话Id Null None Null 0 很好。 None 1.00100003 1001.00003 + 100200001 第5-9位数为对话行Id Xu Normal 徐晟壹 0 你好,王。 None 1.00200001 1002.00001 + 100200002 Wang Normal 王可嘉 1 你好,徐。 None 1.00200002 1002.00002 + 100200003 Master Normal 李诫 1 你们好。 None 1.00200003 1002.00003 + 100300001 Npc1 None Null 0 这人谁啊? None 1.00300001 1003.00001 + 100300002 Npc2 None Null 0 不知道啊? None 1.00300002 1003.00002 + 100300003 Npc1 None Null 0 不知道你在这干嘛。 None 1.00300003 1003.00003 diff --git a/数据表/Scene.txt b/数据表/Scene.txt index 6aecfae..10e008e 100644 --- a/数据表/Scene.txt +++ b/数据表/Scene.txt @@ -5,3 +5,4 @@ 1 菜单场景 Menu 1 2 战斗场景 Main 2 3 压力测试场景 StressTest 0 + 4 GameplayA 0 diff --git a/数据表/Scene.xlsx b/数据表/Scene.xlsx index 3bb1e1ae3fba251c0bf9c57cb74dfe531b96af31..bdc5b47e47ba820a7d39de336970626e0518d781 100644 GIT binary patch delta 2111 zcmV-F2*CHDO~OsElK};EgA%h&lb8V(Ow<;xZEe8%5?mBW+A(2rwD#UGjGb76f8s6) z4jsg0Z58+7X;;{A@x)hvDIsI5z;nqx#|L#qs&s`NV(cG|}svZd(6-o15YZ`^D)$!65X2>DZdKfk(ZSB*>E+)4l{GAWp_ zzx@2{U9ZyElr1YDcGV}guA9@eElD0ica z%f$>8l+bZZ(wLG3p)8#+LLQpINBvE{uAuhg|0U9xoHfJ|Wppwi9sos~`}j{3-%v{f z1QY-O00;nwPU1i;@QM7B5d$KBYlA=#fbWI=2id#sBbsPXLtGU~4-IXaYms$LgmqWk zHEk&U@7-Y2$F-%m8D{wS<`J)6I^i7opj#yqfIS2pE}5!Zxlh33wsb?_Xj93$5=!y} zoVW(7^!h5^465gYX}NYRLh1w@jOmvUYIfjVr9E4gw$iAftBg&DJycD9(=whbHg;SZ zND!JsHfp0fxBtX}iMKqO-y&vC*U;?Xr2csa7htS7bBdx z(JWfHC`5>4gqG2|cmqyKz|`_z@Hk7ZcAO)gu8R!N1t} z7aLj$Hj2vFN4g&cpHx~uot9vO?+bwE15NLfz5|n?9~zU51VIjz9bN1v0{{S@2><{X z0F!Yh8h?#eU2obj6n&qx|6uvO`JhlJB2+C*w>$3?m^)k&uiRG{Wyx;D_bM z4~v>tuVPQBM8Hsp2=ApV=e{rEJra&J_J0zTjWOZ}nX!U?rAL}UD#BAc28(*(|;>U zqPB~0J^{PLD)^|PItQyKAbMN|3;zhth);+o7ZJ7yAGq5BszbMcie4_@B1UZiEpqK5 zZf(TIMT}d7B@!0;j7Sx|EYd|x+5(M87jb7JHZG#$utX~Nx-+SwmqogWsV!mUB4##X z?IP}N#KuL0ooB2*lvSNRo>Wxzp?}QQSxHag%H&XM$8Z2ypMebgvM~_5f+bDuimo&j zHPQy8E0gO<8@O~(<$;FNP|9^eRSa?d)b&c^oBYWWY7p&uc$C-hzeGUd`0+O=1xS%5nO=>wBq#;DGN-0_m@ECvQ`~bLQ_WaOeLY85jVh{qe zu>l}FmlpH+73wjE6V37?E(}sE5-sA+K?Lg=P$&^oN5|BKxujEJ>U3IUK-?cEcY~kP z_T=j|eSA^rEn7t@h#N{K$@814NRKb47d{NXKf3?VOgsI!eVw_g>MHO^#gg;eq<1r?U%rIe zA78cNi~D5MN(XaXc0>q>HNcsKHf7R*%bJzHp;Z1B^B1$v58o034Iz`TB0m9klkg%l z0h*H}Ba;PmgA%h&le{B394zpO{6hf%0E7Yn022TJ000000096X000021CtUYKL>UM z004MwFOvx-9FuS*4gtcGgCsTq>65x7EgSYGCKOHq003+P000yK0000000031AOHXW zaFYThK@9>D004MwFLQKxY-Mwk!6G1&a3u}_Ad`P3HUUSIwk1FT@RRo?JOP)JG$tV% plpS5{Cj$Tgp9uf}7ytkO000000RSKX006_2a3(7Tr6K?T000wBzA69! delta 2073 zcmV+!2~O`%P&lK}<8T=m#Xlb8V*+(}`Qj!$&0`Z_|?N!2N(*}~=u)C=i z@xQwz*2h)xHp2`b-#p^=%g{Rqu5>3w0C9n7j9pS4jbMOP7x2&yp6X}P3X5tNIp3`<;v zWspZt7{~CdJ%(qELO%*E&O$d2w|35EVkVoqzS(m1!;c`JxR`kMs2-t9Klm3LdbY{y zo=tsi>?7SzJ)c!Nn$AnG!S@Bg(}CvqN#6mG8k3L&K?$cN|A!F+001eI+5{ngYj4^x z6#YJF|H1P2=0TxQM5sET+N4dY_WW!T2dpM>W*gG}`(4{O56n;%i6r+PpL?!-VzYR7 zEemv{LNZ<@I1VC=XqEDeRl5ZL`uTJ-!$>MpWu)L0P4F9)_+k0+!=mBhMeZq82pB4v z;Js4yJPc*JrzMdAuW1FDoQslwD0mgSP}YKy%nT}va1=#%VM$npEyG;AhlA%iOX-@Y zhmuyxk_cK51^VTl)zY!OX7A$51ZkjGr>7@zZ8I%jJofaJEEQbxTm>mFLo3bi@;iFi5GH$YrNb6Zw0^=8_2f~e|vnx+YwS_Wx#Qqh~Bcp6fFwK_<}%QaC1 zFBfJ7o<+D^WDI6eFFg`8Pw-kngdqJ`J}6p+z$g?u{L&b+k~Fnl(7JF&qkAn4xfQhX%8_cfFGc3K}A~JEFUw z&!gADiNB_3aw3BJiD(oB<4Jcx;u=wCXVomSw%u|ec!S`Rgz1%kHPIVJJfDDJQXPEM zQImt!lMp>FqeXZGXQU^@Cm#{Fh!D8j0=h%LfR0`-;3GzD0V8tlBW{O?jgJ_&h=E90 z=nEos^twnNF=-1}kv`&Xh}iguj$fSX1G69qUIu^cK|!lV0RR9~0ssIM0001ZY%gU~0cI!*c$W2S@SWY~_|t)OOxFrIvn7x)IdW4 z004vn000vJ0000000031AOHXW{{oXUBtHjp1ONbdY%h~4CLEJ*BMt$flcXdz0mzfv zBrO~4K|!lV0RR9~0ssIM000000000103ZMW09TVEB|!q=5tC*mIROWgpd~f|E|b?K zKmpH_7$!Ucl#^8^AseS9|A!F+001co000;O0000000031AOHXWz>|?CD+Yuj00000 Dd8Dy9 diff --git a/数据表/UIForm.txt b/数据表/UIForm.txt index 6b11bd8..f8de70d 100644 --- a/数据表/UIForm.txt +++ b/数据表/UIForm.txt @@ -6,3 +6,4 @@ 100 主菜单 MenuForm Default False True 101 设置 SettingForm Default False True 102 关于 AboutForm Default False True + 103 组装玩法UI CombineForm Default False False diff --git a/数据表/UIForm.xlsx b/数据表/UIForm.xlsx index db32a7aae7a4e51107a41f017833f95af259c5dd..9cfa1b13be1bd8dcdca0e720bc5e849634bab4cd 100644 GIT binary patch delta 2329 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 delta 2241 zcmV;y2tN0x>PQx$|hIb_1A@ZKsNl`&ol1hL&Q3}1vTxV$GoTeCCz5&T>Y3tI9~`{L`$lX8eh*0Vjlv zu>{8ia|}1YQ1?W%M+)8}^|L8kfZ!NPkf5B!aeox!AFl%=?Vk;;GH}Ym?X=%%A9u(W zyc2u())u|7uIs2CwK07D7%yix^LEv+P|dA4pga|vas$j&CZB_LARob`cu;LFSTgHo z{@AMm#N{skdVl@=cuVnb#pBxa9TP<0^UyB+LAf7YT`#66Pe?KjNgO6*K@u8|DLH>= z1}Y!*H~G4P+>iec@hlk-4}iSQef%f#Z%|7E1QY-O00;nwPU1ibmGWCdlNAFYe`|v< z6oB6c`wxpRrxH2u*jztKafP*o^ z0z%CWysxxp%feO~srt&;RPCW`f0~x@Lb9>v!a$5r0NJRG?A_rL2PWR)Xnu>VB|F>c z-S#wC-8BAypPZ&QZJmJEg62g*5p{7H<*twX%#CJI=%P77IK%lmT9t3W8P3fZIHKz9 z=r{S!vW{la4bR%Bl$5iqq=Xh>NJ&J46{ffh1A?=Nk}M=oz8}M{_849?LjEW;y9nJr z+}Sznk(q34yL!jf4?m13c75#Gqk5PGH2fDEa?7Te9iLQMl1@vo!S@Bg z^MR)KN#6mG8k3I%K?+wYG~R^+0037EliCCye^=RV+b|G(FVKGw_#PdOZ&(fzUoFrA zLCyDiSM=4Sa^ZXVLdN@P@S<~R0kd!NuoWz(z{p=KFtYUi& zZ{iDcT!7Z9o>qx#HB$3=L!-VV3UbQmf!hI1995dBa^}oBI+MU4>RGG==P&2%4u~@l zw~yk8ze%}OL4-FvMN!yA#_S+1t7t8de>ZUmU!57J$r^KvmJ8W|=iFH?!U$GTwBE|e z!AFnYd^bf9mxvz`DOl^?;&}g+#3bM(1gjuRSYS`-ivWIvkSn+)KrrHfM;EdpaqOdy z6L8TlnFDSifm3H_-&fhT(lpPx6_Nu!$9zTOpHaw9KAPH-LF;#qD##aFd?3;Bf5f4( zA+qS1$5Bc?kqe1o$VX5>I|htC8jDH-8bez6YbBA`0mw@5tCIJpl#IW{uob*=x|%pB zC&IN*6Ftu!j+);{Y@~9c707;+qPj$&Nmc;YifCke)8+>mZX$wZkVJ5;h{pd_5mYXT z;93#Q?3S|Ot#7IoMl+N zz`Xec3>=8yqln5e@DqdRW$7-Q3wSjs5l<$lR< zS+k=edR?fA@HAJgdLWIh)ME5NG-GUfAeu9_JrK%mt+U%x?HaeTBvRSKYw9z@xAnP88?pqUL=xjs!b()B# zl8#PsvNd&zXroiBa8-@AbZR?m-2>5f*2aVwI@^$bohCxpsSa7{YnS08`Hb^plrk$O z2iSJ5Jpt?I>dd4bIL(A~Yfm|x7Uk^;PV5A}h^`Ib1EsurfTNQd3){+|IMdbt5-fiM zkRG$Q2tWo2usnq}tN{Q3Mv@O4e^bj!!$1_>3;shG*P5y*B1xoJlr9uO`vGG!wt-}( zW+pzCN~?lai(rxZ083F(tU^(1eSA$PiGSf}R!*~=bMCp^bM75&YQwRWHRMu@U>yt( zC4ho(mY5dK=^(Q-GdKYh${;qOO)%2ICZb@<=9i>$NlFo$hYpg7OnTNOULlT3+BR9A^K53N z@vr}Ek9YxkRE#UKLuMvDee2lr7rYnaY5(+*SFU+!D{QuTqtBP z?8Ws7n_uEs~fR|d`&Y>(wE)$RaFIUAsFn$2D;}G8x0>dGb#3MfeERzHz zGXYSOI3$w=9H^)ZNR!YcIt2-p@>@fb4`~s6EB|isn1ONbdY%h}?CmfTAB@O|2 zlb0nn0iTo3B`q7UJcTx_0RR9-0{{RN000000000103ZMW0LYUTCP4wXlUOD?0eF*> zCN=?|lgcJQ0j84+Cp-a>lSn5a99Jqd-h~4I09OnE02lxO000000096X0002J1e4wb P8k3(V5C&T#00000Q2GZ7 diff --git a/数据表/convert.py b/数据表/convert.py index ba85f28..5ca4b8a 100644 --- a/数据表/convert.py +++ b/数据表/convert.py @@ -28,7 +28,8 @@ def convert_excel_to_txt(folder_path='.'): print(f"正在处理: {file_path}...") try: - df = pd.read_excel(file_path, header=None) + # 保留单元格中的 "None" 文本,避免被 pandas 当作缺失值转为空 + df = pd.read_excel(file_path, header=None, keep_default_na=False) df.to_csv(output_file, sep='\t', index=False, header=False, encoding='utf-8') 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 4/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E5=AF=B9?= =?UTF-8?q?=E8=AF=9DUI=EF=BC=8C=E5=9F=BA=E6=9C=AC=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E5=AF=B9=E8=AF=9D=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 Date: Mon, 9 Feb 2026 13:31:24 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AF=B9=E8=AF=9D?= =?UTF-8?q?=E6=92=AD=E6=94=BE=E9=80=9F=E5=BA=A6=E8=AE=BE=E7=BD=AE=EF=BC=8C?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=AF=B9=E8=AF=9D=E4=BB=A5=E6=89=93=E5=AD=97?= =?UTF-8?q?=E6=9C=BA=E7=9A=84=E5=BD=A2=E5=BC=8F=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/GameMain/DataTables/DialogLine.txt | 2 +- .../CustomComponent/DialogComponent.cs | 8 +- .../UI/Dialog/Context/DialogFormContext.cs | 2 + .../UI/Dialog/View/BottomDialogForm.cs | 196 +++++++++++++++--- .../Scripts/UI/Dialog/View/DialogFormBase.cs | 95 ++++++++- .../Scripts/UI/Dialog/View/MaskDialogForm.cs | 11 +- .../UI/UIForms/BottomDialogForm.prefab | 9 +- Assets/Launcher.unity | 1 + 8 files changed, 272 insertions(+), 52 deletions(-) diff --git a/Assets/GameMain/DataTables/DialogLine.txt b/Assets/GameMain/DataTables/DialogLine.txt index 567ba54..901aa3f 100644 --- a/Assets/GameMain/DataTables/DialogLine.txt +++ b/Assets/GameMain/DataTables/DialogLine.txt @@ -2,7 +2,7 @@ # Id SpeakerId Expression SpeakerName Direction Text Emphasis ChapterId DialogId # int string ExpressionType string int string EmphasisType int int # 对话行编号 策划备注 说话人Id 表情 显示人名 说话朝向 说话内容 演出效果 章节Id 对话Id - 100100001 Id规则为 Null None Null 0 相传。 None 1.00100001 1001.00001 + 100100001 Id规则为 Null None Null 0 相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。 None 1.00100001 1001.00001 100100002 第1位数为章节Id Null None Null 0 Mask。 None 1.00100002 1001.00002 100100003 第2-4位数为对话Id Null None Null 0 很好。 None 1.00100003 1001.00003 100200001 第5-9位数为对话行Id Xu Normal 徐晟壹 0 你好,王。 None 1.00200001 1002.00001 diff --git a/Assets/GameMain/Scripts/CustomComponent/DialogComponent.cs b/Assets/GameMain/Scripts/CustomComponent/DialogComponent.cs index 6cf6f39..0581337 100644 --- a/Assets/GameMain/Scripts/CustomComponent/DialogComponent.cs +++ b/Assets/GameMain/Scripts/CustomComponent/DialogComponent.cs @@ -15,6 +15,8 @@ namespace CustomComponent { #region Property + [SerializeField] private float _playingSpeed = 1.0f; + private const int DialogChapterDivisor = 1000; private const int LineChapterDivisor = 100000000; private const int LineDialogDivisor = 100000; @@ -35,6 +37,8 @@ namespace CustomComponent private bool _isInitialized; private bool _isPlaying; + public float PlayingSpeed => _playingSpeed; + public bool IsInitialized => _isInitialized; public bool IsPlaying => _isPlaying; @@ -211,6 +215,7 @@ namespace CustomComponent _formContext.DialogId = dialogRow.Id; _formContext.DialogTitle = dialogRow.Title; _formContext.DialogUIMode = dialogRow.UIMode; + _formContext.PlayingSpeed = Mathf.Max(0f, _playingSpeed); _currentLineIndex = 0; ApplyLineToContext(dialogLines[_currentLineIndex], _currentLineIndex, dialogLines.Count); @@ -350,6 +355,7 @@ namespace CustomComponent _formContext.Direction = lineRow.Direction; _formContext.Text = lineRow.Text; _formContext.Emphasis = lineRow.Emphasis; + _formContext.PlayingSpeed = Mathf.Max(0f, _playingSpeed); _formContext.LineIndex = lineIndex; _formContext.TotalLines = totalLines; _formContext.IsLastLine = lineIndex >= totalLines - 1; @@ -404,4 +410,4 @@ namespace CustomComponent #endregion } -} \ No newline at end of file +} diff --git a/Assets/GameMain/Scripts/UI/Dialog/Context/DialogFormContext.cs b/Assets/GameMain/Scripts/UI/Dialog/Context/DialogFormContext.cs index 9f1eb9c..46ec048 100644 --- a/Assets/GameMain/Scripts/UI/Dialog/Context/DialogFormContext.cs +++ b/Assets/GameMain/Scripts/UI/Dialog/Context/DialogFormContext.cs @@ -4,6 +4,8 @@ namespace UI { public class DialogFormContext : UIContext { + public float PlayingSpeed = 1f; + public int ChapterId = 0; public int DialogId = 0; public string DialogTitle = string.Empty; diff --git a/Assets/GameMain/Scripts/UI/Dialog/View/BottomDialogForm.cs b/Assets/GameMain/Scripts/UI/Dialog/View/BottomDialogForm.cs index 1c53f1a..72128ae 100644 --- a/Assets/GameMain/Scripts/UI/Dialog/View/BottomDialogForm.cs +++ b/Assets/GameMain/Scripts/UI/Dialog/View/BottomDialogForm.cs @@ -1,4 +1,5 @@ -using Definition.Enum; +using DG.Tweening; +using Definition.Enum; using TMPro; using UnityEngine; using UnityEngine.UI; @@ -10,6 +11,8 @@ namespace UI { public override DialogFormMode UIMode => DialogFormMode.BottomBox; + [SerializeField] private GameObject _speakerArea; + [SerializeField] private TMP_Text _speakerNameText; [SerializeField] private TMP_Text _contentText; @@ -22,10 +25,15 @@ namespace UI [SerializeField] private int _rightSpritePosition = -450; + [SerializeField] private float _moveDuration = 0.25f; + + [SerializeField] private Ease _moveEase = Ease.OutCubic; + private readonly int _singleSpeakerCenterPosition = Screen.width / 2; private string _leftSpeakerToken = string.Empty; private string _rightSpeakerToken = string.Empty; + private Sequence _layoutSequence; public override void StartDialog(DialogFormContext context) { @@ -37,10 +45,11 @@ namespace UI _context = context; - string speakerName = NormalizeValue(context.SpeakerName); - if (string.IsNullOrEmpty(speakerName)) + string speakerName = context.SpeakerName; + + if (_speakerArea != null) { - speakerName = NormalizeValue(context.SpeakerId); + _speakerArea.SetActive(!string.IsNullOrEmpty(speakerName)); } if (_speakerNameText != null) @@ -48,15 +57,12 @@ namespace UI _speakerNameText.text = speakerName; } - if (_contentText != null) - { - _contentText.text = NormalizeValue(context.Text); - } + PlayTypewriter(_contentText, context.Text, context.PlayingSpeed); if (string.IsNullOrEmpty(speakerName)) { ClearSpeakerState(); - ApplySpeakerLayout(false, false); + ApplySpeakerLayout(false, false, true); return; } @@ -72,13 +78,14 @@ namespace UI bool hasLeftSpeaker = !string.IsNullOrEmpty(_leftSpeakerToken); bool hasRightSpeaker = !string.IsNullOrEmpty(_rightSpeakerToken); - ApplySpeakerLayout(hasLeftSpeaker, hasRightSpeaker); + ApplySpeakerLayout(hasLeftSpeaker, hasRightSpeaker, false); } protected override void OnClose(bool isShutdown, object userData) { ClearSpeakerState(); - ApplySpeakerLayout(false, false); + KillLayoutTween(); + ApplySpeakerLayout(false, false, true); base.OnClose(isShutdown, userData); } @@ -88,35 +95,164 @@ namespace UI _rightSpeakerToken = string.Empty; } - private void ApplySpeakerLayout(bool hasLeftSpeaker, bool hasRightSpeaker) + private void KillLayoutTween() + { + if (_layoutSequence != null) + { + _layoutSequence.Kill(); + _layoutSequence = null; + } + } + + private void ApplySpeakerLayout(bool hasLeftSpeaker, bool hasRightSpeaker, bool instant) + { + if (_leftSprite == null || _rightSprite == null) + { + return; + } + + bool leftCurrentlyVisible = _leftSprite.gameObject.activeSelf; + bool rightCurrentlyVisible = _rightSprite.gameObject.activeSelf; + + bool leftTargetVisible = hasLeftSpeaker; + bool rightTargetVisible = hasRightSpeaker; + + float leftTargetX = GetTargetX(true, hasLeftSpeaker, hasRightSpeaker); + float rightTargetX = GetTargetX(false, hasLeftSpeaker, hasRightSpeaker); + + KillLayoutTween(); + + PrepareStartState( + leftCurrentlyVisible, + rightCurrentlyVisible, + leftTargetVisible, + rightTargetVisible, + hasLeftSpeaker, + hasRightSpeaker); + + if (instant || _moveDuration <= 0f) + { + SetSpritePosition(_leftSprite.rectTransform, leftTargetX); + SetSpritePosition(_rightSprite.rectTransform, rightTargetX); + SetSpriteVisible(_leftSprite, leftTargetVisible); + SetSpriteVisible(_rightSprite, rightTargetVisible); + return; + } + + _layoutSequence = DOTween.Sequence(); + + Tween leftTween = CreateMoveTween(_leftSprite.rectTransform, leftTargetX); + if (leftTween != null) + { + _layoutSequence.Join(leftTween); + } + + Tween rightTween = CreateMoveTween(_rightSprite.rectTransform, rightTargetX); + if (rightTween != null) + { + _layoutSequence.Join(rightTween); + } + + if (_layoutSequence.active && _layoutSequence.Duration(false) > 0f) + { + _layoutSequence.OnComplete(() => + { + SetSpriteVisible(_leftSprite, leftTargetVisible); + SetSpriteVisible(_rightSprite, rightTargetVisible); + _layoutSequence = null; + }); + } + else + { + SetSpritePosition(_leftSprite.rectTransform, leftTargetX); + SetSpritePosition(_rightSprite.rectTransform, rightTargetX); + SetSpriteVisible(_leftSprite, leftTargetVisible); + SetSpriteVisible(_rightSprite, rightTargetVisible); + _layoutSequence.Kill(); + _layoutSequence = null; + } + } + + private void PrepareStartState( + bool leftCurrentlyVisible, + bool rightCurrentlyVisible, + bool leftTargetVisible, + bool rightTargetVisible, + bool hasLeftSpeaker, + bool hasRightSpeaker) + { + if (leftTargetVisible && !leftCurrentlyVisible) + { + float leftStartX = GetAppearStartX(true, rightCurrentlyVisible, hasLeftSpeaker, hasRightSpeaker); + SetSpritePosition(_leftSprite.rectTransform, leftStartX); + SetSpriteVisible(_leftSprite, true); + } + + if (rightTargetVisible && !rightCurrentlyVisible) + { + float rightStartX = GetAppearStartX(false, leftCurrentlyVisible, hasLeftSpeaker, hasRightSpeaker); + SetSpritePosition(_rightSprite.rectTransform, rightStartX); + SetSpriteVisible(_rightSprite, true); + } + + if (leftCurrentlyVisible && !leftTargetVisible) + { + SetSpriteVisible(_leftSprite, true); + } + + if (rightCurrentlyVisible && !rightTargetVisible) + { + SetSpriteVisible(_rightSprite, true); + } + } + + private float GetAppearStartX(bool isLeft, bool otherCurrentlyVisible, bool hasLeftSpeaker, + bool hasRightSpeaker) { if (hasLeftSpeaker && hasRightSpeaker) { - SetSpriteVisible(_leftSprite, true); - SetSpriteVisible(_rightSprite, true); - SetSpritePosition(_leftSprite.rectTransform, _leftSpritePosition); - SetSpritePosition(_rightSprite.rectTransform, _rightSpritePosition); - return; + // single -> multi: hidden side starts from center, then both move to side positions. + if (otherCurrentlyVisible) + { + return _singleSpeakerCenterPosition; + } + + return isLeft ? _leftSpritePosition : _rightSpritePosition; } - if (hasLeftSpeaker) + // single appears: active side starts from its side and moves to center. + return isLeft ? _leftSpritePosition : _rightSpritePosition; + } + + private float GetTargetX(bool isLeft, bool hasLeftSpeaker, bool hasRightSpeaker) + { + if (hasLeftSpeaker && hasRightSpeaker) { - SetSpriteVisible(_leftSprite, true); - SetSpriteVisible(_rightSprite, false); - SetSpritePosition(_leftSprite.rectTransform, _singleSpeakerCenterPosition); - return; + return isLeft ? _leftSpritePosition : _rightSpritePosition; } - if (hasRightSpeaker) + if (hasLeftSpeaker || hasRightSpeaker) { - SetSpriteVisible(_leftSprite, false); - SetSpriteVisible(_rightSprite, true); - SetSpritePosition(_rightSprite.rectTransform, -_singleSpeakerCenterPosition); - return; + // multi -> single: both move to center first, then inactive side hides. + return _singleSpeakerCenterPosition; } - SetSpriteVisible(_leftSprite, false); - SetSpriteVisible(_rightSprite, false); + return isLeft ? _leftSpritePosition : _rightSpritePosition; + } + + private Tween CreateMoveTween(RectTransform rectTransform, float targetX) + { + if (rectTransform == null) + { + return null; + } + + if (Mathf.Abs(rectTransform.anchoredPosition.x - targetX) < 0.01f) + { + return null; + } + + return rectTransform.DOAnchorPosX(targetX, _moveDuration).SetEase(_moveEase); } private static void SetSpriteVisible(Image spriteImage, bool visible) @@ -141,4 +277,4 @@ namespace UI rectTransform.anchoredPosition = anchoredPosition; } } -} \ No newline at end of file +} diff --git a/Assets/GameMain/Scripts/UI/Dialog/View/DialogFormBase.cs b/Assets/GameMain/Scripts/UI/Dialog/View/DialogFormBase.cs index edfab3b..6d35785 100644 --- a/Assets/GameMain/Scripts/UI/Dialog/View/DialogFormBase.cs +++ b/Assets/GameMain/Scripts/UI/Dialog/View/DialogFormBase.cs @@ -1,14 +1,17 @@ +using System.Collections; using Definition.Enum; using Event; +using TMPro; using UnityEngine; namespace UI { public abstract class DialogFormBase : UGuiForm { - [SerializeField] protected float _playSpeed; - protected DialogFormContext _context; + private Coroutine _typingCoroutine; + private TMP_Text _typingTargetText; + private bool _isTypewriting; public abstract DialogFormMode UIMode { get; } @@ -29,12 +32,18 @@ namespace UI protected override void OnClose(bool isShutdown, object userData) { + StopTypewriter(); _context = null; base.OnClose(isShutdown, userData); } public void OnClickNextLine() { + if (CompleteTypewriterIfRunning()) + { + return; + } + GameEntry.Event.Fire(this, DialogNextLineRequestEventArgs.Create()); } @@ -48,24 +57,90 @@ namespace UI GameEntry.Event.Fire(this, DialogStopRequestEventArgs.Create()); } - protected static string NormalizeValue(string value) + protected void PlayTypewriter(TMP_Text targetText, string text, float charsPerSecond) { - if (string.IsNullOrEmpty(value)) + StopTypewriter(); + + if (targetText == null) { - return string.Empty; + return; } - if (string.Equals(value, "Null", System.StringComparison.OrdinalIgnoreCase)) + string finalText = text ?? string.Empty; + _typingTargetText = targetText; + + if (charsPerSecond <= 0f || string.IsNullOrEmpty(finalText)) { - return string.Empty; + targetText.text = finalText; + targetText.maxVisibleCharacters = int.MaxValue; + _isTypewriting = false; + return; } - if (string.Equals(value, "None", System.StringComparison.OrdinalIgnoreCase)) + _isTypewriting = true; + _typingCoroutine = StartCoroutine(TypewriterRoutine(targetText, finalText, charsPerSecond)); + } + + protected void StopTypewriter() + { + if (_typingCoroutine != null) { - return string.Empty; + StopCoroutine(_typingCoroutine); + _typingCoroutine = null; } - return value; + _typingTargetText = null; + _isTypewriting = false; + } + + private bool CompleteTypewriterIfRunning() + { + if (!_isTypewriting || _typingTargetText == null) + { + return false; + } + + _typingTargetText.maxVisibleCharacters = int.MaxValue; + StopTypewriter(); + return true; + } + + private IEnumerator TypewriterRoutine(TMP_Text targetText, string finalText, float charsPerSecond) + { + targetText.text = finalText; + targetText.ForceMeshUpdate(); + + int totalCharacters = targetText.textInfo.characterCount; + if (totalCharacters <= 0) + { + targetText.maxVisibleCharacters = int.MaxValue; + _typingCoroutine = null; + _typingTargetText = null; + _isTypewriting = false; + yield break; + } + + targetText.maxVisibleCharacters = 0; + float elapsed = 0f; + int visibleCharacters = 0; + + while (visibleCharacters < totalCharacters) + { + elapsed += Time.unscaledDeltaTime; + int nextVisible = Mathf.Min(totalCharacters, Mathf.FloorToInt(elapsed * charsPerSecond)); + if (nextVisible != visibleCharacters) + { + visibleCharacters = nextVisible; + targetText.maxVisibleCharacters = visibleCharacters; + } + + yield return null; + } + + targetText.maxVisibleCharacters = int.MaxValue; + _typingCoroutine = null; + _typingTargetText = null; + _isTypewriting = false; } } } diff --git a/Assets/GameMain/Scripts/UI/Dialog/View/MaskDialogForm.cs b/Assets/GameMain/Scripts/UI/Dialog/View/MaskDialogForm.cs index 68fd91a..0673233 100644 --- a/Assets/GameMain/Scripts/UI/Dialog/View/MaskDialogForm.cs +++ b/Assets/GameMain/Scripts/UI/Dialog/View/MaskDialogForm.cs @@ -9,11 +9,11 @@ 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) @@ -29,10 +29,7 @@ namespace UI _maskImage.gameObject.SetActive(true); } - if (_text != null) - { - _text.text = NormalizeValue(context.Text); - } + PlayTypewriter(_text, context.Text, context.PlayingSpeed); } } } diff --git a/Assets/GameMain/UI/UIForms/BottomDialogForm.prefab b/Assets/GameMain/UI/UIForms/BottomDialogForm.prefab index ad6f356..021bc84 100644 --- a/Assets/GameMain/UI/UIForms/BottomDialogForm.prefab +++ b/Assets/GameMain/UI/UIForms/BottomDialogForm.prefab @@ -116,7 +116,7 @@ MonoBehaviour: m_SelectedTrigger: Selected m_DisabledTrigger: Disabled m_Interactable: 1 - m_TargetGraphic: {fileID: 0} + m_TargetGraphic: {fileID: 3708131469420921886} m_OnClick: m_PersistentCalls: m_Calls: @@ -321,7 +321,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!224 &4594737505273760298 RectTransform: m_ObjectHideFlags: 0 @@ -679,12 +679,15 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: _playSpeed: 0 + _speakerArea: {fileID: 3736358320082617150} _speakerNameText: {fileID: 2470970474825277305} _contentText: {fileID: 6431296888118130931} _leftSprite: {fileID: 7945103967507868302} _rightSprite: {fileID: 5385698520020721016} _leftSpritePosition: 450 _rightSpritePosition: -450 + _moveDuration: 0.25 + _moveEase: 9 --- !u!1 &7381337123922490182 GameObject: m_ObjectHideFlags: 0 @@ -837,7 +840,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!224 &1023330169278438415 RectTransform: m_ObjectHideFlags: 0 diff --git a/Assets/Launcher.unity b/Assets/Launcher.unity index 720e3fc..0e353b2 100644 --- a/Assets/Launcher.unity +++ b/Assets/Launcher.unity @@ -841,6 +841,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d6174838c30e460429e5628757bbf015, type: 3} m_Name: m_EditorClassIdentifier: + _playingSpeed: 10 --- !u!1 &513208572 GameObject: m_ObjectHideFlags: 0 From 7ac832f74bc95bfc5da26364e138d3e1ea76ab55 Mon Sep 17 00:00:00 2001 From: SepComet <202308010230@stu.csust.edu.cn> Date: Mon, 9 Feb 2026 13:53:04 +0800 Subject: [PATCH 6/6] =?UTF-8?q?-=20=E8=B0=83=E6=95=B4=E4=BA=86=E5=AF=B9?= =?UTF-8?q?=E8=AF=9D=20UI=20=E7=B1=BB=E5=9E=8B=E7=9A=84=E5=91=BD=E5=90=8D?= =?UTF-8?q?=EF=BC=8C=E4=BD=BF=E5=85=B6=E6=9B=B4=E5=85=B7=E8=BE=A8=E8=AF=86?= =?UTF-8?q?=E5=BA=A6=20-=20=E6=98=BE=E5=BC=8F=E6=A0=87=E8=AE=B0=E8=BF=98?= =?UTF-8?q?=E6=9C=AA=E5=AE=9E=E7=8E=B0=E7=9A=84=20BubbleDialogForm?= =?UTF-8?q?=EF=BC=8C=E9=81=BF=E5=85=8D=E8=AF=AF=E7=94=A8=E7=9A=84=E6=83=85?= =?UTF-8?q?=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/GameMain/DataTables/Dialog.txt | 2 +- Assets/GameMain/DataTables/DialogLine.txt | 2 +- Assets/GameMain/DataTables/UIForm.txt | 2 +- .../Scripts/Definition/Enum/DialogFormMode.cs | 2 +- .../Scripts/Definition/Enum/UIFormId.cs | 2 +- .../Scripts/Procedure/ProcedureCombine.cs | 4 ++-- .../Dialog/Controller/DialogFormController.cs | 7 ++++--- ...Form.prefab => BottomBoxDialogForm.prefab} | 2 +- ...b.meta => BottomBoxDialogForm.prefab.meta} | 0 数据表/Dialog.txt | 2 +- 数据表/Dialog.xlsx | Bin 10774 -> 10772 bytes 数据表/UIForm.txt | 2 +- 数据表/UIForm.xlsx | Bin 10322 -> 10331 bytes 13 files changed, 14 insertions(+), 13 deletions(-) rename Assets/GameMain/UI/UIForms/{BottomDialogForm.prefab => BottomBoxDialogForm.prefab} (99%) rename Assets/GameMain/UI/UIForms/{BottomDialogForm.prefab.meta => BottomBoxDialogForm.prefab.meta} (100%) diff --git a/Assets/GameMain/DataTables/Dialog.txt b/Assets/GameMain/DataTables/Dialog.txt index a3e4690..bb0b92c 100644 --- a/Assets/GameMain/DataTables/Dialog.txt +++ b/Assets/GameMain/DataTables/Dialog.txt @@ -4,4 +4,4 @@ # 对话编号 策划备注 对话标识 对话形式 章节编号 1001 第一章介绍 Chapter1_Intro Mask 1.001 1002 第一章主流程 Chapter1_Main BottomBox 1.002 - 1003 第一章玩法开始前闲聊 Chapter1_SmallTalk1 BubbleBox 1.003 + 1003 第一章玩法开始前闲聊 Chapter1_SmallTalk1 Bubble 1.003 diff --git a/Assets/GameMain/DataTables/DialogLine.txt b/Assets/GameMain/DataTables/DialogLine.txt index 901aa3f..567ba54 100644 --- a/Assets/GameMain/DataTables/DialogLine.txt +++ b/Assets/GameMain/DataTables/DialogLine.txt @@ -2,7 +2,7 @@ # Id SpeakerId Expression SpeakerName Direction Text Emphasis ChapterId DialogId # int string ExpressionType string int string EmphasisType int int # 对话行编号 策划备注 说话人Id 表情 显示人名 说话朝向 说话内容 演出效果 章节Id 对话Id - 100100001 Id规则为 Null None Null 0 相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。相传。 None 1.00100001 1001.00001 + 100100001 Id规则为 Null None Null 0 相传。 None 1.00100001 1001.00001 100100002 第1位数为章节Id Null None Null 0 Mask。 None 1.00100002 1001.00002 100100003 第2-4位数为对话Id Null None Null 0 很好。 None 1.00100003 1001.00003 100200001 第5-9位数为对话行Id Xu Normal 徐晟壹 0 你好,王。 None 1.00200001 1002.00001 diff --git a/Assets/GameMain/DataTables/UIForm.txt b/Assets/GameMain/DataTables/UIForm.txt index 53ec801..eccc80b 100644 --- a/Assets/GameMain/DataTables/UIForm.txt +++ b/Assets/GameMain/DataTables/UIForm.txt @@ -8,5 +8,5 @@ 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 + 105 Bottom对话UI BottomBoxDialogForm Default False False 106 Bubble对话UI BubbleDialogForm Default True False diff --git a/Assets/GameMain/Scripts/Definition/Enum/DialogFormMode.cs b/Assets/GameMain/Scripts/Definition/Enum/DialogFormMode.cs index 91c1a70..07c32ee 100644 --- a/Assets/GameMain/Scripts/Definition/Enum/DialogFormMode.cs +++ b/Assets/GameMain/Scripts/Definition/Enum/DialogFormMode.cs @@ -17,6 +17,6 @@ namespace Definition.Enum /// /// 对话气泡 /// - BubbleBox = 3 + Bubble = 3 } } \ No newline at end of file diff --git a/Assets/GameMain/Scripts/Definition/Enum/UIFormId.cs b/Assets/GameMain/Scripts/Definition/Enum/UIFormId.cs index c55f37f..f3ca7c5 100644 --- a/Assets/GameMain/Scripts/Definition/Enum/UIFormId.cs +++ b/Assets/GameMain/Scripts/Definition/Enum/UIFormId.cs @@ -47,7 +47,7 @@ namespace UI /// /// 底部剧情对话界面。 /// - BottomDialogForm = 105, + BottomBoxDialogForm = 105, /// /// 气泡剧情对话界面。 diff --git a/Assets/GameMain/Scripts/Procedure/ProcedureCombine.cs b/Assets/GameMain/Scripts/Procedure/ProcedureCombine.cs index 76a2302..08ad6fd 100644 --- a/Assets/GameMain/Scripts/Procedure/ProcedureCombine.cs +++ b/Assets/GameMain/Scripts/Procedure/ProcedureCombine.cs @@ -90,8 +90,8 @@ namespace Procedure //InitializeProcedureState(); GameEntry.Dialog.Init(1); - GameEntry.Dialog.StartDialog(1001); - //GameEntry.Dialog.StartDialog(1002); + //GameEntry.Dialog.StartDialog(1001); + GameEntry.Dialog.StartDialog(1002); } /// diff --git a/Assets/GameMain/Scripts/UI/Dialog/Controller/DialogFormController.cs b/Assets/GameMain/Scripts/UI/Dialog/Controller/DialogFormController.cs index 592f803..5a3014b 100644 --- a/Assets/GameMain/Scripts/UI/Dialog/Controller/DialogFormController.cs +++ b/Assets/GameMain/Scripts/UI/Dialog/Controller/DialogFormController.cs @@ -1,3 +1,4 @@ +using System; using Definition.Enum; using GameFramework.Event; using UnityGameFramework.Runtime; @@ -109,9 +110,9 @@ namespace UI case DialogFormMode.Mask: return UIFormId.MaskDialogForm; case DialogFormMode.BottomBox: - return UIFormId.BottomDialogForm; - case DialogFormMode.BubbleBox: - return UIFormId.BottomDialogForm; + return UIFormId.BottomBoxDialogForm; + case DialogFormMode.Bubble: + throw new NotImplementedException("BubbleBox 对话框尚未实现"); default: return UIFormId.Undefined; } diff --git a/Assets/GameMain/UI/UIForms/BottomDialogForm.prefab b/Assets/GameMain/UI/UIForms/BottomBoxDialogForm.prefab similarity index 99% rename from Assets/GameMain/UI/UIForms/BottomDialogForm.prefab rename to Assets/GameMain/UI/UIForms/BottomBoxDialogForm.prefab index 021bc84..19efbf2 100644 --- a/Assets/GameMain/UI/UIForms/BottomDialogForm.prefab +++ b/Assets/GameMain/UI/UIForms/BottomBoxDialogForm.prefab @@ -615,7 +615,7 @@ GameObject: - component: {fileID: 4643264964412212504} - component: {fileID: 2327325990879817607} m_Layer: 5 - m_Name: BottomDialogForm + m_Name: BottomBoxDialogForm m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 diff --git a/Assets/GameMain/UI/UIForms/BottomDialogForm.prefab.meta b/Assets/GameMain/UI/UIForms/BottomBoxDialogForm.prefab.meta similarity index 100% rename from Assets/GameMain/UI/UIForms/BottomDialogForm.prefab.meta rename to Assets/GameMain/UI/UIForms/BottomBoxDialogForm.prefab.meta diff --git a/数据表/Dialog.txt b/数据表/Dialog.txt index a3e4690..bb0b92c 100644 --- a/数据表/Dialog.txt +++ b/数据表/Dialog.txt @@ -4,4 +4,4 @@ # 对话编号 策划备注 对话标识 对话形式 章节编号 1001 第一章介绍 Chapter1_Intro Mask 1.001 1002 第一章主流程 Chapter1_Main BottomBox 1.002 - 1003 第一章玩法开始前闲聊 Chapter1_SmallTalk1 BubbleBox 1.003 + 1003 第一章玩法开始前闲聊 Chapter1_SmallTalk1 Bubble 1.003 diff --git a/数据表/Dialog.xlsx b/数据表/Dialog.xlsx index 6643c3718d1bc3b84d8167e840c0ee51786f541d..7ad1427ab86ac0c716b15b131fdd985f16495001 100644 GIT binary patch delta 1619 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 b2^y2QDJlZv3X>5D6_fcX6$Wi300000zdiAD diff --git a/数据表/UIForm.txt b/数据表/UIForm.txt index 53ec801..eccc80b 100644 --- a/数据表/UIForm.txt +++ b/数据表/UIForm.txt @@ -8,5 +8,5 @@ 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 + 105 Bottom对话UI BottomBoxDialogForm Default False False 106 Bubble对话UI BubbleDialogForm Default True False diff --git a/数据表/UIForm.xlsx b/数据表/UIForm.xlsx index 33a879a8eba683dd1f9fbab55ce967962e43a86c..ba5c5196d0c46c7d2dd661d56d738826ff61d1d6 100644 GIT binary patch delta 2085 zcmV+=2-^43P}@+jlK}NhLs?sD#ua5Sy{DZA9!?wxR9L#49oI zGAz6WPSTcCATj#>|GxY0zER(sukpD z0~U>n@lbt0Rvmpbp0R^ku zpq?O;)&wJejhAhYqbeANzn|p%2jlnkrPFDrleU{3Yr7}eO*ZHCGgaD}QE`RVnSZ|z zprXKd8k4GU@$lSmLuLK>t;n4lu4zWfjT?G_>)!JAjO@m z>EnfSBfla`YC_40c?l_enVP9`<*!CMi^K?I8LR@;uh;4m1g=2bG0QXdF64FzVW#3V zP2)9x74?#`&0;V>;nK$}x>81p9b(AcuEh-esQv9a&0rMy)H^jkZQL*6^C6tMP$7_i zGu+U@v%}EwFP!6q;S{{$I@|+CLS8xe2NVT7xBz%al(6iEBb?_OHx5_eqo1M|{tR9C zeILW;uD`wT&5zni@d;gX7LokFEM=FC`{XTuXM^j(?T|l7^A%_33xnL|u0yUY&r19a z-*67CH|~P>nvfj2fM2J`xZz!=KyOmaN8u@Z&%ya&+gvuBwGH9k$cAC)%^%hE$k$EV z&`HGbw*tn2Ab*ho+`B+x$=%TuM2eDha#(o-E%STDEZRVS zaPKp^Glyl{6z*Nqg%>`l3r2csKz%v0!c^Sn+jUJE2lfD%Vp<`-Lxs;vFlfRHzwlB~ z2X3KIdfNtT{{~J>TH?hd!k+LUcHaR{%#zbrq^D(hEiN`T< zFo{J^jD&(kEkb$ev`~{+_8mx}Ch;_XCgT4k_9n3!$2d$8BcZUMEJAtdv`~`>HCIIz zMA=FXh6T}#5nB+=8G8$&S>s?qls85L!q>lH@fTjo2ZXO4O+?hyIsN(ym8+yq3!?cV zwji1@_Cw@oOXV;{j8wv|Wl_mXdzFDcpIz-hr)ImIiOjSpv5ADb&LJXoYC#TvCZQ%} zq!YGSi%wpubgHIevZAh5>6~fE&VuN^H4#JS5V7kt36;r6C;uNcUCT?APA$Wzs~zan zR@TmfXe%o=5kuz?vFkL64|MWRD^n*gRXQ~hQCBZ=D*wS8uPXJfPl7+V-a?1-_eokYfRtzRxLVfSGow%tIRwWzNi z$klfw3-h4uCb5Mv<#ws?zCMsUg^cC$?-0|*a2^@@SaV?1S1Y*>YMDqQ+Zb)##}>wv z+ohu9YF+Wulgw5jYG9>YdG3*)s1-Wn@2Ea!C3SLqf>8{-CH!C2@)#p1Ul^&lyPYFp zaE23)7dS^__>2uafKP<5?gdUbvTiR5`7x_MsBeD(kRG!$2|xx3+|(av>;V7(IFo!2 zEPn{0BvZF(C>KRY&9T65B8?hnj5?bgPhBp|T-uOyi$ukt(3;#-655vbVrp z?wpiMf8Y5X`FzJVmNo)kdx1jg5p0563nic-TqCZB>n5l^UAuW7Xp}+hLZ4t{f>(%w zCF}Y%gHonR7E=>67;8Szby{nn0MZ50L^xPF>m&>ylgF^G(`JaEOB)EWz}Ih=O84{t zdKhRm!Z9 zIsqG#Fef$vLX&4FKmm!9s3$xDnUm!wAsegPpq?NE008X|000;O0000000031AOHXW P#gic@D+WF!00000Cq~ky delta 2099 zcmV-32+a4}P|{GalK};grN}2wlb8W4f2#_tB$WVlq7qVrKy1dowh^&o*@m<`6R*U; z%dqekI7u5?fyC(h|NHL0lhf%&R>2DxTh=N=aYRr6ir1o4s|?*1v+xWB)-femRV&EQ z7A%_Prza`bl-CAsOs&DV5^Uf}%2KW~w02HYj4fY-WH#~+<;7)fBy;|0R#-Fsf5cXR z6GA3ff@6X?hFf5$2O`=b1s{<5*;E}sa10elP|o5wit&%vfsyvlhE6$f%F=DM-)R^3 zkS%yG4(^RD2V>JTQ8Vgd`1~=xpI*vQ?ihnB}LD!}4nIHn6hxY0B%H8Pls+gfXA;}~pahQ;TBs88- zLLS<|NBwQSz94tw|0O0NIWNeVjz=^;B<=xum;3lnJ* zq zJv=w}_#nq)p5ln4ml9V@I%#l`Fo>U?^O|>jR{RML)zA{f6 zLdlW2DJeY}nyGT-twuV_)No{(tTJg{FZCyIT!XknUgYdu$n65cO!;Zs)_-kl>Za8# ziopa0OAoW~LK!Kege7RZ7Ax?*@wV$MhgsxH?=<+hL0^LBeK14NAdr7@+|t3b!;-_F zxWFmH8RQCbcn%y0dF9}5VDhT*pOfCfrN%3!GC#O=mmNWl=m_^#b_@b{{-~};UN^UnPAaDVCSdFc z;untK-Z>H_cSlzcDZ0YF>$>`1F+i-s5!{udftLBbViq??aKAa4L4R;}&BOB674BWv zg&RDnizm>;gnDviMN;uR->w_dIo+`0fYbftdqv>+}F7G3y5qK}II=FeYM?n2(8_Nj#2;y-6&3Vk8t&)FPBy zr-hotvL8SSHHoJ&5r6+Du``L)*vEc~7zyP$Ypy7_P75`OK+CGof~d5TlVL%$#E313 zmKi$>qNT>(f~edWO$e`lV?tiIl}`w-9!*5pwK;u#1uCngP79*tMQlN|#MljygDsT( z6fsf>yOu>IxArQ1eLcI@fle*$A`_WuUSbmobe%&)>eQUO74Ry6Pd_1MyvbS!kBW0UrJK0HWWWS$*Qx> zh?FbOJ@ON^PEPpuq&ejkbqaihS@hi{{9iTl7$aX8sU*36=Rg>o;l$$^&e0e?V|^Fk zBO$DNffJ5w+X*8-X7va4?N5*%vpESs1_@t3aR})F001?Uf)6ZzXqu8tWz$eDijbfW z;51%qk=P}6_;WebY?Gi{h13d_4QXQ<|3r&a0bMutG*CCCJ?5CbdL^=k%WT$3zeCTMWp zT-J3~Yak!81=>V^L^>NZ@FADSpsurKfS}772yx%jZFWwH^H5|Knn?e z7NXTmSX=~_!LVg;>xQ9o%g|?sOh~$KFAt6`qjvIlkREn4F&@ZdRn?)?Q?+c$L z{^YzLJ+bpn9B;>?-1zCQRy^s5PCNPhGsj&emz=eV?fCsrbWTLHnGVL{xIZ0#%Pt`X zAEy^@)Mi-%M8cvz>EJ>>7Pa~@;#_W{2oTX|I@wi$vO_~&R4yY;KSjyz*Lc*e z+A6k6eFqa%1Xdt>Du$=&@F0)Py!p}Gr<_xN9-F!Up+m><&|Lb;EuwY#?X!mw;SvFz zlW8PC0S1$*Br^djlinng1(2o4Cr^`hB~$_f1Ct>G6_dj!9FzSe4gq$P3??uEQjv02BZK000000096X0001G zle{KD0g{vcCOQEXlQ}0g0X&m%CqMy!ld&f}0hg2RCm|fx1ONc-4*&od00000 d0000103ZMW0K){6;RG6!MJNykH6#E4000Qk&+z~N