diff --git a/Assets/000_assets/material/M_SquareFrame 1.mat b/Assets/000_assets/material/M_SquareFrame 1.mat
index ac4a140e..df46fd8b 100644
--- a/Assets/000_assets/material/M_SquareFrame 1.mat
+++ b/Assets/000_assets/material/M_SquareFrame 1.mat
@@ -213,7 +213,7 @@ Material:
- _Dst: 10
- _DstBlend: 0
- _DstBlendAlpha: 0
- - _EdgeValue: 0.9350733
+ - _EdgeValue: 0.7629054
- _EnvironmentReflections: 1
- _FNLfanxiangkaiguan: 0
- _Face: 1
@@ -258,7 +258,7 @@ Material:
- _Mask_scale: 1
- _Metallic: 0
- _OcclusionStrength: 1
- - _Opacity: 0.064926684
+ - _Opacity: 0.23709458
- _Parallax: 0.005
- _Pass: 0
- _QueueOffset: 0
diff --git a/Assets/AddressableAssetsData/AssetGroups/Localization-Assets-Shared.asset b/Assets/AddressableAssetsData/AssetGroups/Localization-Assets-Shared.asset
index c3f4bda6..f7ad9421 100644
--- a/Assets/AddressableAssetsData/AssetGroups/Localization-Assets-Shared.asset
+++ b/Assets/AddressableAssetsData/AssetGroups/Localization-Assets-Shared.asset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:04e36419ad0f0bd45377a7d540689ea9ee7ceb05b10dd8bec904d1bce3150eab
-size 1288
+oid sha256:fccb81961034100f9b9d0d761b1412a34bca7c436729bc0258acd1c2dcc348de
+size 1492
diff --git a/Assets/AddressableAssetsData/AssetGroups/Localization-String-Tables-Chinese (Simplified) (zh-CN).asset b/Assets/AddressableAssetsData/AssetGroups/Localization-String-Tables-Chinese (Simplified) (zh-CN).asset
index 763389e2..04964713 100644
--- a/Assets/AddressableAssetsData/AssetGroups/Localization-String-Tables-Chinese (Simplified) (zh-CN).asset
+++ b/Assets/AddressableAssetsData/AssetGroups/Localization-String-Tables-Chinese (Simplified) (zh-CN).asset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:dba1f02527c509560b7ac00a0db7163d0dda54d4189255487ddebade4d6298e5
-size 1305
+oid sha256:39cd81120f01a46fbbbaedadb62dfe26c5d48278819a14c34838c40945d65e86
+size 1485
diff --git a/Assets/AddressableAssetsData/AssetGroups/Localization-String-Tables-Chinese (Traditional) (zh-TW).asset b/Assets/AddressableAssetsData/AssetGroups/Localization-String-Tables-Chinese (Traditional) (zh-TW).asset
index 47f4dcff..64f02d20 100644
--- a/Assets/AddressableAssetsData/AssetGroups/Localization-String-Tables-Chinese (Traditional) (zh-TW).asset
+++ b/Assets/AddressableAssetsData/AssetGroups/Localization-String-Tables-Chinese (Traditional) (zh-TW).asset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:dcc985186b987c3def378cdc5b1551dc416ac762f1f4633ce1e196ff34f94b10
-size 1307
+oid sha256:ea8356e9ac788d466900c4dd1e37aba48674fecfc1e484bfce808d7363459acd
+size 1487
diff --git a/Assets/AddressableAssetsData/AssetGroups/Localization-String-Tables-English (en).asset b/Assets/AddressableAssetsData/AssetGroups/Localization-String-Tables-English (en).asset
index cdbe3687..fd81d948 100644
--- a/Assets/AddressableAssetsData/AssetGroups/Localization-String-Tables-English (en).asset
+++ b/Assets/AddressableAssetsData/AssetGroups/Localization-String-Tables-English (en).asset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:0d28393d3a6374ad1da1dba7b2af9f29fd87633b6cf23b7d82b8e4f9ed916b11
-size 1261
+oid sha256:cce589fc1720a6eddb3d1695967db54c2260c31c55be2393d4f60c9c7cc17df2
+size 1435
diff --git a/Assets/AddressableAssetsData/AssetGroups/Localization-String-Tables-Japanese (ja).asset b/Assets/AddressableAssetsData/AssetGroups/Localization-String-Tables-Japanese (ja).asset
index ebb4623d..11989e3b 100644
--- a/Assets/AddressableAssetsData/AssetGroups/Localization-String-Tables-Japanese (ja).asset
+++ b/Assets/AddressableAssetsData/AssetGroups/Localization-String-Tables-Japanese (ja).asset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:ae1741db12f54540b5e5150eefd5d599800d98ef207f64297b2461df0db31d1b
-size 1263
+oid sha256:3d5af9dff98c7c4d87d7d09381a0b729e64cf8578ee31104a5d01803a0025d7e
+size 1437
diff --git a/Assets/AddressableAssetsData/AssetGroups/Localization-String-Tables-Korean (ko).asset b/Assets/AddressableAssetsData/AssetGroups/Localization-String-Tables-Korean (ko).asset
index 197e9278..0d6d4ef4 100644
--- a/Assets/AddressableAssetsData/AssetGroups/Localization-String-Tables-Korean (ko).asset
+++ b/Assets/AddressableAssetsData/AssetGroups/Localization-String-Tables-Korean (ko).asset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:54391b035e5d1d2b6db182d231af4167d5b427834755391cb37ac4753666c27b
-size 1259
+oid sha256:f51959237e2153f07b68a8d3a8ef54fd03be5c8a4fb8738556ac26e5c448e848
+size 1433
diff --git a/Assets/AddressableAssetsData/AssetGroups/Localization-String-Tables-Thai (th).asset b/Assets/AddressableAssetsData/AssetGroups/Localization-String-Tables-Thai (th).asset
index 06f45973..5bb0266d 100644
--- a/Assets/AddressableAssetsData/AssetGroups/Localization-String-Tables-Thai (th).asset
+++ b/Assets/AddressableAssetsData/AssetGroups/Localization-String-Tables-Thai (th).asset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:dbd67aa0f36cb1491c41ada26e016f6e3a10f274f6bed3874e9a01712438d301
-size 1255
+oid sha256:df1169b65f6aeefe65fc5d70086b4141d3e38d45cc442ad4fd39991f90f55a28
+size 1429
diff --git a/Assets/AddressableAssetsData/AssetGroups/Localization-String-Tables-Vietnamese (Vietnam) (vi-VN).asset b/Assets/AddressableAssetsData/AssetGroups/Localization-String-Tables-Vietnamese (Vietnam) (vi-VN).asset
index 4c779cb5..a3a4367a 100644
--- a/Assets/AddressableAssetsData/AssetGroups/Localization-String-Tables-Vietnamese (Vietnam) (vi-VN).asset
+++ b/Assets/AddressableAssetsData/AssetGroups/Localization-String-Tables-Vietnamese (Vietnam) (vi-VN).asset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:91bfe4656ee7f65b4afbcacffc9c409ce2a3feb994b805a62c5d6d8d31663cf9
-size 1305
+oid sha256:e98036060313bfc83cf12ba03753535f6e80aec3dca330a0e781346a16a19722
+size 1485
diff --git a/Assets/FR2_Cache.asset b/Assets/FR2_Cache.asset
index fa4bd840..438cd94c 100644
--- a/Assets/FR2_Cache.asset
+++ b/Assets/FR2_Cache.asset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:910dd8b2eb28a401c1bbf1b1dba1bd1951a9d1f39b72c9a33dd33933b2d45f3b
-size 8580991
+oid sha256:60dc68ac5a0ba78d0dc6f92fa364b1059e0d8f619f2d736032b095983f04ebd7
+size 8541513
diff --git a/Assets/Scripts/Story.meta b/Assets/Localization/Message.meta
similarity index 77%
rename from Assets/Scripts/Story.meta
rename to Assets/Localization/Message.meta
index 944faee4..019ffee8 100644
--- a/Assets/Scripts/Story.meta
+++ b/Assets/Localization/Message.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 0486971babc04a1419e16413dfce980c
+guid: d5e986d3a0508cf4aae911cac5aab212
folderAsset: yes
DefaultImporter:
externalObjects: {}
diff --git a/Assets/Localization/Message/Message Shared Data.asset b/Assets/Localization/Message/Message Shared Data.asset
new file mode 100644
index 00000000..412c8e9a
--- /dev/null
+++ b/Assets/Localization/Message/Message Shared Data.asset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c87bf3436915bf53811fc72ce6191c22e9cbf2322daf6f2128237cdc5a4ce57c
+size 905
diff --git a/Assets/Localization/Message/Message Shared Data.asset.meta b/Assets/Localization/Message/Message Shared Data.asset.meta
new file mode 100644
index 00000000..a6aa547f
--- /dev/null
+++ b/Assets/Localization/Message/Message Shared Data.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6c799daafc19ce54a8ba2d09737bc2aa
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Localization/Message/Message.asset b/Assets/Localization/Message/Message.asset
new file mode 100644
index 00000000..a6e17d03
--- /dev/null
+++ b/Assets/Localization/Message/Message.asset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6d857d58f19a3f39dddb00766aaa0d37b4f4aae3818184db1e4bf8346c68c439
+size 1161
diff --git a/Assets/Localization/Message/Message.asset.meta b/Assets/Localization/Message/Message.asset.meta
new file mode 100644
index 00000000..315142f9
--- /dev/null
+++ b/Assets/Localization/Message/Message.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 88d982fd5c6bda04e8ea20350cd159aa
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Localization/Message/Message_en.asset b/Assets/Localization/Message/Message_en.asset
new file mode 100644
index 00000000..7e9ff3ae
--- /dev/null
+++ b/Assets/Localization/Message/Message_en.asset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6e0847d666a7112d124cf7bba87ddbbbc1d43772457cfdff697769702f0db511
+size 667
diff --git a/Assets/Localization/Message/Message_en.asset.meta b/Assets/Localization/Message/Message_en.asset.meta
new file mode 100644
index 00000000..75968ad9
--- /dev/null
+++ b/Assets/Localization/Message/Message_en.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 61661a97b386b1b468a2f6eb6edbd219
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Localization/Message/Message_ja.asset b/Assets/Localization/Message/Message_ja.asset
new file mode 100644
index 00000000..30fea5a4
--- /dev/null
+++ b/Assets/Localization/Message/Message_ja.asset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9257222f6d278c361e8331646d91e46c4871af00c2a2e024898f9d2ad2abde35
+size 667
diff --git a/Assets/Localization/Message/Message_ja.asset.meta b/Assets/Localization/Message/Message_ja.asset.meta
new file mode 100644
index 00000000..97b2fe10
--- /dev/null
+++ b/Assets/Localization/Message/Message_ja.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 0b436cb055982024d87c26e5dd006d98
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Localization/Message/Message_ko.asset b/Assets/Localization/Message/Message_ko.asset
new file mode 100644
index 00000000..790839a8
--- /dev/null
+++ b/Assets/Localization/Message/Message_ko.asset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:00df13043c568a636d42e4ee00fe83a071a814f1067d93b4c35a8829323c0e50
+size 667
diff --git a/Assets/Localization/Message/Message_ko.asset.meta b/Assets/Localization/Message/Message_ko.asset.meta
new file mode 100644
index 00000000..da41d1a7
--- /dev/null
+++ b/Assets/Localization/Message/Message_ko.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: de75c1b8ae3365341bbe21fc291dedba
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Localization/Message/Message_th.asset b/Assets/Localization/Message/Message_th.asset
new file mode 100644
index 00000000..97840662
--- /dev/null
+++ b/Assets/Localization/Message/Message_th.asset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5efc37fc419686ca4f498be801df7b9c80db564589db1e65376e046bd9f834f1
+size 667
diff --git a/Assets/Localization/Message/Message_th.asset.meta b/Assets/Localization/Message/Message_th.asset.meta
new file mode 100644
index 00000000..f290ea5a
--- /dev/null
+++ b/Assets/Localization/Message/Message_th.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 02149fcde1352dd499e840aca3a762aa
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Localization/Message/Message_vi-VN.asset b/Assets/Localization/Message/Message_vi-VN.asset
new file mode 100644
index 00000000..9c1d28d1
--- /dev/null
+++ b/Assets/Localization/Message/Message_vi-VN.asset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8506447a8d64db173e7ebdff3f1bd4f289505fdc6bc7804b211bd1180eeacb4f
+size 673
diff --git a/Assets/Localization/Message/Message_vi-VN.asset.meta b/Assets/Localization/Message/Message_vi-VN.asset.meta
new file mode 100644
index 00000000..64fe47cd
--- /dev/null
+++ b/Assets/Localization/Message/Message_vi-VN.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 3f8b371af239879499277d4b555cd69b
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Localization/Message/Message_zh-CN.asset b/Assets/Localization/Message/Message_zh-CN.asset
new file mode 100644
index 00000000..78f4f6f2
--- /dev/null
+++ b/Assets/Localization/Message/Message_zh-CN.asset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:56ba5b742e860f501ada4865863ea09b6e531d8ace3f270c11386b438f4833c2
+size 673
diff --git a/Assets/Localization/Message/Message_zh-CN.asset.meta b/Assets/Localization/Message/Message_zh-CN.asset.meta
new file mode 100644
index 00000000..6a950f15
--- /dev/null
+++ b/Assets/Localization/Message/Message_zh-CN.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d7530d3dd169d2141a5207d0172e3a9b
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Localization/Message/Message_zh-TW.asset b/Assets/Localization/Message/Message_zh-TW.asset
new file mode 100644
index 00000000..20e4e20e
--- /dev/null
+++ b/Assets/Localization/Message/Message_zh-TW.asset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:430849f0c723e4b42b5ed8c2abf9b71d7a977e0306f32e51b12e125ce1d5f407
+size 673
diff --git a/Assets/Localization/Message/Message_zh-TW.asset.meta b/Assets/Localization/Message/Message_zh-TW.asset.meta
new file mode 100644
index 00000000..696ca45c
--- /dev/null
+++ b/Assets/Localization/Message/Message_zh-TW.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d51a896a1514cde44bcff62055b619f0
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Localization/Story/Chapter0_Lines Shared Data.asset b/Assets/Localization/Story/Chapter0_Lines Shared Data.asset
index 96551484..9d81ebf6 100644
--- a/Assets/Localization/Story/Chapter0_Lines Shared Data.asset
+++ b/Assets/Localization/Story/Chapter0_Lines Shared Data.asset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:ed67bb7472abede7c8fc5973a60e94bac70fea33306594fa328c3a0f4c5a96b2
-size 9524
+oid sha256:965e2068ef83fa994f9b4d26b0baf3d95c6cc8b040bb9827eb291d1c0d6481e4
+size 10132
diff --git a/Assets/Localization/Story/Chapter0_Lines_en.asset b/Assets/Localization/Story/Chapter0_Lines_en.asset
index 9755c24b..f10a9f75 100644
--- a/Assets/Localization/Story/Chapter0_Lines_en.asset
+++ b/Assets/Localization/Story/Chapter0_Lines_en.asset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:2a70b8cad7a827fa0ab8cb116d8bb437eb078d2241c17bd966b113924508d5f1
-size 5699
+oid sha256:6c329b8e8bfa65c4fc4e2cec27e81588784fc73678a0cd20455c390860f19a18
+size 5998
diff --git a/Assets/Prefabs/MessageBox.prefab b/Assets/Prefabs/MessageBox.prefab
new file mode 100644
index 00000000..64a56322
--- /dev/null
+++ b/Assets/Prefabs/MessageBox.prefab
@@ -0,0 +1,1178 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &879916274401096383
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 615193340523544279}
+ - component: {fileID: 5666768798593383827}
+ - component: {fileID: 1511386179001491510}
+ - component: {fileID: 3483998606450382267}
+ - component: {fileID: 6873272222453210977}
+ - component: {fileID: 8283513128948507429}
+ m_Layer: 5
+ m_Name: Text
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &615193340523544279
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 879916274401096383}
+ 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: 5092532649173066385}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0, y: 0.5}
+--- !u!222 &5666768798593383827
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 879916274401096383}
+ m_CullTransparentMesh: 0
+--- !u!114 &1511386179001491510
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 879916274401096383}
+ 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: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_text: 'Size of this window will change based on the size of its content.
+
+ You
+ can even replace this text area with different objects and the modal will resize
+ appropriately.'
+ m_isRightToLeft: 0
+ m_fontAsset: {fileID: 11400000, guid: 87c1b020037c81841b3d98dd497cbdeb, type: 2}
+ m_sharedMaterial: {fileID: -5812992765432063453, guid: 87c1b020037c81841b3d98dd497cbdeb,
+ 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: 36
+ m_fontSizeBase: 36
+ m_fontWeight: 400
+ m_enableAutoSizing: 0
+ m_fontSizeMin: 18
+ m_fontSizeMax: 72
+ m_fontStyle: 0
+ m_HorizontalAlignment: 1
+ m_VerticalAlignment: 512
+ m_textAlignment: 65535
+ m_characterSpacing: 0
+ m_characterHorizontalScale: 1
+ m_wordSpacing: 0
+ m_lineSpacing: 0
+ m_lineSpacingMax: 0
+ m_paragraphSpacing: 0
+ m_charWidthMaxAdj: 0
+ m_TextWrappingMode: 1
+ m_wordWrappingRatios: 0.4
+ m_overflowMode: 0
+ m_linkedTextComponent: {fileID: 0}
+ parentLinkedComponent: {fileID: 0}
+ m_enableKerning: 1
+ m_ActiveFontFeatures: 6e72656b
+ m_enableExtraPadding: 0
+ checkPaddingRequired: 0
+ m_isRichText: 1
+ m_EmojiFallbackSupport: 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: 1
+ 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!114 &3483998606450382267
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 879916274401096383}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 0
+ m_MinWidth: 300
+ m_MinHeight: -1
+ m_PreferredWidth: 1200
+ m_PreferredHeight: -1
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!114 &6873272222453210977
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 879916274401096383}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ mTerm:
+ mTermSecondary:
+ PrimaryTermModifier: 0
+ SecondaryTermModifier: 0
+ TermPrefix:
+ TermSuffix:
+ LocalizeOnAwake: 1
+ IgnoreRTL: 0
+ MaxCharactersInRTL: 0
+ IgnoreNumbersInRTL: 1
+ CorrectAlignmentForRTL: 1
+ AddSpacesToJoinedLanguages: 0
+ AllowLocalizedParameters: 1
+ AllowParameters: 1
+ TranslatedObjects: []
+ LocalizeEvent:
+ m_PersistentCalls:
+ m_Calls: []
+ AlwaysForceLocalize: 0
+ LocalizeCallBack:
+ Target: {fileID: 0}
+ MethodName:
+ mGUI_ShowReferences: 0
+ mGUI_ShowTems: 1
+ mGUI_ShowCallback: 0
+ mLocalizeTarget: {fileID: 0}
+ mLocalizeTargetName: I2.Loc.LocalizeTarget_TextMeshPro_UGUI
+--- !u!114 &8283513128948507429
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 879916274401096383}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: c9586cfd190ca384a8dd72aa92c86152, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ _Params: []
+ _IsGlobalManager: 0
+--- !u!1 &1136078909091246446
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 6350689905123524917}
+ - component: {fileID: 8046614678578984176}
+ - component: {fileID: 1168971869091347235}
+ - component: {fileID: 290495902587943806}
+ m_Layer: 5
+ m_Name: Shadow
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &6350689905123524917
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1136078909091246446}
+ 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: 2419101803835352228}
+ 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: 24, y: 24}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8046614678578984176
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1136078909091246446}
+ m_CullTransparentMesh: 0
+--- !u!114 &1168971869091347235
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1136078909091246446}
+ 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: 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: 21300000, guid: 0755a77d5bd80d94eaba57a2d5d0f55e, type: 3}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 5
+--- !u!114 &290495902587943806
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1136078909091246446}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 1
+ m_MinWidth: -1
+ m_MinHeight: -1
+ m_PreferredWidth: -1
+ m_PreferredHeight: -1
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!1 &2466060879987557898
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 4470639438119130197}
+ - component: {fileID: 2681963618800678}
+ - component: {fileID: 4114123131783411130}
+ - component: {fileID: 1501530303918721731}
+ m_Layer: 5
+ m_Name: Background
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &4470639438119130197
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2466060879987557898}
+ 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: 2419101803835352228}
+ 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 &2681963618800678
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2466060879987557898}
+ m_CullTransparentMesh: 0
+--- !u!114 &4114123131783411130
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2466060879987557898}
+ 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.1764706, g: 0.25490198, b: 0.33333334, 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: 21300000, guid: 5e16c7aea118d68498053518146c9cf9, type: 3}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 6
+--- !u!114 &1501530303918721731
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2466060879987557898}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 1
+ m_MinWidth: -1
+ m_MinHeight: -1
+ m_PreferredWidth: -1
+ m_PreferredHeight: -1
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!1 &5263591163922513352
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 380156332139323662}
+ - component: {fileID: 2963587876961484201}
+ - component: {fileID: 6608848915897109691}
+ - component: {fileID: 5328264186748005550}
+ m_Layer: 5
+ m_Name: Title
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &380156332139323662
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5263591163922513352}
+ 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: 8427854290943886812}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0.5}
+ m_AnchorMax: {x: 1, y: 0.5}
+ m_AnchoredPosition: {x: 42.5, y: 0}
+ m_SizeDelta: {x: -42.5, y: 50}
+ m_Pivot: {x: 0, y: 0.5}
+--- !u!222 &2963587876961484201
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5263591163922513352}
+ m_CullTransparentMesh: 0
+--- !u!114 &6608848915897109691
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5263591163922513352}
+ 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: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_text: "\u63D0\u793A"
+ m_isRightToLeft: 0
+ m_fontAsset: {fileID: 11400000, guid: 87c1b020037c81841b3d98dd497cbdeb, type: 2}
+ m_sharedMaterial: {fileID: -5812992765432063453, guid: 87c1b020037c81841b3d98dd497cbdeb,
+ 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: 36
+ m_fontSizeBase: 36
+ m_fontWeight: 400
+ m_enableAutoSizing: 0
+ m_fontSizeMin: 18
+ m_fontSizeMax: 72
+ m_fontStyle: 0
+ m_HorizontalAlignment: 1
+ m_VerticalAlignment: 512
+ m_textAlignment: 65535
+ m_characterSpacing: 0
+ m_characterHorizontalScale: 1
+ m_wordSpacing: 0
+ m_lineSpacing: 0
+ m_lineSpacingMax: 0
+ m_paragraphSpacing: 0
+ m_charWidthMaxAdj: 0
+ m_TextWrappingMode: 1
+ m_wordWrappingRatios: 0.4
+ m_overflowMode: 0
+ m_linkedTextComponent: {fileID: 0}
+ parentLinkedComponent: {fileID: 0}
+ m_enableKerning: 1
+ m_ActiveFontFeatures: 6e72656b
+ m_enableExtraPadding: 0
+ checkPaddingRequired: 0
+ m_isRichText: 1
+ m_EmojiFallbackSupport: 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: 1
+ m_useMaxVisibleDescender: 1
+ m_pageToDisplay: 1
+ m_margin: {x: 0, y: 0, z: 0, w: 1}
+ m_isUsingLegacyAnimationComponent: 0
+ m_isVolumetricText: 0
+ m_hasFontAssetChanged: 0
+ m_baseMaterial: {fileID: 0}
+ m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!114 &5328264186748005550
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5263591163922513352}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ mTerm:
+ mTermSecondary:
+ PrimaryTermModifier: 0
+ SecondaryTermModifier: 0
+ TermPrefix:
+ TermSuffix:
+ LocalizeOnAwake: 1
+ IgnoreRTL: 0
+ MaxCharactersInRTL: 0
+ IgnoreNumbersInRTL: 1
+ CorrectAlignmentForRTL: 1
+ AddSpacesToJoinedLanguages: 0
+ AllowLocalizedParameters: 1
+ AllowParameters: 1
+ TranslatedObjects: []
+ LocalizeEvent:
+ m_PersistentCalls:
+ m_Calls: []
+ AlwaysForceLocalize: 0
+ LocalizeCallBack:
+ Target: {fileID: 0}
+ MethodName:
+ mGUI_ShowReferences: 0
+ mGUI_ShowTems: 1
+ mGUI_ShowCallback: 0
+ mLocalizeTarget: {fileID: 0}
+ mLocalizeTargetName: I2.Loc.LocalizeTarget_TextMeshPro_UGUI
+--- !u!1 &5265375797484090089
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 5092532649173066385}
+ - component: {fileID: 5960696260683360303}
+ - component: {fileID: 2626936303953010707}
+ m_Layer: 5
+ m_Name: Content
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &5092532649173066385
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5265375797484090089}
+ 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: 6213375211361212409}
+ - {fileID: 615193340523544279}
+ m_Father: {fileID: 2419101803835352228}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 600, y: -139.29001}
+ m_SizeDelta: {x: 1160, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &5960696260683360303
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5265375797484090089}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Padding:
+ m_Left: 15
+ m_Right: 15
+ m_Top: 10
+ m_Bottom: 10
+ m_ChildAlignment: 4
+ m_Spacing: 0
+ m_ChildForceExpandWidth: 1
+ m_ChildForceExpandHeight: 1
+ m_ChildControlWidth: 1
+ m_ChildControlHeight: 1
+ m_ChildScaleWidth: 0
+ m_ChildScaleHeight: 0
+ m_ReverseArrangement: 0
+--- !u!114 &2626936303953010707
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5265375797484090089}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_HorizontalFit: 0
+ m_VerticalFit: 2
+--- !u!1 &5678028656669781845
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 320178516533985418}
+ - component: {fileID: 4259966678612083182}
+ - component: {fileID: 3589424571792001025}
+ - component: {fileID: 3307501539980532867}
+ - component: {fileID: 4678585854450785687}
+ m_Layer: 5
+ m_Name: Receive
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &320178516533985418
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5678028656669781845}
+ 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: 2419101803835352228}
+ 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: 24, y: 24}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &4259966678612083182
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5678028656669781845}
+ m_CullTransparentMesh: 0
+--- !u!114 &3589424571792001025
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5678028656669781845}
+ 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: 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: 5
+--- !u!114 &3307501539980532867
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5678028656669781845}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 1
+ m_MinWidth: -1
+ m_MinHeight: -1
+ m_PreferredWidth: -1
+ m_PreferredHeight: -1
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!114 &4678585854450785687
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5678028656669781845}
+ 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: 3589424571792001025}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls: []
+--- !u!1 &6491620794303241582
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 4526797650398712025}
+ - component: {fileID: 5627530628664898890}
+ - component: {fileID: 6421992386164511662}
+ m_Layer: 5
+ m_Name: Icon
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &4526797650398712025
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6491620794303241582}
+ 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: 8427854290943886812}
+ 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: 15, y: 0}
+ m_SizeDelta: {x: 25, y: 25}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &5627530628664898890
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6491620794303241582}
+ m_CullTransparentMesh: 0
+--- !u!114 &6421992386164511662
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6491620794303241582}
+ 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: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 21300000, guid: 5604130c3074dc3419d6f832ea194715, type: 3}
+ m_Type: 0
+ m_PreserveAspect: 1
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!1 &6532009276675811406
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2419101803835352228}
+ - component: {fileID: 7281307023078711775}
+ - component: {fileID: 7028777253552577277}
+ - component: {fileID: 964826506701897714}
+ - component: {fileID: 2969807565022845143}
+ - component: {fileID: 8574893005057652156}
+ - component: {fileID: 4600504794659689328}
+ m_Layer: 5
+ m_Name: MessageBox
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &2419101803835352228
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6532009276675811406}
+ 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: 6350689905123524917}
+ - {fileID: 4470639438119130197}
+ - {fileID: 8427854290943886812}
+ - {fileID: 5092532649173066385}
+ - {fileID: 320178516533985418}
+ m_Father: {fileID: 0}
+ 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: 1200, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &7281307023078711775
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6532009276675811406}
+ m_CullTransparentMesh: 0
+--- !u!114 &7028777253552577277
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6532009276675811406}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Padding:
+ m_Left: 20
+ m_Right: 20
+ m_Top: 20
+ m_Bottom: 20
+ m_ChildAlignment: 0
+ m_Spacing: 20
+ m_ChildForceExpandWidth: 1
+ m_ChildForceExpandHeight: 0
+ m_ChildControlWidth: 1
+ m_ChildControlHeight: 0
+ m_ChildScaleWidth: 0
+ m_ChildScaleHeight: 0
+ m_ReverseArrangement: 0
+--- !u!114 &964826506701897714
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6532009276675811406}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_HorizontalFit: 0
+ m_VerticalFit: 2
+--- !u!114 &2969807565022845143
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6532009276675811406}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: d4f4ae5cbba538d449b15cffc97daa7d, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ fixOnEnable: 1
+ fixWithDelay: 1
+--- !u!225 &8574893005057652156
+CanvasGroup:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6532009276675811406}
+ m_Enabled: 1
+ m_Alpha: 0
+ m_Interactable: 0
+ m_BlocksRaycasts: 0
+ m_IgnoreParentGroups: 0
+--- !u!114 &4600504794659689328
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6532009276675811406}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 464526859792bdc4e8f53386f07a4cb3, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ serializationData:
+ SerializedFormat: 2
+ SerializedBytes:
+ ReferencedUnityObjects: []
+ SerializedBytesString:
+ Prefab: {fileID: 0}
+ PrefabModificationsReferencedUnityObjects: []
+ PrefabModifications: []
+ SerializationNodes:
+ - Name: infos
+ Entry: 6
+ Data:
+ - Name: fadeTweener
+ Entry: 6
+ Data:
+ canvasGroup: {fileID: 8574893005057652156}
+ onAllMessagesClosed:
+ m_PersistentCalls:
+ m_Calls: []
+ infoIndex: 0
+ defaultIcon: {fileID: 21300000, guid: 5604130c3074dc3419d6f832ea194715, type: 3}
+ iconImage: {fileID: 6421992386164511662}
+ titleLocalize: {fileID: 5328264186748005550}
+ titleText: {fileID: 6608848915897109691}
+ contentLocalize: {fileID: 6873272222453210977}
+ contentText: {fileID: 1511386179001491510}
+ parametersManager: {fileID: 8283513128948507429}
+ receiveButton: {fileID: 4678585854450785687}
+--- !u!1 &6594943516597377984
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 8427854290943886812}
+ m_Layer: 5
+ m_Name: Title Bar
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &8427854290943886812
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6594943516597377984}
+ 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: 4526797650398712025}
+ - {fileID: 380156332139323662}
+ m_Father: {fileID: 2419101803835352228}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 24}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &7723681965174021130
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 6213375211361212409}
+ - component: {fileID: 5945474545609719375}
+ - component: {fileID: 5490394147613889219}
+ - component: {fileID: 801795416082778179}
+ m_Layer: 5
+ m_Name: Background
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &6213375211361212409
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7723681965174021130}
+ 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: 5092532649173066385}
+ 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 &5945474545609719375
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7723681965174021130}
+ m_CullTransparentMesh: 0
+--- !u!114 &5490394147613889219
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7723681965174021130}
+ 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.039215688}
+ 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: 21300000, guid: 5e16c7aea118d68498053518146c9cf9, type: 3}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 6
+--- !u!114 &801795416082778179
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7723681965174021130}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 1
+ m_MinWidth: -1
+ m_MinHeight: -1
+ m_PreferredWidth: -1
+ m_PreferredHeight: -1
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
diff --git a/Assets/Scripts/Story/StoryUI.meta b/Assets/Prefabs/MessageBox.prefab.meta
similarity index 57%
rename from Assets/Scripts/Story/StoryUI.meta
rename to Assets/Prefabs/MessageBox.prefab.meta
index 43d82222..2db775f2 100644
--- a/Assets/Scripts/Story/StoryUI.meta
+++ b/Assets/Prefabs/MessageBox.prefab.meta
@@ -1,7 +1,6 @@
fileFormatVersion: 2
-guid: cf843fc3f4fd10e499a6cc1b60bc1861
-folderAsset: yes
-DefaultImporter:
+guid: a8e9cecf40a73474d8a5ffc9bada8c20
+PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
diff --git a/Assets/Prefabs/Story/Dialog/Character.prefab b/Assets/Prefabs/Story/Dialog/Character.prefab
new file mode 100644
index 00000000..5e375fc2
--- /dev/null
+++ b/Assets/Prefabs/Story/Dialog/Character.prefab
@@ -0,0 +1,92 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &597743784740087054
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 7917580385239275621}
+ - component: {fileID: 1310777969124757443}
+ - component: {fileID: 6320712627302899334}
+ - component: {fileID: 5305109034942869160}
+ m_Layer: 5
+ m_Name: Character
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &7917580385239275621
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 597743784740087054}
+ 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: 0}
+ 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: 760, y: 1350}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &1310777969124757443
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 597743784740087054}
+ m_CullTransparentMesh: 1
+--- !u!114 &6320712627302899334
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 597743784740087054}
+ 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: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 21300000, guid: 2736c74fecf99944a9977f12bf51f01c, type: 3}
+ 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!114 &5305109034942869160
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 597743784740087054}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 331609805c7de66409dba07cce2f3a28, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Assembly-CSharp::Ichni.Story.Dialogue.SpritePortraitRenderer
+ _alphaActive: 1
+ _alphaInactive: 0.7
diff --git a/Assets/Prefabs/Story/Dialog/Character.prefab.meta b/Assets/Prefabs/Story/Dialog/Character.prefab.meta
new file mode 100644
index 00000000..92b23771
--- /dev/null
+++ b/Assets/Prefabs/Story/Dialog/Character.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 373499de58b10f34983c975fccad9f89
+PrefabImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scenes/GameScene.unity b/Assets/Scenes/GameScene.unity
index e9eb3100..b2f75e64 100644
--- a/Assets/Scenes/GameScene.unity
+++ b/Assets/Scenes/GameScene.unity
@@ -14,7 +14,7 @@ OcclusionCullingSettings:
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 10
- m_Fog: 1
+ m_Fog: 0
m_FogColor: {r: 0.09296818, g: 0.080870956, b: 0.29559743, a: 1}
m_FogMode: 1
m_FogDensity: 0.01
diff --git a/Assets/Scenes/MenuScene.unity b/Assets/Scenes/MenuScene.unity
index 2d2d4e6d..403cebe9 100644
--- a/Assets/Scenes/MenuScene.unity
+++ b/Assets/Scenes/MenuScene.unity
@@ -370,102 +370,6 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8360185}
m_CullTransparentMesh: 1
---- !u!1 &10799670
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 10799671}
- - component: {fileID: 10799674}
- - component: {fileID: 10799673}
- - component: {fileID: 10799672}
- m_Layer: 5
- m_Name: Background
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &10799671
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 10799670}
- 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: 664205619}
- 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 &10799672
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 10799670}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_IgnoreLayout: 1
- m_MinWidth: -1
- m_MinHeight: -1
- m_PreferredWidth: -1
- m_PreferredHeight: -1
- m_FlexibleWidth: -1
- m_FlexibleHeight: -1
- m_LayoutPriority: 1
---- !u!114 &10799673
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 10799670}
- 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.039215688}
- 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: 21300000, guid: 5e16c7aea118d68498053518146c9cf9, type: 3}
- m_Type: 1
- m_PreserveAspect: 0
- m_FillCenter: 1
- m_FillMethod: 4
- m_FillAmount: 1
- m_FillClockwise: 1
- m_FillOrigin: 0
- m_UseSpriteMesh: 0
- m_PixelsPerUnitMultiplier: 6
---- !u!222 &10799674
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 10799670}
- m_CullTransparentMesh: 0
--- !u!1 &24771457
GameObject:
m_ObjectHideFlags: 0
@@ -1981,7 +1885,7 @@ MonoBehaviour:
m_GameObject: {fileID: 78737087}
m_Enabled: 1
m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 3ec0b23c77de2764d9425add8f28ea00, type: 3}
+ m_Script: {fileID: 11500000, guid: 981c044487823304aade761b1adaf914, type: 3}
m_Name:
m_EditorClassIdentifier:
serializationData:
@@ -2003,7 +1907,6 @@ MonoBehaviour:
Entry: 6
Data:
mainCanvasGroup: {fileID: 859038606}
- messageBox: {fileID: 1211674719}
backButton: {fileID: 1519945293}
--- !u!114 &78737090
MonoBehaviour:
@@ -2837,6 +2740,7 @@ GameObject:
- component: {fileID: 145321078}
- component: {fileID: 145321081}
- component: {fileID: 145321080}
+ - component: {fileID: 145321082}
m_Layer: 5
m_Name: Choice2
m_TagString: Untagged
@@ -2860,9 +2764,9 @@ RectTransform:
- {fileID: 867819402}
m_Father: {fileID: 762655493}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 0, y: 0}
- m_AnchoredPosition: {x: 0, y: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 600, y: -475}
m_SizeDelta: {x: 1188, y: 150}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &145321080
@@ -2917,6 +2821,23 @@ MonoBehaviour:
m_OnClick:
m_PersistentCalls:
m_Calls: []
+--- !u!114 &145321082
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 145321077}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 63c53d8a6dc173a4db3d6a8a1499b7e6, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Assembly-CSharp::Ichni.Story.Dialogue.ChoiceButton
+ button: {fileID: 145321081}
+ buttonBackground: {fileID: 1008658488}
+ buttonText: {fileID: 867819403}
+ availableSprite: {fileID: 21300000, guid: 0071c3fb2dcf7b0428798cc6dc8bd68c, type: 3}
+ unavailableSprite: {fileID: 21300000, guid: 439f6117a35abbf4e8c4b847c040f025, type: 3}
--- !u!1 &153881444
GameObject:
m_ObjectHideFlags: 0
@@ -2961,6 +2882,7 @@ GameObject:
serializedVersion: 6
m_Component:
- component: {fileID: 163525692}
+ - component: {fileID: 163525693}
m_Layer: 5
m_Name: CharacterContainer
m_TagString: Untagged
@@ -2979,8 +2901,7 @@ RectTransform:
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
- m_Children:
- - {fileID: 1572316431}
+ m_Children: []
m_Father: {fileID: 6347218673911890593}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
@@ -2988,6 +2909,21 @@ RectTransform:
m_AnchoredPosition: {x: 0.000061035, y: 0}
m_SizeDelta: {x: 2560, y: 1440}
m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &163525693
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 163525691}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: ec4abf93d4e3d1d448630a311fe7c236, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Assembly-CSharp::Ichni.Story.Dialogue.VNPortraitStage
+ _spritePortraitPrefab: {fileID: 597743784740087054, guid: 373499de58b10f34983c975fccad9f89,
+ type: 3}
+ _portraitContainer: {fileID: 163525692}
--- !u!1 &171863126
GameObject:
m_ObjectHideFlags: 0
@@ -3174,6 +3110,7 @@ GameObject:
- component: {fileID: 190695850}
- component: {fileID: 190695853}
- component: {fileID: 190695852}
+ - component: {fileID: 190695854}
m_Layer: 5
m_Name: Choice0
m_TagString: Untagged
@@ -3197,9 +3134,9 @@ RectTransform:
- {fileID: 1228626495}
m_Father: {fileID: 762655493}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 0, y: 0}
- m_AnchoredPosition: {x: 0, y: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 600, y: -75}
m_SizeDelta: {x: 1188, y: 150}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &190695852
@@ -3254,6 +3191,23 @@ MonoBehaviour:
m_OnClick:
m_PersistentCalls:
m_Calls: []
+--- !u!114 &190695854
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 190695849}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 63c53d8a6dc173a4db3d6a8a1499b7e6, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Assembly-CSharp::Ichni.Story.Dialogue.ChoiceButton
+ button: {fileID: 190695853}
+ buttonBackground: {fileID: 736709068}
+ buttonText: {fileID: 1228626496}
+ availableSprite: {fileID: 21300000, guid: 0071c3fb2dcf7b0428798cc6dc8bd68c, type: 3}
+ unavailableSprite: {fileID: 21300000, guid: 439f6117a35abbf4e8c4b847c040f025, type: 3}
--- !u!1 &193194204
GameObject:
m_ObjectHideFlags: 0
@@ -3887,6 +3841,7 @@ GameObject:
- component: {fileID: 269231010}
- component: {fileID: 269231013}
- component: {fileID: 269231012}
+ - component: {fileID: 269231014}
m_Layer: 5
m_Name: Choice3
m_TagString: Untagged
@@ -3910,9 +3865,9 @@ RectTransform:
- {fileID: 463634754}
m_Father: {fileID: 762655493}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 0, y: 0}
- m_AnchoredPosition: {x: 0, y: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 600, y: -675}
m_SizeDelta: {x: 1188, y: 150}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &269231012
@@ -3967,6 +3922,23 @@ MonoBehaviour:
m_OnClick:
m_PersistentCalls:
m_Calls: []
+--- !u!114 &269231014
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 269231009}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 63c53d8a6dc173a4db3d6a8a1499b7e6, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Assembly-CSharp::Ichni.Story.Dialogue.ChoiceButton
+ button: {fileID: 269231013}
+ buttonBackground: {fileID: 403017938}
+ buttonText: {fileID: 463634755}
+ availableSprite: {fileID: 21300000, guid: 0071c3fb2dcf7b0428798cc6dc8bd68c, type: 3}
+ unavailableSprite: {fileID: 21300000, guid: 439f6117a35abbf4e8c4b847c040f025, type: 3}
--- !u!1 &272824270
GameObject:
m_ObjectHideFlags: 0
@@ -4344,7 +4316,7 @@ MonoBehaviour:
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
- m_text: "\u6D4B\u8BD5\u7248\u672C\uFF0C\u6E38\u620F\u4E2D\u7684\u6240\u6709\u5185\u5BB9\u90FD\u6709\u53EF\u80FD\u4E0D\u662F\u6700\u7EC8\u5448\u73B0\u3002"
+ m_text: Test version, all content in the game may not be final.
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 87c1b020037c81841b3d98dd497cbdeb, type: 2}
m_sharedMaterial: {fileID: -5812992765432063453, guid: 87c1b020037c81841b3d98dd497cbdeb,
@@ -6505,7 +6477,7 @@ GameObject:
- component: {fileID: 428441704}
- component: {fileID: 428441703}
m_Layer: 5
- m_Name: Image
+ m_Name: Pointer
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@@ -6518,16 +6490,16 @@ RectTransform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 428441701}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ 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: 1876757693}
+ m_Father: {fileID: 1089279498}
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: 1080, y: -85}
+ m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 71, y: 71}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &428441703
@@ -6568,23 +6540,6 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 428441701}
m_CullTransparentMesh: 1
---- !u!114 &435099836
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 0}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 481ab606793a67349be805c13febeba0, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- mTarget: {fileID: 1488500374}
- mAlignment_RTL: 516
- mAlignment_LTR: 513
- mAlignmentWasRTL: 0
- mInitializeAlignment: 1
--- !u!114 &443068616
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -6731,8 +6686,8 @@ GameObject:
serializedVersion: 6
m_Component:
- component: {fileID: 449802387}
- - component: {fileID: 449802388}
- component: {fileID: 449802389}
+ - component: {fileID: 449802395}
- component: {fileID: 449802390}
- component: {fileID: 449802391}
- component: {fileID: 449802392}
@@ -6759,18 +6714,6 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!114 &449802388
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 449802386}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 7dc7dc14d9f97c043bf6fb67c3a70877, type: 3}
- m_Name:
- m_EditorClassIdentifier: Assembly-CSharp::Ichni.Story.Dialogue.StoryVariableStorage
--- !u!114 &449802389
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -6785,7 +6728,7 @@ MonoBehaviour:
m_EditorClassIdentifier: YarnSpinner.Unity::Yarn.Unity.DialogueRunner
yarnProject: {fileID: 7545569452688597077, guid: 8ce10d75c4d583b40a11257d0da22825,
type: 3}
- variableStorage: {fileID: 449802388}
+ variableStorage: {fileID: 449802395}
lineProvider: {fileID: 449802391}
saliencyStrategy: 0
dialoguePresenters:
@@ -6866,25 +6809,22 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: b7b08c1a67d3d65478d9d9b4e275393f, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Ichni.Story.Dialogue.VNDialoguePresenter
- panelGroup: {fileID: 6759614698927231795}
- dialogueText: {fileID: 1834199647}
- speakerContainer: {fileID: 993868748}
- speakerText: {fileID: 1870072472}
- advanceButton: {fileID: 1876757696}
- choiceFrame: {fileID: 762655492}
- choiceButtons:
- - {fileID: 190695853}
- - {fileID: 1340448065}
- - {fileID: 145321081}
- - {fileID: 269231013}
- choiceTexts:
- - {fileID: 1228626496}
- - {fileID: 2043234284}
- - {fileID: 867819403}
- - {fileID: 463634755}
+ uiPage: {fileID: 5788293620442285279}
lettersPerSecond: 40
- fadeInDuration: 0.2
- fadeOutDuration: 0.15
+--- !u!114 &449802395
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 449802386}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 610c541718d694070a21327d1ae62e75, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: YarnSpinner.Unity::Yarn.Unity.InMemoryVariableStorage
+ showDebug: 0
+ debugTextView: {fileID: 0}
--- !u!1 &454823864
GameObject:
m_ObjectHideFlags: 0
@@ -8222,7 +8162,7 @@ GameObject:
- component: {fileID: 520601621}
- component: {fileID: 520601622}
m_Layer: 5
- m_Name: Image (1)
+ m_Name: Triangles
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@@ -8244,7 +8184,7 @@ RectTransform:
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.000011444092}
+ m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 2315, y: 350}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &520601621
@@ -8268,7 +8208,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 2100000, guid: 3a639d10397a28446b936a4051cfe465, type: 2}
- m_Color: {r: 0.058193527, g: 0.04313725, b: 0.5176471, a: 0.050980393}
+ m_Color: {r: 0.058193527, g: 0.04313725, b: 0.627451, a: 0.078431375}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
@@ -9810,85 +9750,6 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: f7db12c4a04bb4249a4916541b6d0e5d, type: 3}
m_Name:
m_EditorClassIdentifier:
---- !u!1 &664205618
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 664205619}
- - component: {fileID: 664205621}
- - component: {fileID: 664205620}
- m_Layer: 5
- m_Name: Content
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &664205619
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 664205618}
- 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: 10799671}
- - {fileID: 1488500372}
- m_Father: {fileID: 1211674714}
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 1}
- m_AnchorMax: {x: 0, y: 1}
- m_AnchoredPosition: {x: 600, y: -139.29001}
- m_SizeDelta: {x: 1160, y: 150.58}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &664205620
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 664205618}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_HorizontalFit: 0
- m_VerticalFit: 2
---- !u!114 &664205621
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 664205618}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Padding:
- m_Left: 15
- m_Right: 15
- m_Top: 10
- m_Bottom: 10
- m_ChildAlignment: 4
- m_Spacing: 0
- m_ChildForceExpandWidth: 1
- m_ChildForceExpandHeight: 1
- m_ChildControlWidth: 1
- m_ChildControlHeight: 1
- m_ChildScaleWidth: 0
- m_ChildScaleHeight: 0
- m_ReverseArrangement: 0
--- !u!1 &669016711
GameObject:
m_ObjectHideFlags: 0
@@ -10039,147 +9900,6 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 669159255}
m_CullTransparentMesh: 1
---- !u!1 &672864207
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 672864208}
- - component: {fileID: 672864212}
- - component: {fileID: 672864211}
- - component: {fileID: 672864210}
- - component: {fileID: 672864209}
- m_Layer: 5
- m_Name: Receive
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &672864208
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 672864207}
- 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: 1211674714}
- 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: 24, y: 24}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &672864209
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 672864207}
- 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: 672864211}
- m_OnClick:
- m_PersistentCalls:
- m_Calls: []
---- !u!114 &672864210
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 672864207}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_IgnoreLayout: 1
- m_MinWidth: -1
- m_MinHeight: -1
- m_PreferredWidth: -1
- m_PreferredHeight: -1
- m_FlexibleWidth: -1
- m_FlexibleHeight: -1
- m_LayoutPriority: 1
---- !u!114 &672864211
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 672864207}
- 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: 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: 5
---- !u!222 &672864212
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 672864207}
- m_CullTransparentMesh: 0
--- !u!1 &673579560
GameObject:
m_ObjectHideFlags: 0
@@ -11689,6 +11409,126 @@ MonoBehaviour:
mAlignment_LTR: 516
mAlignmentWasRTL: 0
mInitializeAlignment: 0
+--- !u!1 &776434466
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 776434467}
+ - component: {fileID: 776434470}
+ - component: {fileID: 776434469}
+ - component: {fileID: 776434468}
+ m_Layer: 5
+ m_Name: Button
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &776434467
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 776434466}
+ 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: 6347218673911890593}
+ 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 &776434468
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 776434466}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Button
+ 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: 1876757694}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls: []
+--- !u!114 &776434469
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 776434466}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
+ 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 &776434470
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 776434466}
+ m_CullTransparentMesh: 1
--- !u!1001 &805060254
PrefabInstance:
m_ObjectHideFlags: 0
@@ -13152,7 +12992,6 @@ RectTransform:
- {fileID: 1519945292}
- {fileID: 1371572583}
- {fileID: 1119493264}
- - {fileID: 1211674714}
m_Father: {fileID: 859038602}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
@@ -14741,102 +14580,6 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1032070286}
m_CullTransparentMesh: 1
---- !u!1 &1035827643
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 1035827644}
- - component: {fileID: 1035827647}
- - component: {fileID: 1035827646}
- - component: {fileID: 1035827645}
- m_Layer: 5
- m_Name: Shadow
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &1035827644
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1035827643}
- 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: 1211674714}
- 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: 24, y: 24}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &1035827645
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1035827643}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_IgnoreLayout: 1
- m_MinWidth: -1
- m_MinHeight: -1
- m_PreferredWidth: -1
- m_PreferredHeight: -1
- m_FlexibleWidth: -1
- m_FlexibleHeight: -1
- m_LayoutPriority: 1
---- !u!114 &1035827646
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1035827643}
- 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: 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: 21300000, guid: 0755a77d5bd80d94eaba57a2d5d0f55e, type: 3}
- m_Type: 1
- m_PreserveAspect: 0
- m_FillCenter: 1
- m_FillMethod: 4
- m_FillAmount: 1
- m_FillClockwise: 1
- m_FillOrigin: 0
- m_UseSpriteMesh: 0
- m_PixelsPerUnitMultiplier: 5
---- !u!222 &1035827647
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1035827643}
- m_CullTransparentMesh: 0
--- !u!1 &1047641974
GameObject:
m_ObjectHideFlags: 0
@@ -15528,9 +15271,9 @@ GameObject:
m_Component:
- component: {fileID: 1089279498}
- component: {fileID: 1089279500}
- - component: {fileID: 1089279499}
+ - component: {fileID: 1089279501}
m_Layer: 5
- m_Name: Wheel (1)
+ m_Name: DialogWheel
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@@ -15547,44 +15290,16 @@ RectTransform:
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
- m_Children: []
+ m_Children:
+ - {fileID: 1929210745}
+ - {fileID: 428441702}
m_Father: {fileID: 2005595457}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 21.536}
- m_AnchorMin: {x: 0.5, y: 0.5}
- m_AnchorMax: {x: 0.5, y: 0.5}
- m_AnchoredPosition: {x: 1080.4, y: -117.09996}
+ m_AnchorMin: {x: 1, y: 0.5}
+ m_AnchorMax: {x: 1, y: 0.5}
+ m_AnchoredPosition: {x: -77.599976, y: -117.09996}
m_SizeDelta: {x: 461.375, y: 465.301}
m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &1089279499
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1089279497}
- 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: 1
- m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
- m_Maskable: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_Sprite: {fileID: 21300000, guid: d2df5cc63e3980d499853cc9b5749d18, type: 3}
- 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 &1089279500
CanvasRenderer:
m_ObjectHideFlags: 0
@@ -15593,6 +15308,23 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1089279497}
m_CullTransparentMesh: 1
+--- !u!114 &1089279501
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1089279497}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 027bcd2c2d137f5458f8b12002234663, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Assembly-CSharp::Ichni.Story.UI.DialogWheel
+ wheelRect: {fileID: 1929210745}
+ rotationCycleDuration: 24
+ pointerRect: {fileID: 428441702}
+ pointerFloatDistance: 5
+ pointerFloatDuration: 1
--- !u!1 &1091682061
GameObject:
m_ObjectHideFlags: 0
@@ -17157,163 +16889,6 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &1211674713
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 1211674714}
- - component: {fileID: 1211674718}
- - component: {fileID: 1211674717}
- - component: {fileID: 1211674716}
- - component: {fileID: 1211674715}
- - component: {fileID: 1211674720}
- - component: {fileID: 1211674719}
- m_Layer: 5
- m_Name: MessageBox
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 0
---- !u!224 &1211674714
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1211674713}
- 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: 1035827644}
- - {fileID: 1558137783}
- - {fileID: 1284535424}
- - {fileID: 664205619}
- - {fileID: 672864208}
- m_Father: {fileID: 869340149}
- 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: 35.00006}
- m_SizeDelta: {x: 1200, y: 234.58}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &1211674715
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1211674713}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: d4f4ae5cbba538d449b15cffc97daa7d, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- fixOnEnable: 1
- fixWithDelay: 1
---- !u!114 &1211674716
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1211674713}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_HorizontalFit: 0
- m_VerticalFit: 2
---- !u!114 &1211674717
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1211674713}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Padding:
- m_Left: 20
- m_Right: 20
- m_Top: 20
- m_Bottom: 20
- m_ChildAlignment: 0
- m_Spacing: 20
- m_ChildForceExpandWidth: 1
- m_ChildForceExpandHeight: 0
- m_ChildControlWidth: 1
- m_ChildControlHeight: 0
- m_ChildScaleWidth: 0
- m_ChildScaleHeight: 0
- m_ReverseArrangement: 0
---- !u!222 &1211674718
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1211674713}
- m_CullTransparentMesh: 0
---- !u!114 &1211674719
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1211674713}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 464526859792bdc4e8f53386f07a4cb3, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- serializationData:
- SerializedFormat: 2
- SerializedBytes:
- ReferencedUnityObjects: []
- SerializedBytesString:
- Prefab: {fileID: 0}
- PrefabModificationsReferencedUnityObjects: []
- PrefabModifications: []
- SerializationNodes:
- - Name: infos
- Entry: 6
- Data:
- - Name: fadeTweener
- Entry: 6
- Data:
- canvasGroup: {fileID: 1211674720}
- infoIndex: 0
- defaultIcon: {fileID: 21300000, guid: 5604130c3074dc3419d6f832ea194715, type: 3}
- iconImage: {fileID: 1782838909}
- titleLocalize: {fileID: 2001918512}
- titleText: {fileID: 2001918510}
- contentLocalize: {fileID: 1488500376}
- contentText: {fileID: 1488500374}
- parametersManager: {fileID: 1488500377}
- receiveButton: {fileID: 672864209}
---- !u!225 &1211674720
-CanvasGroup:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1211674713}
- m_Enabled: 1
- m_Alpha: 0
- m_Interactable: 1
- m_BlocksRaycasts: 1
- m_IgnoreParentGroups: 0
--- !u!1 &1225558873
GameObject:
m_ObjectHideFlags: 0
@@ -17514,7 +17089,8 @@ MonoBehaviour:
m_fontAsset: {fileID: 11400000, guid: 87c1b020037c81841b3d98dd497cbdeb, type: 2}
m_sharedMaterial: {fileID: -5812992765432063453, guid: 87c1b020037c81841b3d98dd497cbdeb,
type: 2}
- m_fontSharedMaterials: []
+ m_fontSharedMaterials:
+ - {fileID: -5812992765432063453, guid: 87c1b020037c81841b3d98dd497cbdeb, type: 2}
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
m_fontColor32:
@@ -18217,43 +17793,6 @@ MonoBehaviour:
fullIllustration: {fileID: 1426965734}
closeFullIllustrationButton: {fileID: 1621943466}
isDuringFullIllustrationFade: 0
---- !u!1 &1284535423
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 1284535424}
- m_Layer: 5
- m_Name: Title Bar
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &1284535424
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1284535423}
- 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: 1782838908}
- - {fileID: 2001918509}
- m_Father: {fileID: 1211674714}
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 1}
- m_AnchorMax: {x: 0, y: 1}
- m_AnchoredPosition: {x: 600, y: -32}
- m_SizeDelta: {x: 1160, y: 24}
- m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &1293033759
GameObject:
m_ObjectHideFlags: 0
@@ -18855,6 +18394,7 @@ GameObject:
- component: {fileID: 1340448062}
- component: {fileID: 1340448065}
- component: {fileID: 1340448064}
+ - component: {fileID: 1340448066}
m_Layer: 5
m_Name: Choice1
m_TagString: Untagged
@@ -18878,9 +18418,9 @@ RectTransform:
- {fileID: 2043234283}
m_Father: {fileID: 762655493}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 0, y: 0}
- m_AnchoredPosition: {x: 0, y: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 600, y: -275}
m_SizeDelta: {x: 1188, y: 150}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &1340448064
@@ -18935,6 +18475,23 @@ MonoBehaviour:
m_OnClick:
m_PersistentCalls:
m_Calls: []
+--- !u!114 &1340448066
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1340448061}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 63c53d8a6dc173a4db3d6a8a1499b7e6, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Assembly-CSharp::Ichni.Story.Dialogue.ChoiceButton
+ button: {fileID: 1340448065}
+ buttonBackground: {fileID: 82938575}
+ buttonText: {fileID: 2043234284}
+ availableSprite: {fileID: 21300000, guid: 0071c3fb2dcf7b0428798cc6dc8bd68c, type: 3}
+ unavailableSprite: {fileID: 21300000, guid: 439f6117a35abbf4e8c4b847c040f025, type: 3}
--- !u!114 &1351337659
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -20509,6 +20066,73 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1483720711
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1483720712}
+ - component: {fileID: 1483720713}
+ m_Layer: 0
+ m_Name: MessagePage
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1483720712
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1483720711}
+ 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:
+ - {fileID: 2089432739}
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1483720713
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1483720711}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 07f2a7ffd4b513d4e90d60a6587914cc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Assembly-CSharp::Ichni.Story.UI.StoryMessageBoxUIPage
+ serializationData:
+ SerializedFormat: 2
+ SerializedBytes:
+ ReferencedUnityObjects: []
+ SerializedBytesString:
+ Prefab: {fileID: 0}
+ PrefabModificationsReferencedUnityObjects: []
+ PrefabModifications: []
+ SerializationNodes:
+ - Name: fadeInStartAction
+ Entry: 6
+ Data:
+ - Name: fadeInFinishAction
+ Entry: 6
+ Data:
+ - Name: fadeOutAction
+ Entry: 6
+ Data:
+ mainCanvasGroup: {fileID: 2089432743}
+ defaultMessageBoxPrefab: {fileID: 4600504794659689328, guid: a8e9cecf40a73474d8a5ffc9bada8c20,
+ type: 3}
+ messageContainer: {fileID: 2089432739}
--- !u!1 &1485764096
GameObject:
m_ObjectHideFlags: 0
@@ -20582,224 +20206,6 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1485764096}
m_CullTransparentMesh: 1
---- !u!1 &1488500371
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 1488500372}
- - component: {fileID: 1488500375}
- - component: {fileID: 1488500374}
- - component: {fileID: 1488500373}
- - component: {fileID: 1488500376}
- - component: {fileID: 1488500377}
- m_Layer: 5
- m_Name: Text
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &1488500372
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1488500371}
- 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: 664205619}
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 1}
- m_AnchorMax: {x: 0, y: 1}
- m_AnchoredPosition: {x: 15, y: -75.29}
- m_SizeDelta: {x: 1130, y: 130.58}
- m_Pivot: {x: 0, y: 0.5}
---- !u!114 &1488500373
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1488500371}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_IgnoreLayout: 0
- m_MinWidth: 300
- m_MinHeight: -1
- m_PreferredWidth: 1200
- m_PreferredHeight: -1
- m_FlexibleWidth: -1
- m_FlexibleHeight: -1
- m_LayoutPriority: 1
---- !u!114 &1488500374
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1488500371}
- 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: 1
- m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
- m_Maskable: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_text: 'Size of this window will change based on the size of its content.
-
- You
- can even replace this text area with different objects and the modal will resize
- appropriately.'
- m_isRightToLeft: 0
- m_fontAsset: {fileID: 11400000, guid: 87c1b020037c81841b3d98dd497cbdeb, type: 2}
- m_sharedMaterial: {fileID: -5812992765432063453, guid: 87c1b020037c81841b3d98dd497cbdeb,
- 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: 36
- m_fontSizeBase: 36
- m_fontWeight: 400
- m_enableAutoSizing: 0
- m_fontSizeMin: 18
- m_fontSizeMax: 72
- m_fontStyle: 0
- m_HorizontalAlignment: 1
- m_VerticalAlignment: 512
- m_textAlignment: 65535
- m_characterSpacing: 0
- m_characterHorizontalScale: 1
- m_wordSpacing: 0
- m_lineSpacing: 0
- m_lineSpacingMax: 0
- m_paragraphSpacing: 0
- m_charWidthMaxAdj: 0
- m_TextWrappingMode: 1
- m_wordWrappingRatios: 0.4
- m_overflowMode: 0
- m_linkedTextComponent: {fileID: 0}
- parentLinkedComponent: {fileID: 0}
- m_enableKerning: 1
- m_ActiveFontFeatures: 00000000
- m_enableExtraPadding: 0
- checkPaddingRequired: 0
- m_isRichText: 1
- m_EmojiFallbackSupport: 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: 1
- 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!222 &1488500375
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1488500371}
- m_CullTransparentMesh: 0
---- !u!114 &1488500376
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1488500371}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- mTerm:
- mTermSecondary:
- PrimaryTermModifier: 0
- SecondaryTermModifier: 0
- TermPrefix:
- TermSuffix:
- LocalizeOnAwake: 1
- IgnoreRTL: 0
- MaxCharactersInRTL: 0
- IgnoreNumbersInRTL: 1
- CorrectAlignmentForRTL: 1
- AddSpacesToJoinedLanguages: 0
- AllowLocalizedParameters: 1
- AllowParameters: 1
- TranslatedObjects: []
- LocalizeEvent:
- m_PersistentCalls:
- m_Calls: []
- AlwaysForceLocalize: 0
- LocalizeCallBack:
- Target: {fileID: 0}
- MethodName:
- mGUI_ShowReferences: 0
- mGUI_ShowTems: 1
- mGUI_ShowCallback: 0
- mLocalizeTarget: {fileID: 435099836}
- mLocalizeTargetName: I2.Loc.LocalizeTarget_TextMeshPro_UGUI
---- !u!114 &1488500377
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1488500371}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: c9586cfd190ca384a8dd72aa92c86152, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- _Params: []
- _IsGlobalManager: 0
--- !u!1 &1489132061
GameObject:
m_ObjectHideFlags: 0
@@ -21833,102 +21239,6 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1555496268}
m_CullTransparentMesh: 1
---- !u!1 &1558137782
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 1558137783}
- - component: {fileID: 1558137786}
- - component: {fileID: 1558137785}
- - component: {fileID: 1558137784}
- m_Layer: 5
- m_Name: Background
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &1558137783
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1558137782}
- 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: 1211674714}
- 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 &1558137784
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1558137782}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_IgnoreLayout: 1
- m_MinWidth: -1
- m_MinHeight: -1
- m_PreferredWidth: -1
- m_PreferredHeight: -1
- m_FlexibleWidth: -1
- m_FlexibleHeight: -1
- m_LayoutPriority: 1
---- !u!114 &1558137785
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1558137782}
- 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.1764706, g: 0.25490198, b: 0.33333334, 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: 21300000, guid: 5e16c7aea118d68498053518146c9cf9, type: 3}
- m_Type: 1
- m_PreserveAspect: 0
- m_FillCenter: 1
- m_FillMethod: 4
- m_FillAmount: 1
- m_FillClockwise: 1
- m_FillOrigin: 0
- m_UseSpriteMesh: 0
- m_PixelsPerUnitMultiplier: 6
---- !u!222 &1558137786
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1558137782}
- m_CullTransparentMesh: 0
--- !u!114 &1567730149
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -22086,129 +21396,6 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1569850794}
m_CullTransparentMesh: 1
---- !u!1 &1572316430
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 1572316431}
- - component: {fileID: 1572316434}
- - component: {fileID: 1572316433}
- - component: {fileID: 1572316432}
- m_Layer: 5
- m_Name: Image
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &1572316431
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1572316430}
- 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: 163525692}
- 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: 114, y: 0}
- m_SizeDelta: {x: 760, y: 1350}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &1572316432
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1572316430}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 45facfdc6a639f041b007c036dc527b8, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- _gradientType: 1
- _blendMode: 2
- _modifyVertices: 1
- _offset: 0
- _zoom: 1
- _effectGradient:
- serializedVersion: 2
- key0: {r: 0, g: 0, b: 0, a: 0}
- key1: {r: 0, g: 0, b: 0, a: 1}
- key2: {r: 1, g: 1, b: 1, a: 1}
- key3: {r: 1, g: 1, b: 1, a: 0}
- key4: {r: 0, g: 0, b: 0, a: 0}
- key5: {r: 0, g: 0, b: 0, a: 0}
- key6: {r: 0, g: 0, b: 0, a: 0}
- key7: {r: 0, g: 0, b: 0, a: 0}
- ctime0: 0
- ctime1: 13107
- ctime2: 32768
- ctime3: 65535
- ctime4: 0
- ctime5: 0
- ctime6: 0
- ctime7: 0
- atime0: 0
- atime1: 13107
- atime2: 65535
- atime3: 0
- atime4: 0
- atime5: 0
- atime6: 0
- atime7: 0
- m_Mode: 0
- m_ColorSpace: 0
- m_NumColorKeys: 4
- m_NumAlphaKeys: 3
---- !u!114 &1572316433
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1572316430}
- 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: 1
- m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
- m_Maskable: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_Sprite: {fileID: 21300000, guid: 2736c74fecf99944a9977f12bf51f01c, type: 3}
- 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 &1572316434
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1572316430}
- m_CullTransparentMesh: 1
--- !u!1 &1573013299
GameObject:
m_ObjectHideFlags: 0
@@ -23005,7 +22192,7 @@ Transform:
m_GameObject: {fileID: 1644203569}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 224.24973, y: 0, z: 3.18235}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
@@ -23766,7 +22953,7 @@ MonoBehaviour:
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
- m_text: "- \u89E6\u6478\u4EE5\u5F00\u59CB\u6E38\u620F -"
+ m_text: '- Touch to start -'
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 87c1b020037c81841b3d98dd497cbdeb, type: 2}
m_sharedMaterial: {fileID: -5812992765432063453, guid: 87c1b020037c81841b3d98dd497cbdeb,
@@ -24532,81 +23719,6 @@ MonoBehaviour:
inputActions: {fileID: -944628639613478452, guid: 6a9b5e1cce519a041b93c008ab19ca4d,
type: 3}
resetButton: {fileID: 1421732612}
---- !u!1 &1782838907
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 1782838908}
- - component: {fileID: 1782838910}
- - component: {fileID: 1782838909}
- m_Layer: 5
- m_Name: Icon
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &1782838908
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1782838907}
- 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: 1284535424}
- 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: 15, y: 0}
- m_SizeDelta: {x: 25, y: 25}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &1782838909
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1782838907}
- 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: 1
- m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
- m_Maskable: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_Sprite: {fileID: 21300000, guid: 5604130c3074dc3419d6f832ea194715, type: 3}
- m_Type: 0
- m_PreserveAspect: 1
- m_FillCenter: 1
- m_FillMethod: 4
- m_FillAmount: 1
- m_FillClockwise: 1
- m_FillOrigin: 0
- m_UseSpriteMesh: 0
- m_PixelsPerUnitMultiplier: 1
---- !u!222 &1782838910
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1782838907}
- m_CullTransparentMesh: 0
--- !u!1 &1790691940
GameObject:
m_ObjectHideFlags: 0
@@ -25224,23 +24336,6 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1834603786}
m_CullTransparentMesh: 1
---- !u!114 &1868936611
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 0}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 481ab606793a67349be805c13febeba0, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- mTarget: {fileID: 2001918510}
- mAlignment_RTL: 516
- mAlignment_LTR: 513
- mAlignmentWasRTL: 0
- mInitializeAlignment: 1
--- !u!1 &1870072470
GameObject:
m_ObjectHideFlags: 0
@@ -25443,7 +24538,6 @@ GameObject:
- component: {fileID: 1876757693}
- component: {fileID: 1876757695}
- component: {fileID: 1876757694}
- - component: {fileID: 1876757696}
m_Layer: 5
m_Name: Background
m_TagString: Untagged
@@ -25465,7 +24559,6 @@ RectTransform:
m_Children:
- {fileID: 1834199646}
- {fileID: 2005595457}
- - {fileID: 428441702}
m_Father: {fileID: 871906516}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
@@ -25511,50 +24604,6 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1876757692}
m_CullTransparentMesh: 1
---- !u!114 &1876757696
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1876757692}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
- m_Name:
- m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Button
- 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: 1876757694}
- m_OnClick:
- m_PersistentCalls:
- m_Calls: []
--- !u!114 &1881101689
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -25857,6 +24906,81 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1928039797}
m_CullTransparentMesh: 1
+--- !u!1 &1929210744
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1929210745}
+ - component: {fileID: 1929210748}
+ - component: {fileID: 1929210747}
+ m_Layer: 5
+ m_Name: Wheel
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1929210745
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1929210744}
+ 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: 1089279498}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 21.536}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: 0, y: -0.000015258789}
+ m_SizeDelta: {x: 461.375, y: 465.301}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1929210747
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1929210744}
+ 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: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 21300000, guid: d2df5cc63e3980d499853cc9b5749d18, type: 3}
+ 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 &1929210748
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1929210744}
+ m_CullTransparentMesh: 1
--- !u!1 &1937063703
GameObject:
m_ObjectHideFlags: 0
@@ -26487,7 +25611,6 @@ GameObject:
m_Component:
- component: {fileID: 1998834542}
- component: {fileID: 1998834543}
- - component: {fileID: 1998834544}
m_Layer: 0
m_Name: StartPage
m_TagString: Untagged
@@ -26546,196 +25669,6 @@ MonoBehaviour:
peWarningWindow: {fileID: 1589396085}
contentWindow: {fileID: 1365808732}
loginPage: {fileID: 75568548}
---- !u!114 &1998834544
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1998834541}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 5151cbfb4a7c39c4599fb711d3332cbd, type: 3}
- m_Name:
- m_EditorClassIdentifier:
---- !u!1 &2001918508
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 2001918509}
- - component: {fileID: 2001918511}
- - component: {fileID: 2001918510}
- - component: {fileID: 2001918512}
- m_Layer: 5
- m_Name: Title
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &2001918509
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 2001918508}
- 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: 1284535424}
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0.5}
- m_AnchorMax: {x: 1, y: 0.5}
- m_AnchoredPosition: {x: 42.5, y: 0}
- m_SizeDelta: {x: -42.5, y: 50}
- m_Pivot: {x: 0, y: 0.5}
---- !u!114 &2001918510
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 2001918508}
- 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: 1
- m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
- m_Maskable: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_text: "\u63D0\u793A"
- m_isRightToLeft: 0
- m_fontAsset: {fileID: 11400000, guid: 87c1b020037c81841b3d98dd497cbdeb, type: 2}
- m_sharedMaterial: {fileID: -5812992765432063453, guid: 87c1b020037c81841b3d98dd497cbdeb,
- 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: 36
- m_fontSizeBase: 36
- m_fontWeight: 400
- m_enableAutoSizing: 0
- m_fontSizeMin: 18
- m_fontSizeMax: 72
- m_fontStyle: 0
- m_HorizontalAlignment: 1
- m_VerticalAlignment: 512
- m_textAlignment: 65535
- m_characterSpacing: 0
- m_characterHorizontalScale: 1
- m_wordSpacing: 0
- m_lineSpacing: 0
- m_lineSpacingMax: 0
- m_paragraphSpacing: 0
- m_charWidthMaxAdj: 0
- m_TextWrappingMode: 1
- m_wordWrappingRatios: 0.4
- m_overflowMode: 0
- m_linkedTextComponent: {fileID: 0}
- parentLinkedComponent: {fileID: 0}
- m_enableKerning: 1
- m_ActiveFontFeatures: 00000000
- m_enableExtraPadding: 0
- checkPaddingRequired: 0
- m_isRichText: 1
- m_EmojiFallbackSupport: 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: 1
- m_useMaxVisibleDescender: 1
- m_pageToDisplay: 1
- m_margin: {x: 0, y: 0, z: 0, w: 1}
- m_isUsingLegacyAnimationComponent: 0
- m_isVolumetricText: 0
- m_hasFontAssetChanged: 0
- m_baseMaterial: {fileID: 0}
- m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
---- !u!222 &2001918511
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 2001918508}
- m_CullTransparentMesh: 0
---- !u!114 &2001918512
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 2001918508}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- mTerm:
- mTermSecondary:
- PrimaryTermModifier: 0
- SecondaryTermModifier: 0
- TermPrefix:
- TermSuffix:
- LocalizeOnAwake: 1
- IgnoreRTL: 0
- MaxCharactersInRTL: 0
- IgnoreNumbersInRTL: 1
- CorrectAlignmentForRTL: 1
- AddSpacesToJoinedLanguages: 0
- AllowLocalizedParameters: 1
- AllowParameters: 1
- TranslatedObjects: []
- LocalizeEvent:
- m_PersistentCalls:
- m_Calls: []
- AlwaysForceLocalize: 0
- LocalizeCallBack:
- Target: {fileID: 0}
- MethodName:
- mGUI_ShowReferences: 0
- mGUI_ShowTems: 1
- mGUI_ShowCallback: 0
- mLocalizeTarget: {fileID: 1868936611}
- mLocalizeTargetName: I2.Loc.LocalizeTarget_TextMeshPro_UGUI
--- !u!1 &2005595456
GameObject:
m_ObjectHideFlags: 0
@@ -26767,8 +25700,8 @@ RectTransform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- - {fileID: 1089279498}
- {fileID: 520601619}
+ - {fileID: 1089279498}
m_Father: {fileID: 1876757693}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
@@ -32581,6 +31514,120 @@ MonoBehaviour:
Entry: 6
Data:
mainCanvasGroup: {fileID: 2066043558}
+--- !u!1 &2089432738
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2089432739}
+ - component: {fileID: 2089432742}
+ - component: {fileID: 2089432741}
+ - component: {fileID: 2089432740}
+ - component: {fileID: 2089432743}
+ m_Layer: 0
+ m_Name: Canvas
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 0
+--- !u!224 &2089432739
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2089432738}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 0, y: 0, z: 0}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1483720712}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0, y: 0}
+--- !u!114 &2089432740
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2089432738}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.GraphicRaycaster
+ m_IgnoreReversedGraphics: 1
+ m_BlockingObjects: 0
+ m_BlockingMask:
+ serializedVersion: 2
+ m_Bits: 631
+--- !u!114 &2089432741
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2089432738}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.CanvasScaler
+ m_UiScaleMode: 1
+ m_ReferencePixelsPerUnit: 100
+ m_ScaleFactor: 1
+ m_ReferenceResolution: {x: 1920, y: 1080}
+ m_ScreenMatchMode: 0
+ m_MatchWidthOrHeight: 0
+ m_PhysicalUnit: 3
+ m_FallbackScreenDPI: 96
+ m_DefaultSpriteDPI: 96
+ m_DynamicPixelsPerUnit: 1
+ m_PresetInfoIsWorld: 0
+--- !u!223 &2089432742
+Canvas:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2089432738}
+ m_Enabled: 1
+ serializedVersion: 3
+ m_RenderMode: 1
+ m_Camera: {fileID: 751614408}
+ m_PlaneDistance: 100
+ m_PixelPerfect: 0
+ m_ReceivesEvents: 1
+ m_OverrideSorting: 0
+ m_OverridePixelPerfect: 0
+ m_SortingBucketNormalizedSize: 0
+ m_VertexColorAlwaysGammaSpace: 1
+ m_AdditionalShaderChannelsFlag: 25
+ m_UpdateRectTransformForStandalone: 0
+ m_SortingLayerID: 0
+ m_SortingOrder: 1
+ m_TargetDisplay: 0
+--- !u!225 &2089432743
+CanvasGroup:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2089432738}
+ m_Enabled: 1
+ m_Alpha: 0
+ m_Interactable: 0
+ m_BlocksRaycasts: 0
+ m_IgnoreParentGroups: 0
--- !u!1 &2091561605
GameObject:
m_ObjectHideFlags: 0
@@ -34378,6 +33425,7 @@ GameObject:
serializedVersion: 6
m_Component:
- component: {fileID: 5788293620442285278}
+ - component: {fileID: 5788293620442285279}
m_Layer: 5
m_Name: DialogPage
m_TagString: Untagged
@@ -34475,6 +33523,50 @@ Transform:
- {fileID: 6347218673911890593}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &5788293620442285279
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4397390401624236569}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0e1e4a2c0a479784e839bdf448215e19, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Assembly-CSharp::Ichni.Story.UI.DialogUIPage
+ serializationData:
+ SerializedFormat: 2
+ SerializedBytes:
+ ReferencedUnityObjects: []
+ SerializedBytesString:
+ Prefab: {fileID: 0}
+ PrefabModificationsReferencedUnityObjects: []
+ PrefabModifications: []
+ SerializationNodes:
+ - Name: fadeInStartAction
+ Entry: 6
+ Data:
+ - Name: fadeInFinishAction
+ Entry: 6
+ Data:
+ - Name: fadeOutAction
+ Entry: 6
+ Data:
+ mainCanvasGroup: {fileID: 6759614698927231795}
+ portraitStage: {fileID: 163525693}
+ dialogueText: {fileID: 1834199647}
+ speakerContainer: {fileID: 993868748}
+ speakerText: {fileID: 1870072472}
+ advanceButton: {fileID: 776434468}
+ fastForwardButton: {fileID: 490649579}
+ choiceFrame: {fileID: 234096306}
+ choiceButtons:
+ - {fileID: 190695854}
+ - {fileID: 1340448066}
+ - {fileID: 145321082}
+ - {fileID: 269231014}
+ dialogWheel: {fileID: 1089279501}
--- !u!1 &5918997816214783523
GameObject:
m_ObjectHideFlags: 0
@@ -34494,7 +33586,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
- m_IsActive: 1
+ m_IsActive: 0
--- !u!223 &6169289651699952963
Canvas:
m_ObjectHideFlags: 0
@@ -34533,6 +33625,7 @@ RectTransform:
- {fileID: 1055026778}
- {fileID: 163525692}
- {fileID: 871906516}
+ - {fileID: 776434467}
- {fileID: 234096307}
- {fileID: 1908680555}
- {fileID: 490649578}
@@ -34554,7 +33647,7 @@ CanvasGroup:
m_GameObject: {fileID: 5918997816214783523}
m_Enabled: 1
m_Alpha: 0
- m_Interactable: 1
+ m_Interactable: 0
m_BlocksRaycasts: 0
m_IgnoreParentGroups: 0
--- !u!1001 &6776602870058590884
@@ -34732,3 +33825,4 @@ SceneRoots:
- {fileID: 325881262}
- {fileID: 1644203571}
- {fileID: 75568547}
+ - {fileID: 1483720712}
diff --git a/Assets/Scripts/NewStorySystem/Data/CharacterData.cs b/Assets/Scripts/NewStorySystem/Data/CharacterData.cs
index e3908b55..aa8e81fd 100644
--- a/Assets/Scripts/NewStorySystem/Data/CharacterData.cs
+++ b/Assets/Scripts/NewStorySystem/Data/CharacterData.cs
@@ -21,15 +21,19 @@ namespace Ichni.Story
public class CharacterData : SerializedScriptableObject
{
[LabelText("Character ID")]
- [InfoBox("此 ID 需与 .yarn 文件中对应台词的 speaker 名完全一致。")]
+ [Tooltip("此 ID 需与 .yarn 文件中对应台词的 speaker 名完全一致。")]
public string characterId;
[LabelText("Display Name Key")]
- [InfoBox("Unity Localization String Table Key,用于多语言角色名显示。")]
+ [Tooltip("Unity Localization String Table Key,用于多语言角色名显示。")]
public string displayNameKey;
[LabelText("Portrait Style")]
public PortraitStyle portraitStyle = PortraitStyle.Sprite;
+
+ [LabelText("Position Offset")]
+ [Tooltip("立绘在舞台上的位置偏移(单位:映射百分比)")]
+ public Vector2 positionOffset = new Vector2(0f, 0f);
// ── Sprite ──────────────────────────────────────────────────────────────
@@ -46,7 +50,6 @@ namespace Ichni.Story
[InfoBox("Live2D / Spine 立绘预制体,需挂载实现 IPortraitRenderer 接口的组件(阶段 3 制作)。")]
public GameObject dynamicPortraitPrefab;
- private bool IsDynamicPortrait =>
- portraitStyle == PortraitStyle.Live2D || portraitStyle == PortraitStyle.Spine;
+ private bool IsDynamicPortrait => portraitStyle == PortraitStyle.Live2D || portraitStyle == PortraitStyle.Spine;
}
}
diff --git a/Assets/Scripts/NewStorySystem/Data/StoryVariables.cs b/Assets/Scripts/NewStorySystem/Data/StoryVariables.cs
new file mode 100644
index 00000000..afa5d2d1
--- /dev/null
+++ b/Assets/Scripts/NewStorySystem/Data/StoryVariables.cs
@@ -0,0 +1,140 @@
+using System.Collections.Generic;
+using System.Globalization;
+using UnityEngine;
+
+namespace Ichni.Story
+{
+ ///
+ /// 全局剧情变量的统一数据枢纽。
+ /// 所有外部系统(包括 Yarn、UI、小游戏)读写剧情变量的唯一官方入口。
+ /// 自动桥接至 GameSaveManager 的 StorySaveModule 中持久化。
+ ///
+ public static class StoryVariables
+ {
+ // 应对游戏尚未初始化(或者单独测试场景)的内存兜底
+ private static readonly StoryVariablesSave _fallback = new StoryVariablesSave();
+
+ private static StoryVariablesSave Variables
+ {
+ get
+ {
+ if (GameSaveManager.instance != null && GameSaveManager.instance.StorySaveModule != null)
+ return GameSaveManager.instance.StorySaveModule.variables;
+ return _fallback;
+ }
+ }
+
+ // ── 读取 ────────────────────────────────────────────────────────────────
+
+ public static float GetFloat(string key, float defaultValue = 0f)
+ {
+ StoryVariablesSave vars = Variables;
+ if (vars.floatVariables.TryGetValue(key, out float f)) return f;
+ if (vars.boolVariables.TryGetValue(key, out bool b)) return b ? 1f : 0f;
+ if (vars.stringVariables.TryGetValue(key, out string s) && float.TryParse(s, NumberStyles.Any, CultureInfo.InvariantCulture, out float p)) return p;
+ return defaultValue;
+ }
+
+ public static int GetInt(string key, int defaultValue = 0)
+ {
+ StoryVariablesSave vars = Variables;
+ if (vars.floatVariables.TryGetValue(key, out float f)) return Mathf.RoundToInt(f);
+ if (vars.boolVariables.TryGetValue(key, out bool b)) return b ? 1 : 0;
+ if (vars.stringVariables.TryGetValue(key, out string s) && float.TryParse(s, NumberStyles.Any, CultureInfo.InvariantCulture, out float p)) return Mathf.RoundToInt(p);
+ return defaultValue;
+ }
+
+ public static bool GetBool(string key, bool defaultValue = false)
+ {
+ StoryVariablesSave vars = Variables;
+ if (vars.boolVariables.TryGetValue(key, out bool b)) return b;
+ if (vars.floatVariables.TryGetValue(key, out float f)) return f != 0f;
+ if (vars.stringVariables.TryGetValue(key, out string s) && bool.TryParse(s, out bool p)) return p;
+ return defaultValue;
+ }
+
+ public static string GetString(string key, string defaultValue = "")
+ {
+ StoryVariablesSave vars = Variables;
+ if (vars.stringVariables.TryGetValue(key, out string s)) return s;
+ if (vars.floatVariables.TryGetValue(key, out float f)) return f.ToString(CultureInfo.InvariantCulture);
+ if (vars.boolVariables.TryGetValue(key, out bool b)) return b.ToString();
+ return defaultValue;
+ }
+
+ public static bool HasVariable(string key)
+ {
+ StoryVariablesSave vars = Variables;
+ return vars.floatVariables.ContainsKey(key) || vars.boolVariables.ContainsKey(key) || vars.stringVariables.ContainsKey(key);
+ }
+
+ // ── 写入 ────────────────────────────────────────────────────────────────
+
+ public static void SetFloat(string key, float value)
+ {
+ RemoveStaleEntries(key, keepFloat: true, keepString: false, keepBool: false);
+ Variables.floatVariables[key] = value;
+ }
+
+ public static void SetInt(string key, int value)
+ {
+ // 在 Yarn/存档底层中数字统一存为 float,避免双字典冗余
+ SetFloat(key, value);
+ }
+
+ public static void SetBool(string key, bool value)
+ {
+ RemoveStaleEntries(key, keepFloat: false, keepString: false, keepBool: true);
+ Variables.boolVariables[key] = value;
+ }
+
+ public static void SetString(string key, string value)
+ {
+ RemoveStaleEntries(key, keepFloat: false, keepString: true, keepBool: false);
+ Variables.stringVariables[key] = value;
+ }
+
+ public static void ClearAll()
+ {
+ StoryVariablesSave vars = Variables;
+ vars.floatVariables.Clear();
+ vars.stringVariables.Clear();
+ vars.boolVariables.Clear();
+ }
+
+ private static void RemoveStaleEntries(string name, bool keepFloat, bool keepString, bool keepBool)
+ {
+ StoryVariablesSave vars = Variables;
+ if (!keepFloat) vars.floatVariables.Remove(name);
+ if (!keepString) vars.stringVariables.Remove(name);
+ if (!keepBool) vars.boolVariables.Remove(name);
+ }
+
+ // ── 字典批量操作(内部供 Yarn Adapter 使用) ─────────────────────────────
+
+ internal static void SetAllVariables(Dictionary floats, Dictionary strings, Dictionary bools, bool clear = true)
+ {
+ StoryVariablesSave vars = Variables;
+ if (clear)
+ {
+ vars.floatVariables.Clear();
+ vars.stringVariables.Clear();
+ vars.boolVariables.Clear();
+ }
+
+ if (floats != null) foreach (var kv in floats) vars.floatVariables[kv.Key] = kv.Value;
+ if (strings != null) foreach (var kv in strings) vars.stringVariables[kv.Key] = kv.Value;
+ if (bools != null) foreach (var kv in bools) vars.boolVariables[kv.Key] = kv.Value;
+ }
+
+ internal static (Dictionary floats, Dictionary strings, Dictionary bools) GetAllVariables()
+ {
+ StoryVariablesSave vars = Variables;
+ return (
+ new Dictionary(vars.floatVariables),
+ new Dictionary(vars.stringVariables),
+ new Dictionary(vars.boolVariables)
+ );
+ }
+ }
+}
diff --git a/Assets/Scripts/NewStorySystem/Data/StoryVariables.cs.meta b/Assets/Scripts/NewStorySystem/Data/StoryVariables.cs.meta
new file mode 100644
index 00000000..0e87da3e
--- /dev/null
+++ b/Assets/Scripts/NewStorySystem/Data/StoryVariables.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: c69dde49931abdd40aeabc0dc35582f5
\ No newline at end of file
diff --git a/Assets/Scripts/NewStorySystem/Dialogue/ChoiceButton.cs b/Assets/Scripts/NewStorySystem/Dialogue/ChoiceButton.cs
new file mode 100644
index 00000000..368001c7
--- /dev/null
+++ b/Assets/Scripts/NewStorySystem/Dialogue/ChoiceButton.cs
@@ -0,0 +1,93 @@
+using Sirenix.OdinInspector;
+using TMPro;
+using UnityEngine;
+using UnityEngine.UI;
+using Yarn.Unity;
+
+namespace Ichni.Story.Dialogue
+{
+ ///
+ /// 单个对话选项按钮的显示与交互控制器。
+ ///
+ ///
+ /// - 可用选项:显示 ,点击时触发 onSelected 回调。
+ /// - 不可用选项:显示 ,点击无效(但 Button 的
+ /// interactable 保持开启,以备未来扩展悬停提示等功能)。
+ ///
+ ///
+ ///
+ /// 由 统一调用 / 。
+ ///
+ ///
+ public class ChoiceButton : MonoBehaviour
+ {
+ [Tooltip("按钮组件引用(挂载在同 GameObject 上的 Button)。")]
+ public Button button;
+
+ [Tooltip("按钮背景 Image,用于在 available / unavailable 状态间切换 Sprite。")]
+ public Image buttonBackground;
+
+ [Tooltip("选项文本 TMP。")]
+ public TMP_Text buttonText;
+
+ [SerializeField, HideInPlayMode]
+ [Tooltip("选项可用时的背景 Sprite。")]
+ private Sprite availableSprite;
+
+ [SerializeField, HideInPlayMode]
+ [Tooltip("选项不可用时的背景 Sprite。")]
+ private Sprite unavailableSprite;
+
+ // ── 运行时状态 ────────────────────────────────────────────────────
+
+ /// 当前绑定的选项是否可供玩家选择。
+ private bool _isAvailable;
+
+ // ── 公共 API ─────────────────────────────────────────────────────
+
+ ///
+ /// 根据 配置按钮并激活显示。
+ ///
+ /// Yarn 对话选项数据。option.IsAvailable 决定外观与交互行为。
+ ///
+ /// 玩家点击且选项可用时触发的回调。
+ /// 不可用选项点击不会触发此回调,但按钮保持 interactable=true。
+ ///
+ public void Setup(DialogueOption option, System.Action onSelected)
+ {
+ gameObject.SetActive(true);
+ _isAvailable = option.IsAvailable;
+
+ // 设置选项文本
+ if (buttonText != null)
+ buttonText.text = option.Line.TextWithoutCharacterName.Text;
+
+ // 根据可用性切换背景图
+ if (buttonBackground != null)
+ buttonBackground.sprite = _isAvailable ? availableSprite : unavailableSprite;
+
+ // 注册点击监听:不可用选项点击静默忽略
+ if (button != null)
+ {
+ button.onClick.RemoveAllListeners();
+ button.onClick.AddListener(() =>
+ {
+ if (_isAvailable)
+ onSelected?.Invoke(option);
+ });
+ }
+ }
+
+ ///
+ /// 清除按钮监听并隐藏此按钮。
+ /// 在 结束后统一调用。
+ ///
+ public void Cleanup()
+ {
+ if (button != null)
+ button.onClick.RemoveAllListeners();
+
+ gameObject.SetActive(false);
+ }
+ }
+}
diff --git a/Assets/Scripts/NewStorySystem/Dialogue/ChoiceButton.cs.meta b/Assets/Scripts/NewStorySystem/Dialogue/ChoiceButton.cs.meta
new file mode 100644
index 00000000..a41afc64
--- /dev/null
+++ b/Assets/Scripts/NewStorySystem/Dialogue/ChoiceButton.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 63c53d8a6dc173a4db3d6a8a1499b7e6
\ No newline at end of file
diff --git a/Assets/Scripts/NewStorySystem/Dialogue/IPortraitRenderer.cs b/Assets/Scripts/NewStorySystem/Dialogue/IPortraitRenderer.cs
new file mode 100644
index 00000000..f2a21c0c
--- /dev/null
+++ b/Assets/Scripts/NewStorySystem/Dialogue/IPortraitRenderer.cs
@@ -0,0 +1,59 @@
+using UnityEngine;
+
+namespace Ichni.Story.Dialogue
+{
+ ///
+ /// 立绘渲染器抽象接口。所有立绘渲染实现(Sprite / Live2D / Spine)均须实现此接口,
+ /// 使 和 Yarn 命令层无需感知底层渲染细节。
+ ///
+ public interface IPortraitRenderer
+ {
+ /// 此渲染器在舞台上占用的 RectTransform(用于位置操控)。
+ RectTransform RectTransform { get; }
+
+ ///
+ /// 以指定角色数据和情绪名显示立绘。若角色已在台上则更新情绪。
+ ///
+ void Show(CharacterData character, string emotion);
+
+ /// 隐藏立绘(不销毁对象,留存以便复用)。
+ void Hide();
+
+ /// 切换当前情绪(角色数据不变)。
+ void SetEmotion(string emotion);
+
+ ///
+ /// 将立绘的 anchoredPosition 设为指定坐标(即时,无动画)。
+ ///
+ /// 目标 anchoredPosition(画布空间,像素单位)。
+ void SetPosition(Vector2 anchoredPos);
+
+ ///
+ /// 控制说话者高亮状态:说话者 alpha = 1.0,旁观者 alpha = 0.7(可由实现自行定义)。
+ ///
+ void SetActiveVisual(bool isSpeaking);
+
+ ///
+ /// 平滑移动到目标位置。
+ ///
+ /// 目标像素坐标
+ /// 持续时间
+ void MoveTo(Vector2 anchoredPos, float duration);
+
+ ///
+ /// 原地跳跃动画。
+ ///
+ /// 跳跃力度(高度)
+ /// 跳跃次数
+ /// 持续时间
+ void Jump(float power, int numJumps, float duration);
+
+ ///
+ /// 左右震动动画。
+ ///
+ /// 持续时间
+ /// 震动力度(像素范围)
+ /// 震动频率
+ void Shake(float duration, float strength, int vibrato);
+ }
+}
diff --git a/Assets/Scripts/NewStorySystem/Dialogue/IPortraitRenderer.cs.meta b/Assets/Scripts/NewStorySystem/Dialogue/IPortraitRenderer.cs.meta
new file mode 100644
index 00000000..4d8475c5
--- /dev/null
+++ b/Assets/Scripts/NewStorySystem/Dialogue/IPortraitRenderer.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 3dbfb11aa34a55942b604a15cbd65d50
\ No newline at end of file
diff --git a/Assets/Scripts/NewStorySystem/Dialogue/SpritePortraitRenderer.cs b/Assets/Scripts/NewStorySystem/Dialogue/SpritePortraitRenderer.cs
new file mode 100644
index 00000000..1ad947a5
--- /dev/null
+++ b/Assets/Scripts/NewStorySystem/Dialogue/SpritePortraitRenderer.cs
@@ -0,0 +1,175 @@
+using UnityEngine;
+using UnityEngine.UI;
+using DG.Tweening;
+
+namespace Ichni.Story.Dialogue
+{
+ ///
+ /// 基于 的 Sprite 立绘渲染器。
+ ///
+ /// 挂载在 VN 对话 UI 内的立绘槽位 GameObject 上(Left / Center / Right 等),
+ /// 每个槽位对应一个 实例。
+ /// 当前阶段仅实现静态显示(Show / Hide / SetEmotion / SetPosition / SetActiveVisual),
+ /// 后续阶段再叠加 DOTween 动画。
+ ///
+ ///
+ [RequireComponent(typeof(Image))]
+ public class SpritePortraitRenderer : MonoBehaviour, IPortraitRenderer
+ {
+ // ── 设置 ────────────────────────────────────────────────────────────────
+
+ /// 说话者的不透明度(满值)。
+ [SerializeField] private float _alphaActive = 1.0f;
+
+ /// 非说话者的压暗不透明度。
+ [SerializeField] private float _alphaInactive = 0.7f;
+
+ // ── 组件缓存 ─────────────────────────────────────────────────────────────
+
+ private Image _image;
+ private RectTransform _rectTransform;
+
+ // ── 状态 ─────────────────────────────────────────────────────────────────
+
+ private CharacterData _currentCharacter;
+
+ // ── IPortraitRenderer 实现 ───────────────────────────────────────────────
+
+ ///
+ public RectTransform RectTransform => _rectTransform;
+
+ // ── 生命周期 ──────────────────────────────────────────────────────────────
+
+ private void Awake()
+ {
+ _image = GetComponent();
+ _rectTransform = GetComponent();
+
+ // 初始隐藏
+ SetGroupAlpha(0f);
+ }
+
+ // ── 接口方法 ─────────────────────────────────────────────────────────────
+
+ ///
+ public void Show(CharacterData character, string emotion)
+ {
+ if (character == null)
+ {
+ Debug.LogWarning("[SpritePortraitRenderer] Show 传入了 null CharacterData。");
+ return;
+ }
+
+ _currentCharacter = character;
+ ApplySprite(emotion);
+ SetGroupAlpha(_alphaActive);
+ gameObject.SetActive(true);
+ }
+
+ ///
+ public void Hide()
+ {
+ SetGroupAlpha(0f);
+ }
+
+ ///
+ public void SetEmotion(string emotion)
+ {
+ if (_currentCharacter == null)
+ {
+ Debug.LogWarning("[SpritePortraitRenderer] SetEmotion 时尚未绑定角色数据。");
+ return;
+ }
+
+ ApplySprite(emotion);
+ }
+
+ ///
+ public void SetPosition(Vector2 anchoredPos)
+ {
+ _rectTransform.anchoredPosition = anchoredPos;
+ }
+
+ ///
+ public void SetActiveVisual(bool isSpeaking)
+ {
+ SetGroupAlpha(isSpeaking ? _alphaActive : _alphaInactive);
+ }
+
+ ///
+ public void MoveTo(Vector2 anchoredPos, float duration)
+ {
+ _rectTransform.DOKill(complete: true);
+ _rectTransform.DOAnchorPos(anchoredPos, duration).SetEase(Ease.InOutQuad).Play();
+ }
+
+ ///
+ public void Jump(float power, int numJumps, float duration)
+ {
+ // 对于跳跃,先停止并完成先前的动画,避免错乱(特别是被快进时)
+ _rectTransform.DOKill(complete: true);
+
+ // UI 的 DOJumpAnchorPos 非常适合这种表现,项目中要求手动调用 Play()
+ _rectTransform.DOJumpAnchorPos(_rectTransform.anchoredPosition, power, numJumps, duration).Play();
+ }
+
+ ///
+ public void Shake(float duration, float strength, int vibrato)
+ {
+ _rectTransform.DOKill(complete: true);
+
+ // 左右震动(限制在 X 轴或以特定强度震动),项目中要求手动调用 Play()
+ _rectTransform.DOShakeAnchorPos(duration, new Vector2(strength, 0f), vibrato, 90, false, true).Play();
+ }
+
+ // ── 内部辅助 ─────────────────────────────────────────────────────────────
+
+ ///
+ /// 从 中查找并赋值 Sprite。
+ /// 找不到指定情绪时回退到"normal",再找不到则使用字典中第一个条目,
+ /// 并在 Console 输出警告。
+ ///
+ private void ApplySprite(string emotion)
+ {
+ if (_currentCharacter.emotionSprites == null || _currentCharacter.emotionSprites.Count == 0)
+ {
+ Debug.LogWarning($"[SpritePortraitRenderer] 角色 '{_currentCharacter.characterId}' 没有配置任何情绪 Sprite。");
+ return;
+ }
+
+ // 1. 精确匹配
+ if (!string.IsNullOrEmpty(emotion) &&
+ _currentCharacter.emotionSprites.TryGetValue(emotion, out Sprite target))
+ {
+ _image.sprite = target;
+ return;
+ }
+
+ // 2. 回退 normal
+ if (_currentCharacter.emotionSprites.TryGetValue("normal", out Sprite fallback))
+ {
+ Debug.LogWarning($"[SpritePortraitRenderer] 角色 '{_currentCharacter.characterId}' 没有情绪 '{emotion}',回退到 'normal'。");
+ _image.sprite = fallback;
+ return;
+ }
+
+ // 3. 使用第一个条目
+ foreach (Sprite first in _currentCharacter.emotionSprites.Values)
+ {
+ Debug.LogWarning($"[SpritePortraitRenderer] 角色 '{_currentCharacter.characterId}' 也没有 'normal',使用第一张 Sprite。");
+ _image.sprite = first;
+ return;
+ }
+ }
+
+ private void SetGroupAlpha(float alpha)
+ {
+ if (_image != null)
+ {
+ Color c = _image.color;
+ c.a = alpha;
+ _image.color = c;
+ }
+ }
+ }
+}
diff --git a/Assets/Scripts/NewStorySystem/Dialogue/SpritePortraitRenderer.cs.meta b/Assets/Scripts/NewStorySystem/Dialogue/SpritePortraitRenderer.cs.meta
new file mode 100644
index 00000000..f4b19209
--- /dev/null
+++ b/Assets/Scripts/NewStorySystem/Dialogue/SpritePortraitRenderer.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 331609805c7de66409dba07cce2f3a28
\ No newline at end of file
diff --git a/Assets/Scripts/NewStorySystem/Dialogue/StoryDialogueController.cs b/Assets/Scripts/NewStorySystem/Dialogue/StoryDialogueController.cs
index 1da0d704..7f24f3d1 100644
--- a/Assets/Scripts/NewStorySystem/Dialogue/StoryDialogueController.cs
+++ b/Assets/Scripts/NewStorySystem/Dialogue/StoryDialogueController.cs
@@ -153,11 +153,17 @@ namespace Ichni.Story.Dialogue
List pending = new List(dialogueEndActions);
dialogueEndActions.Clear();
foreach (UnityAction action in pending)
+ {
action?.Invoke();
+ }
+
+ StoryMessageBoxUIPage.instance.FadeIn();
}
if (storyUIPage != null)
+ {
storyUIPage.FadeIn();
+ }
}
}
}
diff --git a/Assets/Scripts/NewStorySystem/Dialogue/StoryVariableStorage.cs b/Assets/Scripts/NewStorySystem/Dialogue/StoryVariableStorage.cs
deleted file mode 100644
index 370d1919..00000000
--- a/Assets/Scripts/NewStorySystem/Dialogue/StoryVariableStorage.cs
+++ /dev/null
@@ -1,207 +0,0 @@
-using System.Collections.Generic;
-using System.Globalization;
-using UnityEngine;
-using Yarn.Unity;
-
-namespace Ichni.Story.Dialogue
-{
- ///
- /// 自定义 Yarn 变量存储。直接读写 (全局剧情变量),
- /// 让 Yarn 对话中的 <<set $var to ...>> 与故事树解锁条件共享同一份数据来源,
- /// 并借助存档模块的 ES3 序列化持久化。
- /// 变量名沿用 Yarn 约定(带 $ 前缀);解锁条件中的变量名也应保持一致。
- ///
- public class StoryVariableStorage : VariableStorageBehaviour
- {
- // GameSaveManager 尚未就绪(编辑器早期 / 场景未初始化)时的兜底容器
- private readonly StoryVariablesSave _fallback = new StoryVariablesSave();
-
- /// 当前生效的变量容器:优先取存档模块,缺失时用本地兜底容器。
- private StoryVariablesSave Variables
- {
- get
- {
- if (GameSaveManager.instance != null && GameSaveManager.instance.StorySaveModule != null)
- return GameSaveManager.instance.StorySaveModule.variables;
- return _fallback;
- }
- }
-
- // ── IVariableStorage 实现 ────────────────────────────────────────────────
-
- public override bool TryGetValue(string variableName, out T result)
- {
- StoryVariablesSave vars = Variables;
-
- if (vars.floatVariables.TryGetValue(variableName, out float f))
- return TryConvert(f, out result);
-
- if (vars.boolVariables.TryGetValue(variableName, out bool b))
- return TryConvert(b, out result);
-
- if (vars.stringVariables.TryGetValue(variableName, out string s))
- return TryConvert(s, out result);
-
- result = default;
- return false;
- }
-
- public override void SetValue(string variableName, string stringValue)
- {
- RemoveStaleEntries(variableName, keepFloat: false, keepString: true, keepBool: false);
- Variables.stringVariables[variableName] = stringValue;
- NotifyVariableChanged(variableName, stringValue);
- }
-
- public override void SetValue(string variableName, float floatValue)
- {
- RemoveStaleEntries(variableName, keepFloat: true, keepString: false, keepBool: false);
- Variables.floatVariables[variableName] = floatValue;
- NotifyVariableChanged(variableName, floatValue);
- }
-
- public override void SetValue(string variableName, bool boolValue)
- {
- RemoveStaleEntries(variableName, keepFloat: false, keepString: false, keepBool: true);
- Variables.boolVariables[variableName] = boolValue;
- NotifyVariableChanged(variableName, boolValue);
- }
-
- public override bool Contains(string variableName)
- {
- StoryVariablesSave vars = Variables;
- return vars.floatVariables.ContainsKey(variableName)
- || vars.boolVariables.ContainsKey(variableName)
- || vars.stringVariables.ContainsKey(variableName);
- }
-
- public override void Clear()
- {
- StoryVariablesSave vars = Variables;
- vars.floatVariables.Clear();
- vars.stringVariables.Clear();
- vars.boolVariables.Clear();
- }
-
- public override void SetAllVariables(
- Dictionary floats,
- Dictionary strings,
- Dictionary bools,
- bool clear = true)
- {
- StoryVariablesSave vars = Variables;
-
- if (clear)
- {
- vars.floatVariables.Clear();
- vars.stringVariables.Clear();
- vars.boolVariables.Clear();
- }
-
- if (floats != null)
- foreach (KeyValuePair kv in floats) vars.floatVariables[kv.Key] = kv.Value;
- if (strings != null)
- foreach (KeyValuePair kv in strings) vars.stringVariables[kv.Key] = kv.Value;
- if (bools != null)
- foreach (KeyValuePair kv in bools) vars.boolVariables[kv.Key] = kv.Value;
- }
-
- public override (Dictionary FloatVariables,
- Dictionary StringVariables,
- Dictionary BoolVariables) GetAllVariables()
- {
- StoryVariablesSave vars = Variables;
- return (
- new Dictionary(vars.floatVariables),
- new Dictionary(vars.stringVariables),
- new Dictionary(vars.boolVariables)
- );
- }
-
- // ── 供故事树解锁条件复用的便捷读取 ────────────────────────────────────────
-
- /// 读取变量的整数近似值(float 四舍五入、bool 取 0/1);不存在返回 0。
- public int GetIntVariable(string variableName)
- {
- StoryVariablesSave vars = Variables;
- if (vars.floatVariables.TryGetValue(variableName, out float f))
- return Mathf.RoundToInt(f);
- if (vars.boolVariables.TryGetValue(variableName, out bool b))
- return b ? 1 : 0;
- return 0;
- }
-
- /// 该变量是否存在于任一类型的存储中。
- public bool HasVariable(string variableName) => Contains(variableName);
-
- // ── 内部 ────────────────────────────────────────────────────────────────
-
- // 当变量被重新赋值为其它类型时,从旧类型字典移除,避免同名变量残留多份
- private void RemoveStaleEntries(string name, bool keepFloat, bool keepString, bool keepBool)
- {
- StoryVariablesSave vars = Variables;
- if (!keepFloat) vars.floatVariables.Remove(name);
- if (!keepString) vars.stringVariables.Remove(name);
- if (!keepBool) vars.boolVariables.Remove(name);
- }
-
- // 将存储中的原始值转换为 Yarn 请求的类型(float / bool / string / int 之间互转)
- private static bool TryConvert(object value, out T result)
- {
- if (value is T typed)
- {
- result = typed;
- return true;
- }
-
- try
- {
- if (typeof(T) == typeof(float) || typeof(T) == typeof(double) || typeof(T) == typeof(int))
- {
- float f = value switch
- {
- float fv => fv,
- bool bv => bv ? 1f : 0f,
- string sv => float.TryParse(sv, NumberStyles.Any, CultureInfo.InvariantCulture, out float p) ? p : 0f,
- _ => 0f
- };
- result = (T)System.Convert.ChangeType(f, typeof(T), CultureInfo.InvariantCulture);
- return true;
- }
-
- if (typeof(T) == typeof(bool))
- {
- bool b = value switch
- {
- bool bv => bv,
- float fv => fv != 0f,
- string sv => bool.TryParse(sv, out bool p) && p,
- _ => false
- };
- result = (T)(object)b;
- return true;
- }
-
- if (typeof(T) == typeof(string))
- {
- string s = value switch
- {
- string sv => sv,
- float fv => fv.ToString(CultureInfo.InvariantCulture),
- bool bv => bv.ToString(),
- _ => value != null ? value.ToString() : string.Empty
- };
- result = (T)(object)s;
- return true;
- }
- }
- catch
- {
- // 转换失败时落到下方失败分支
- }
-
- result = default;
- return false;
- }
- }
-}
diff --git a/Assets/Scripts/NewStorySystem/Dialogue/StoryVariableStorage.cs.meta b/Assets/Scripts/NewStorySystem/Dialogue/StoryVariableStorage.cs.meta
deleted file mode 100644
index dcd1c7fc..00000000
--- a/Assets/Scripts/NewStorySystem/Dialogue/StoryVariableStorage.cs.meta
+++ /dev/null
@@ -1,2 +0,0 @@
-fileFormatVersion: 2
-guid: 7dc7dc14d9f97c043bf6fb67c3a70877
\ No newline at end of file
diff --git a/Assets/Scripts/NewStorySystem/Dialogue/VNDialoguePresenter.cs b/Assets/Scripts/NewStorySystem/Dialogue/VNDialoguePresenter.cs
index 18c6bddd..db6a390d 100644
--- a/Assets/Scripts/NewStorySystem/Dialogue/VNDialoguePresenter.cs
+++ b/Assets/Scripts/NewStorySystem/Dialogue/VNDialoguePresenter.cs
@@ -3,6 +3,7 @@ using TMPro;
using UnityEngine;
using UnityEngine.UI;
using Yarn.Unity;
+using Ichni.Story.UI;
namespace Ichni.Story.Dialogue
{
@@ -11,61 +12,21 @@ namespace Ichni.Story.Dialogue
///
/// 职责:
///
- /// - 对话开始/结束时淡入/淡出 。
- /// - :逐字打字效果 + 点击推进。
- /// - :显示选项按钮 + 等待玩家选择。
+ /// - 对话流控制:打字机效果、点击推进、等待选项。
+ /// - 将所有的 UI 引用委托给 进行管理。
///
///
- ///
- /// 挂载位置:与 同一 GameObject(StoryDialogueRoot)。
- /// UI 引用字段需在 Inspector 中连接到 DialogPage 下的对应节点。
- ///
///
public class VNDialoguePresenter : DialoguePresenterBase
{
- // ── UI 引用 ─────────────────────────────────────────────────────────────
-
- [Header("面板控制")]
- [Tooltip("对话面板整体的 CanvasGroup(DialogPage/DialogCanvas)。用于淡入/淡出及交互开关。")]
- [SerializeField] private CanvasGroup panelGroup;
-
- [Header("台词区")]
- [Tooltip("台词主体文本 TMP(DialogContentFrame/Background/Text)。")]
- [SerializeField] private TextMeshProUGUI dialogueText;
-
- [Tooltip("说话者名称的父容器 GameObject(DialogContentFrame/Speaker)。无说话者时整体隐藏。")]
- [SerializeField] private GameObject speakerContainer;
-
- [Tooltip("说话者名称 TMP(DialogContentFrame/Speaker/Text)。")]
- [SerializeField] private TextMeshProUGUI speakerText;
-
- [Header("推进按钮")]
- [Tooltip("点击此按钮推进对话。\n" +
- " • 打字效果进行中 → 加速(RequestHurryUpLine)显示全文。\n" +
- " • 打字已完成 → 进入下一行(RequestNextLine)。\n" +
- "推荐:将场景中 DialogContentFrame/Background 或 BackButton 的 Button 拖入此处。")]
- [SerializeField] private Button advanceButton;
-
- [Header("选项区")]
- [Tooltip("选项按钮容器根节点(ChoiceFrame)。有选项时显示,无选项时隐藏。")]
- [SerializeField] private GameObject choiceFrame;
-
- [Tooltip("选项按钮数组(最多 4 个,对应 ChoiceFrame 下的四个 GameObject)。")]
- [SerializeField] private Button[] choiceButtons = new Button[4];
-
- [Tooltip("每个选项按钮上的文本 TMP,与 choiceButtons 按索引一一对应。")]
- [SerializeField] private TextMeshProUGUI[] choiceTexts = new TextMeshProUGUI[4];
-
- // ── 打字 / 淡入淡出设置 ──────────────────────────────────────────────────
+ [Header("UI 管理")]
+ [Tooltip("负责当前对话界面的 UI Page 容器。如果为空,将尝试获取全局单例。")]
+ [SerializeField] private DialogUIPage uiPage;
[Header("打字效果")]
[Tooltip("每秒显示的字符数。设为 0 则瞬间显示全文。")]
[SerializeField] private float lettersPerSecond = 40f;
- [Header("淡入淡出")]
- [SerializeField] private float fadeInDuration = 0.2f;
- [SerializeField] private float fadeOutDuration = 0.15f;
-
// ── 私有状态 ─────────────────────────────────────────────────────────────
///
@@ -74,6 +35,11 @@ namespace Ichni.Story.Dialogue
///
private bool _typewriterComplete;
+ ///
+ /// 是否处于快进状态(遇到选项或玩家再次点击时会打断)。
+ ///
+ private bool _isFastForwarding;
+
///
/// 选项选择的异步结果来源。RunOptionsAsync 等待其 Task 完成,
/// 点击按钮时 TrySetResult 触发完成。
@@ -81,179 +47,180 @@ namespace Ichni.Story.Dialogue
private YarnTaskCompletionSource _optionTcs;
///
- /// 对应 StoryDialogueRoot 上的 DialogueRunner,用于调用 RequestNextLine / RequestHurryUpLine。
- /// 在 Awake 中通过 GetComponent 取得。
+ /// 对应 StoryDialogueRoot 上的 DialogueRunner。
///
private DialogueRunner _runner;
+ private DialogUIPage Page => uiPage != null ? uiPage : DialogUIPage.instance;
+
// ── 生命周期 ─────────────────────────────────────────────────────────────
private void Awake()
{
- // VNDialoguePresenter 需要与 DialogueRunner 同 GameObject,通过 GetComponent 获取引用。
_runner = GetComponent();
if (_runner == null)
Debug.LogWarning("[VNDialoguePresenter] 未在同 GameObject 上找到 DialogueRunner。" +
"请确认 VNDialoguePresenter 挂载在 StoryDialogueRoot 上。");
+ }
- // 启动时隐藏面板(alpha=0, 不响应交互)
- SetPanelState(visible: false, instant: true);
+ private void Start()
+ {
+ if (Page == null) return;
// 启动时隐藏选项容器
- if (choiceFrame != null) choiceFrame.SetActive(false);
+ if (Page.choiceFrame != null) Page.choiceFrame.SetActive(false);
// 注册推进按钮回调
- if (advanceButton != null)
- advanceButton.onClick.AddListener(OnAdvanceButtonClicked);
+ if (Page.advanceButton != null)
+ Page.advanceButton.onClick.AddListener(OnAdvanceButtonClicked);
+
+ // 注册快进按钮回调
+ if (Page.fastForwardButton != null)
+ Page.fastForwardButton.onClick.AddListener(OnFastForwardButtonClicked);
}
private void OnDestroy()
{
- if (advanceButton != null)
- advanceButton.onClick.RemoveListener(OnAdvanceButtonClicked);
+ if (Page != null)
+ {
+ if (Page.advanceButton != null)
+ Page.advanceButton.onClick.RemoveListener(OnAdvanceButtonClicked);
+ if (Page.fastForwardButton != null)
+ Page.fastForwardButton.onClick.RemoveListener(OnFastForwardButtonClicked);
+ }
}
// ── DialoguePresenterBase 实现 ───────────────────────────────────────────
- ///
- /// 对话开始:将面板淡入到可见状态。
- /// 在 DialogueRunner 开始第一行前由 Yarn 调用。
- ///
public override async YarnTask OnDialogueStartedAsync()
{
- // 先令 CanvasGroup 可交互但 alpha=0(为淡入动画做准备)
- SetPanelState(visible: true, instant: false);
-
- if (panelGroup != null)
- await Effects.FadeAlphaAsync(panelGroup, 0f, 1f, fadeInDuration, CancellationToken.None);
+ if (Page != null)
+ {
+ var tcs = new YarnTaskCompletionSource();
+ Page.PlayFadeIn(() => tcs.TrySetResult(true));
+ await tcs.Task;
+ }
}
- ///
- /// 呈现一行台词。
- ///
- /// - 隐藏选项区,显示说话者名称(若有)。
- /// - 逐字打字效果,期间可被 HurryUpToken 中断(显示全文)。
- /// - 等待玩家点击推进(NextContentToken 由 取消)。
- ///
- ///
public override async YarnTask RunLineAsync(LocalizedLine line, LineCancellationToken token)
{
+ if (Page == null) return;
+
// 确保选项区不可见;台词区始终可见
- if (choiceFrame != null) choiceFrame.SetActive(false);
+ if (Page.choiceFrame != null) Page.choiceFrame.SetActive(false);
// ── 说话者名称 ──
bool hasSpeaker = !string.IsNullOrEmpty(line.CharacterName);
- if (speakerContainer != null) speakerContainer.SetActive(hasSpeaker);
- if (speakerText != null) speakerText.text = hasSpeaker ? line.CharacterName : string.Empty;
+ if (Page.speakerContainer != null) Page.speakerContainer.SetActive(hasSpeaker);
+ if (Page.speakerText != null) Page.speakerText.text = hasSpeaker ? line.CharacterName : string.Empty;
+
+ // ── 立绘高亮 ──
+ Page.portraitStage?.HighlightSpeaker(line.CharacterName);
// ── 打字效果 ──
string fullText = line.TextWithoutCharacterName.Text;
_typewriterComplete = false;
- if (dialogueText != null)
+ if (Page.dialogueText != null)
{
- // 先将全文赋给 TMP,再通过 maxVisibleCharacters 逐步显示
- // (避免每帧 Substring 产生大量 GC 分配)
- dialogueText.text = fullText;
- dialogueText.maxVisibleCharacters = 0;
+ Page.dialogueText.text = fullText;
+ Page.dialogueText.maxVisibleCharacters = 0;
}
- // 逐字播放;若 HurryUpToken 被取消(玩家第一次点击)则立即跳出循环
- await TypewriterAsync(fullText, token.HurryUpToken);
+ if (_isFastForwarding)
+ {
+ // 瞬间显示全文
+ if (Page.dialogueText != null) Page.dialogueText.maxVisibleCharacters = int.MaxValue;
+ _typewriterComplete = true;
- // 确保全文可见(无论正常完成还是被加速中断)
- if (dialogueText != null)
- dialogueText.maxVisibleCharacters = int.MaxValue;
+ // 极短的延迟,防止瞬间刷过几百句话造成卡顿,也给玩家微小的视觉感知
+ await YarnTask.Delay(50).SuppressCancellationThrow();
- _typewriterComplete = true;
+ if (_isFastForwarding && _runner != null)
+ {
+ _runner.RequestNextLine();
+ }
+ }
+ else
+ {
+ // 正常逐字播放
+ await TypewriterAsync(fullText, token.HurryUpToken);
+
+ // 确保全文可见
+ if (Page.dialogueText != null)
+ Page.dialogueText.maxVisibleCharacters = int.MaxValue;
+
+ _typewriterComplete = true;
+ }
// ── 等待玩家推进 ──
- // token.NextContentToken 由外部 DialogueRunner.RequestNextLine() 取消,
- // SuppressCancellationThrow 确保不抛出 OperationCanceledException。
await YarnTask.WaitUntilCanceled(token.NextContentToken).SuppressCancellationThrow();
}
- ///
- /// 呈现选项列表,等待玩家选择。
- ///
- /// - 显示选项容器,配置每个按钮的文本与点击监听。
- /// - 通过 异步等待玩家选择。
- /// - 返回玩家选择的 (对话被外部取消则返回 null)。
- ///
- ///
public override async YarnTask RunOptionsAsync(
DialogueOption[] options,
LineCancellationToken token)
{
+ if (Page == null) return null;
+
+ // 遇到选项强制打断快进
+ _isFastForwarding = false;
+
// 清空台词区,准备显示选项
- if (speakerContainer != null) speakerContainer.SetActive(false);
- if (dialogueText != null) dialogueText.text = string.Empty;
+ if (Page.speakerContainer != null) Page.speakerContainer.SetActive(false);
+ if (Page.dialogueText != null) Page.dialogueText.text = string.Empty;
// 显示选项容器
- if (choiceFrame != null) choiceFrame.SetActive(true);
+ if (Page.choiceFrame != null) Page.choiceFrame.SetActive(true);
- // 创建选项选择的异步结果来源
_optionTcs = new YarnTaskCompletionSource();
- // 当 NextContentToken 被外部取消(对话被强制结束),提前将 TCS 置为 null 结果,
- // 使 await _optionTcs.Task 能正常退出而不死锁。
WaitForExternalCancelAsync(token.NextContentToken).Forget();
// ── 配置每个选项按钮 ──
- for (int i = 0; i < choiceButtons.Length; i++)
+ for (int i = 0; i < Page.choiceButtons.Length; i++)
{
- // 只显示当前实际有效且可用的选项
- bool active = i < options.Length && options[i].IsAvailable;
- if (choiceButtons[i] != null)
- choiceButtons[i].gameObject.SetActive(active);
+ if (Page.choiceButtons[i] == null) continue;
- if (!active) continue;
-
- // 设置按钮文本
- if (i < choiceTexts.Length && choiceTexts[i] != null)
- choiceTexts[i].text = options[i].Line.TextWithoutCharacterName.Text;
-
- // 捕获循环变量,避免闭包捕获错误索引
- DialogueOption captured = options[i];
- choiceButtons[i].onClick.RemoveAllListeners();
- choiceButtons[i].onClick.AddListener(() => _optionTcs.TrySetResult(captured));
+ if (i < options.Length)
+ Page.choiceButtons[i].Setup(options[i], opt => _optionTcs.TrySetResult(opt));
+ else
+ Page.choiceButtons[i].Cleanup();
}
// ── 等待玩家选择 ──
DialogueOption? selected = await _optionTcs.Task;
- // 清理按钮监听,隐藏选项容器
- foreach (Button btn in choiceButtons)
- if (btn != null) btn.onClick.RemoveAllListeners();
+ // 清理所有按钮并隐藏选项容器
+ foreach (ChoiceButton btn in Page.choiceButtons)
+ btn?.Cleanup();
- if (choiceFrame != null) choiceFrame.SetActive(false);
+ if (Page.choiceFrame != null) Page.choiceFrame.SetActive(false);
return selected;
}
- ///
- /// 对话结束:淡出并隐藏对话面板。
- /// 在 DialogueRunner 处理完最后一行/选项后由 Yarn 调用。
- ///
public override async YarnTask OnDialogueCompleteAsync()
{
- if (panelGroup != null)
- await Effects.FadeAlphaAsync(panelGroup, 1f, 0f, fadeOutDuration, CancellationToken.None);
-
- SetPanelState(visible: false, instant: true);
+ if (Page != null)
+ {
+ var tcs = new YarnTaskCompletionSource();
+ Page.PlayFadeOut(() => tcs.TrySetResult(true));
+ await tcs.Task;
+ }
}
// ── 内部方法 ─────────────────────────────────────────────────────────────
- ///
- /// 推进按钮点击回调。
- ///
- /// - 打字中 → RequestHurryUpLine(取消 HurryUpToken,立即显示全文)。
- /// - 打字完毕 → RequestNextLine(取消 NextContentToken,进入下一行)。
- ///
- ///
private void OnAdvanceButtonClicked()
{
+ // 如果玩家在快进时点击屏幕/推进键,则打断快进状态并停止当前动作
+ if (_isFastForwarding)
+ {
+ _isFastForwarding = false;
+ return;
+ }
+
if (_runner == null) return;
if (!_typewriterComplete)
@@ -262,55 +229,40 @@ namespace Ichni.Story.Dialogue
_runner.RequestNextLine(); // 第二次点击:推进到下一行
}
- ///
- /// 控制对话面板 的显示状态。
- ///
- /// 是否可见且可交互。
- /// 为 true 时立即设置 alpha;为 false 时仅设置 interactable/blocksRaycasts,
- /// alpha 留给外部的 FadeAlphaAsync 动画处理。
- private void SetPanelState(bool visible, bool instant)
+ private void OnFastForwardButtonClicked()
{
- if (panelGroup == null) return;
- panelGroup.interactable = visible;
- panelGroup.blocksRaycasts = visible;
- if (instant) panelGroup.alpha = visible ? 1f : 0f;
+ _isFastForwarding = true;
+
+ if (_runner == null) return;
+
+ // 立即跳过当前的等待状态
+ if (!_typewriterComplete)
+ _runner.RequestHurryUpLine();
+ else
+ _runner.RequestNextLine();
}
- ///
- /// 逐字打字效果。
- /// 通过 maxVisibleCharacters 逐步显示文本(无 GC 分配)。
- /// 被 取消时立即返回,调用方负责将 maxVisibleCharacters 设为 MaxValue。
- ///
- /// 要逐字展示的完整文本(已预先赋值给 dialogueText.text)。
- /// 取消此 token 可跳过打字效果。
private async YarnTask TypewriterAsync(string text, CancellationToken hurryUpToken)
{
- if (dialogueText == null) return;
+ if (Page.dialogueText == null) return;
- // lettersPerSecond <= 0 时瞬间显示全文
if (lettersPerSecond <= 0f)
{
- dialogueText.maxVisibleCharacters = int.MaxValue;
+ Page.dialogueText.maxVisibleCharacters = int.MaxValue;
return;
}
int delayMs = Mathf.Max(1, Mathf.RoundToInt(1000f / lettersPerSecond));
- // TMP 的 maxVisibleCharacters 控制可见字符数(不含 rich-text 标签)
- // 逐帧递增直到全文显示或被 hurryUpToken 中断
for (int i = 1; i <= text.Length; i++)
{
if (hurryUpToken.IsCancellationRequested) return;
- dialogueText.maxVisibleCharacters = i;
+ Page.dialogueText.maxVisibleCharacters = i;
await YarnTask.Delay(delayMs, hurryUpToken).SuppressCancellationThrow();
if (hurryUpToken.IsCancellationRequested) return;
}
}
- ///
- /// 监听外部取消信号(对话被强制终止),将 设为 null 结果,
- /// 确保 的 await 能正常退出而不会死锁。
- ///
private async YarnTask WaitForExternalCancelAsync(CancellationToken externalToken)
{
await YarnTask.WaitUntilCanceled(externalToken).SuppressCancellationThrow();
diff --git a/Assets/Scripts/NewStorySystem/Dialogue/VNPortraitStage.cs b/Assets/Scripts/NewStorySystem/Dialogue/VNPortraitStage.cs
new file mode 100644
index 00000000..67d6c9b1
--- /dev/null
+++ b/Assets/Scripts/NewStorySystem/Dialogue/VNPortraitStage.cs
@@ -0,0 +1,334 @@
+using System.Collections.Generic;
+using Sirenix.OdinInspector;
+using UnityEngine;
+
+namespace Ichni.Story.Dialogue
+{
+ ///
+ /// VN 立绘舞台。管理当前对话中所有已上台角色的 实例。
+ /// 依据用户的合理建议,为了支持未知数量的角色同时出现,本系统改为【动态生成与移除】机制:
+ ///
+ /// - 当角色需要上台时,依据其 动态实例化 Prefab。
+ /// - 当角色下台时,直接销毁(Destroy)对应的 GameObject 释放内存。
+ ///
+ ///
+ public class VNPortraitStage : MonoBehaviour
+ {
+ public static VNPortraitStage Instance { get; private set; }
+
+ // ── 配置 ────────────────────────────────────────────────────────────────
+
+ [Header("Prefab Settings")]
+ [Tooltip("默认的 Sprite 立绘预制体。当角色的 Portrait Style 为 Sprite 时使用此预制体进行实例化。" +
+ "该预制体上必须挂载了实现 IPortraitRenderer 的组件(如 SpritePortraitRenderer)。")]
+ [SerializeField]
+ private GameObject _spritePortraitPrefab;
+
+ [Header("Canvas Reference")]
+ [Tooltip("立绘容器的 RectTransform,作为所有生成立绘的父节点。也是坐标映射的基准(通常指向 DialogPage/PortraitContainer)。")]
+ [SerializeField]
+ private RectTransform _portraitContainer;
+
+ // ── 运行时状态 ───────────────────────────────────────────────────────────
+
+ /// 当前已上台的活跃角色:characterId → 其对应的渲染器实例
+ private readonly Dictionary _activePortraits =
+ new Dictionary();
+
+ // ── 生命周期 ─────────────────────────────────────────────────────────────
+
+ private void Awake()
+ {
+ Instance = this;
+ }
+
+ private void OnDestroy()
+ {
+ if (Instance == this)
+ {
+ Instance = null;
+ }
+ }
+
+ // ── 公共 API ─────────────────────────────────────────────────────────────
+
+ ///
+ /// 当前说话者角色 Id(由 Yarn 行数据驱动)。
+ ///
+ public string CurrentSpeakerId { get; private set; }
+
+ ///
+ /// 显示角色立绘。如果角色已在台上则更新情绪和位置;
+ /// 如果不在台上,则根据其渲染类型动态生成,并置于容器内。
+ /// 这里的坐标是归一化坐标 (-100, 100),内部会自动加上该角色的 positionOffset。
+ ///
+ /// 角色 ID(需在 CharacterRegistry 中存在)。
+ /// 初始情绪名。
+ /// 目标归一化坐标 [-100, 100]。
+ /// 成功生成或更新返回 true,失败返回 false。
+ public bool ShowPortrait(string characterId, string emotion, Vector2 normalizedPosition)
+ {
+ CharacterData data = GetCharacterData(characterId);
+ if (data == null) return false;
+
+ // 1. 计算最终的像素坐标(应用 CharacterData 中配置的 positionOffset)
+ Vector2 finalNormalizedPos = normalizedPosition + data.positionOffset;
+ Vector2 pixelPos = NormalizedToAnchoredPosition(finalNormalizedPos.x, finalNormalizedPos.y);
+
+ // 2. 如果角色已在台上,直接更新情绪与位置
+ if (_activePortraits.TryGetValue(characterId, out IPortraitRenderer existing))
+ {
+ existing.SetEmotion(emotion);
+ existing.SetPosition(pixelPos);
+ return true;
+ }
+
+ // 2. 如果不在台上,决定使用哪一个预制体进行动态生成
+ GameObject prefabToInstantiate = null;
+
+ if (data.portraitStyle == PortraitStyle.Sprite)
+ {
+ prefabToInstantiate = _spritePortraitPrefab;
+ if (prefabToInstantiate == null)
+ {
+ Debug.LogError("[VNPortraitStage] 未配置 _spritePortraitPrefab,无法动态生成 Sprite 立绘!");
+ return false;
+ }
+ }
+ else // Live2D / Spine
+ {
+ prefabToInstantiate = data.dynamicPortraitPrefab;
+ if (prefabToInstantiate == null)
+ {
+ Debug.LogError($"[VNPortraitStage] 角色 '{characterId}' 为动态立绘,但 CharacterData 中未配置 dynamicPortraitPrefab!");
+ return false;
+ }
+ }
+
+ // 3. 动态实例化
+ GameObject go = Instantiate(prefabToInstantiate, _portraitContainer);
+ go.name = $"Portrait_{characterId}";
+
+ // 确保坐标系和缩放正确
+ RectTransform rect = go.GetComponent();
+ if (rect != null)
+ {
+ rect.localScale = Vector3.one;
+ rect.localRotation = Quaternion.identity;
+ }
+
+ IPortraitRenderer renderer = go.GetComponent();
+ if (renderer == null)
+ {
+ Debug.LogError($"[VNPortraitStage] 生成的预制体 '{go.name}' 缺少实现 IPortraitRenderer 接口的组件!");
+ Destroy(go);
+ return false;
+ }
+
+ // 4. 显示并定位
+ renderer.Show(data, emotion);
+ renderer.SetPosition(pixelPos);
+
+ // 5. 登记到活跃立绘列表
+ _activePortraits[characterId] = renderer;
+
+ // 6. 保持当前说话者的高亮状态一致
+ renderer.SetActiveVisual(characterId == CurrentSpeakerId);
+
+ return true;
+ }
+
+ ///
+ /// 移除并销毁指定角色的立绘。
+ ///
+ public void HidePortrait(string characterId)
+ {
+ if (_activePortraits.TryGetValue(characterId, out IPortraitRenderer renderer))
+ {
+ if (renderer is MonoBehaviour mb && mb != null)
+ {
+ Destroy(mb.gameObject);
+ }
+ _activePortraits.Remove(characterId);
+ }
+ }
+
+ ///
+ /// 清空并销毁所有当前在台上的立绘。
+ ///
+ public void HideAll()
+ {
+ foreach (IPortraitRenderer renderer in _activePortraits.Values)
+ {
+ if (renderer is MonoBehaviour mb && mb != null)
+ {
+ Destroy(mb.gameObject);
+ }
+ }
+ _activePortraits.Clear();
+ }
+
+ ///
+ /// 设置或移动立绘位置,并可选择性地更新表情。如果角色不在台上,则会动态生成它。
+ ///
+ /// 角色 ID。
+ /// 目标归一化坐标 [-100, 100],会自动应用角色的 positionOffset。
+ /// 可选表情。如果为 null 且角色已在台上,则保持当前表情;若角色不在台上,则默认使用 "normal"。
+ public void SetPortraitPosition(string characterId, Vector2 normalizedPosition, string emotion = null)
+ {
+ CharacterData data = GetCharacterData(characterId);
+ if (data == null) return;
+
+ // 计算包含角色特定偏移量的最终像素坐标
+ Vector2 finalNormalizedPos = normalizedPosition + data.positionOffset;
+ Vector2 pixelPos = NormalizedToAnchoredPosition(finalNormalizedPos.x, finalNormalizedPos.y);
+
+ if (_activePortraits.TryGetValue(characterId, out IPortraitRenderer renderer))
+ {
+ renderer.SetPosition(pixelPos);
+ if (!string.IsNullOrEmpty(emotion))
+ {
+ renderer.SetEmotion(emotion);
+ }
+ }
+ else
+ {
+ // 不在台上,则用指定表情(空时默认 "normal")在目标位置生成它
+ string targetEmotion = string.IsNullOrEmpty(emotion) ? "normal" : emotion;
+ ShowPortrait(characterId, targetEmotion, normalizedPosition);
+ }
+ }
+
+ ///
+ /// 说话者高亮压暗处理:当前说话者高亮,其余压暗。
+ ///
+ public void HighlightSpeaker(string characterId)
+ {
+ CurrentSpeakerId = characterId;
+
+ foreach (KeyValuePair kv in _activePortraits)
+ {
+ kv.Value.SetActiveVisual(kv.Key == characterId);
+ }
+ }
+
+ ///
+ /// 仅改变角色的表情(角色必须已在台上)。
+ ///
+ public void SetPortraitEmotion(string characterId, string emotion)
+ {
+ if (_activePortraits.TryGetValue(characterId, out IPortraitRenderer renderer))
+ {
+ renderer.SetEmotion(emotion);
+ }
+ else
+ {
+ Debug.LogWarning($"[VNPortraitStage] 无法仅设置表情:角色 '{characterId}' 目前不在台上。");
+ }
+ }
+
+ ///
+ /// 平滑移动立绘到目标归一化坐标。
+ ///
+ public void MovePortrait(string characterId, Vector2 normalizedPosition, float duration)
+ {
+ if (_activePortraits.TryGetValue(characterId, out IPortraitRenderer renderer))
+ {
+ CharacterData data = GetCharacterData(characterId);
+ if (data != null)
+ {
+ Vector2 finalNormalizedPos = normalizedPosition + data.positionOffset;
+ Vector2 pixelPos = NormalizedToAnchoredPosition(finalNormalizedPos.x, finalNormalizedPos.y);
+ renderer.MoveTo(pixelPos, duration);
+ }
+ }
+ else
+ {
+ Debug.LogWarning($"[VNPortraitStage] 无法移动:角色 '{characterId}' 目前不在台上。");
+ }
+ }
+
+ ///
+ /// 让指定角色的立绘跳跃。
+ ///
+ /// 跳跃高度(归一化坐标尺度)
+ public void JumpPortrait(string characterId, float normalizedPower, int numJumps, float duration)
+ {
+ if (_activePortraits.TryGetValue(characterId, out IPortraitRenderer renderer))
+ {
+ float pixelPower = NormalizedToPixelDistance(normalizedPower, false); // 跳跃基于 Y 轴高度
+ renderer.Jump(pixelPower, numJumps, duration);
+ }
+ else
+ {
+ Debug.LogWarning($"[VNPortraitStage] 无法跳跃:角色 '{characterId}' 目前不在台上。");
+ }
+ }
+
+ ///
+ /// 让指定角色的立绘震动。
+ ///
+ /// 震动幅度(归一化坐标尺度)
+ public void ShakePortrait(string characterId, float duration, float normalizedStrength, int vibrato)
+ {
+ if (_activePortraits.TryGetValue(characterId, out IPortraitRenderer renderer))
+ {
+ float pixelStrength = NormalizedToPixelDistance(normalizedStrength, true); // 左右震动基于 X 轴宽度
+ renderer.Shake(duration, pixelStrength, vibrato);
+ }
+ else
+ {
+ Debug.LogWarning($"[VNPortraitStage] 无法震动:角色 '{characterId}' 目前不在台上。");
+ }
+ }
+
+ ///
+ /// 将归一化坐标 (-100, 100) 映射为 anchoredPosition 像素坐标。
+ ///
+ public Vector2 NormalizedToAnchoredPosition(float normalizedX, float normalizedY)
+ {
+ if (_portraitContainer == null)
+ {
+ Debug.LogWarning("[VNPortraitStage] _portraitContainer 未配置,坐标映射使用 1920x1080 默认尺寸映射。");
+ return new Vector2(normalizedX / 100f * 960f, normalizedY / 100f * 540f);
+ }
+
+ Vector2 halfSize = _portraitContainer.rect.size * 0.5f;
+ return new Vector2(normalizedX / 100f * halfSize.x, normalizedY / 100f * halfSize.y);
+ }
+
+ ///
+ /// 将归一化距离映射为像素距离(用于动画幅度换算)。
+ ///
+ /// 归一化长度
+ /// 是否基于 X 轴进行映射(否则基于 Y 轴)
+ public float NormalizedToPixelDistance(float normalizedDistance, bool useXAxis = false)
+ {
+ if (_portraitContainer == null)
+ {
+ return normalizedDistance / 100f * (useXAxis ? 960f : 540f);
+ }
+ Vector2 halfSize = _portraitContainer.rect.size * 0.5f;
+ return normalizedDistance / 100f * (useXAxis ? halfSize.x : halfSize.y);
+ }
+
+ // ── 内部辅助 ─────────────────────────────────────────────────────────────
+
+ private CharacterData GetCharacterData(string characterId)
+ {
+ if (StoryManager.instance == null || StoryManager.instance.characterRegistry == null)
+ {
+ Debug.LogError("[VNPortraitStage] StoryManager 或 CharacterRegistry 未初始化!");
+ return null;
+ }
+
+ if (!StoryManager.instance.characterRegistry.TryGet(characterId, out CharacterData data))
+ {
+ Debug.LogWarning($"[VNPortraitStage] 在 CharacterRegistry 中找不到 ID 为 '{characterId}' 的 CharacterData 资产。");
+ return null;
+ }
+
+ return data;
+ }
+ }
+}
diff --git a/Assets/Scripts/NewStorySystem/Dialogue/VNPortraitStage.cs.meta b/Assets/Scripts/NewStorySystem/Dialogue/VNPortraitStage.cs.meta
new file mode 100644
index 00000000..8e3b7add
--- /dev/null
+++ b/Assets/Scripts/NewStorySystem/Dialogue/VNPortraitStage.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: ec4abf93d4e3d1d448630a311fe7c236
\ No newline at end of file
diff --git a/Assets/Scripts/Story/StoryUI/StoryUIPage.cs b/Assets/Scripts/NewStorySystem/StoryUIPage.cs
similarity index 93%
rename from Assets/Scripts/Story/StoryUI/StoryUIPage.cs
rename to Assets/Scripts/NewStorySystem/StoryUIPage.cs
index 1eb178c7..8aed4dfb 100644
--- a/Assets/Scripts/Story/StoryUI/StoryUIPage.cs
+++ b/Assets/Scripts/NewStorySystem/StoryUIPage.cs
@@ -9,7 +9,6 @@ namespace Ichni.Story.UI
{
public class StoryUIPage : UIPageBase
{
- public MessageBox messageBox;
public Button backButton;
protected override void Awake()
diff --git a/Assets/Scripts/Story/StoryUI/StoryUIPage.cs.meta b/Assets/Scripts/NewStorySystem/StoryUIPage.cs.meta
similarity index 83%
rename from Assets/Scripts/Story/StoryUI/StoryUIPage.cs.meta
rename to Assets/Scripts/NewStorySystem/StoryUIPage.cs.meta
index e3f3cddf..d0afaac8 100644
--- a/Assets/Scripts/Story/StoryUI/StoryUIPage.cs.meta
+++ b/Assets/Scripts/NewStorySystem/StoryUIPage.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 3ec0b23c77de2764d9425add8f28ea00
+guid: 981c044487823304aade761b1adaf914
MonoImporter:
externalObjects: {}
serializedVersion: 2
diff --git a/Assets/Scripts/Story/Dialog.meta b/Assets/Scripts/NewStorySystem/UI.meta
similarity index 77%
rename from Assets/Scripts/Story/Dialog.meta
rename to Assets/Scripts/NewStorySystem/UI.meta
index c78470d6..aab3c508 100644
--- a/Assets/Scripts/Story/Dialog.meta
+++ b/Assets/Scripts/NewStorySystem/UI.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 2de1e277bcf059c42826353d1c086ccc
+guid: 0d5fd17f91f4f8049953f00fe242b32c
folderAsset: yes
DefaultImporter:
externalObjects: {}
diff --git a/Assets/Scripts/NewStorySystem/UI/DialogUIPage.cs b/Assets/Scripts/NewStorySystem/UI/DialogUIPage.cs
new file mode 100644
index 00000000..5b1898ce
--- /dev/null
+++ b/Assets/Scripts/NewStorySystem/UI/DialogUIPage.cs
@@ -0,0 +1,71 @@
+using Ichni.Story.Dialogue;
+using Ichni.UI;
+using UnityEngine;
+using UnityEngine.Events;
+
+namespace Ichni.Story.UI
+{
+ ///
+ /// 对话系统专用的 UI 页面容器。
+ /// 接管整个对话面板的淡入淡出及交互状态控制,
+ /// 将显示生命周期与对话流逻辑 (VNDialoguePresenter) 彻底解耦。
+ ///
+ public class DialogUIPage : UIPageBase
+ {
+ public static DialogUIPage instance;
+
+ [Header("立绘舞台")]
+ public VNPortraitStage portraitStage;
+
+ [Header("台词区")]
+ public TMPro.TextMeshProUGUI dialogueText;
+ public GameObject speakerContainer;
+ public TMPro.TextMeshProUGUI speakerText;
+
+ [Header("推进按钮")]
+ public UnityEngine.UI.Button advanceButton;
+ [Tooltip("点击后自动快进,直到遇到选项")]
+ public UnityEngine.UI.Button fastForwardButton;
+
+ [Header("选项区")]
+ public GameObject choiceFrame;
+ public ChoiceButton[] choiceButtons = new ChoiceButton[4];
+
+ [Header("动态组件")]
+ public DialogWheel dialogWheel;
+
+ protected override void Awake()
+ {
+ base.Awake();
+
+ if (instance == null)
+ {
+ instance = this;
+ }
+ else
+ {
+ Destroy(gameObject);
+ return;
+ }
+
+ // 默认启动时强制隐藏
+ if (mainCanvasGroup != null)
+ {
+ mainCanvasGroup.alpha = 0f;
+ mainCanvasGroup.interactable = false;
+ mainCanvasGroup.blocksRaycasts = false;
+ mainCanvasGroup.gameObject.SetActive(false);
+ }
+ }
+
+ public void PlayFadeIn(UnityAction onComplete = null)
+ {
+ FadeIn(0.2f, false, onComplete);
+ }
+
+ public void PlayFadeOut(UnityAction onComplete = null)
+ {
+ FadeOut(0.2f, false, onComplete);
+ }
+ }
+}
diff --git a/Assets/Scripts/NewStorySystem/UI/DialogUIPage.cs.meta b/Assets/Scripts/NewStorySystem/UI/DialogUIPage.cs.meta
new file mode 100644
index 00000000..4b3e4433
--- /dev/null
+++ b/Assets/Scripts/NewStorySystem/UI/DialogUIPage.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 0e1e4a2c0a479784e839bdf448215e19
\ No newline at end of file
diff --git a/Assets/Scripts/NewStorySystem/UI/DialogWheel.cs b/Assets/Scripts/NewStorySystem/UI/DialogWheel.cs
new file mode 100644
index 00000000..55ea90dc
--- /dev/null
+++ b/Assets/Scripts/NewStorySystem/UI/DialogWheel.cs
@@ -0,0 +1,72 @@
+using DG.Tweening;
+using UnityEngine;
+
+namespace Ichni.Story.UI
+{
+ ///
+ /// 对话时常驻转动的齿轮/轮盘,以及伴随浮动的指针。
+ ///
+ public class DialogWheel : MonoBehaviour
+ {
+ [Header("轮盘旋转")]
+ [Tooltip("要旋转的 RectTransform。如果不填,默认获取自身。")]
+ public RectTransform wheelRect;
+
+ [Tooltip("顺时针旋转一整圈(360度)所需的时间(秒)")]
+ public float rotationCycleDuration = 5f;
+
+ [Header("指针浮动")]
+ [Tooltip("常驻上下浮动的指针对象 (RectTransform)")]
+ public RectTransform pointerRect;
+
+ [Tooltip("指针单向浮动的距离(像素)")]
+ public float pointerFloatDistance = 5f;
+
+ [Tooltip("指针完成单向浮动所需的时间")]
+ public float pointerFloatDuration = 0.3f;
+
+ private Tween _rotateTween;
+ private Tween _pointerTween;
+ private float _pointerStartY;
+
+ private void Awake()
+ {
+ if (wheelRect == null) wheelRect = GetComponent();
+
+ if (pointerRect != null)
+ {
+ _pointerStartY = pointerRect.anchoredPosition.y;
+ }
+ }
+
+ private void Start()
+ {
+ // 轮盘常驻匀速旋转
+ if (wheelRect != null && rotationCycleDuration > 0f)
+ {
+ // SetRelative(true) 保证无论当前角度是多少,都在其基础上转 -360 度
+ // LoopType.Restart 配合 Linear 缓动,实现无限丝滑旋转
+ _rotateTween = wheelRect.DORotate(new Vector3(0, 0, -360f), rotationCycleDuration, RotateMode.FastBeyond360)
+ .SetRelative(true)
+ .SetLoops(-1, LoopType.Restart)
+ .SetEase(Ease.Linear);
+ _rotateTween.Play();
+ }
+
+ // 指针常驻浮动,启动后永不停止
+ if (pointerRect != null)
+ {
+ _pointerTween = pointerRect.DOAnchorPosY(_pointerStartY + pointerFloatDistance, pointerFloatDuration)
+ .SetLoops(-1, LoopType.Yoyo)
+ .SetEase(Ease.InOutSine);
+ _pointerTween.Play();
+ }
+ }
+
+ private void OnDestroy()
+ {
+ _rotateTween?.Kill();
+ _pointerTween?.Kill();
+ }
+ }
+}
diff --git a/Assets/Scripts/NewStorySystem/UI/DialogWheel.cs.meta b/Assets/Scripts/NewStorySystem/UI/DialogWheel.cs.meta
new file mode 100644
index 00000000..5c7a1411
--- /dev/null
+++ b/Assets/Scripts/NewStorySystem/UI/DialogWheel.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 027bcd2c2d137f5458f8b12002234663
\ No newline at end of file
diff --git a/Assets/Scripts/NewStorySystem/UI/StoryMessageBoxUIPage.cs b/Assets/Scripts/NewStorySystem/UI/StoryMessageBoxUIPage.cs
new file mode 100644
index 00000000..61db3d15
--- /dev/null
+++ b/Assets/Scripts/NewStorySystem/UI/StoryMessageBoxUIPage.cs
@@ -0,0 +1,143 @@
+using System.Collections.Generic;
+using Ichni.Menu.UI;
+using Ichni.UI;
+using UnityEngine;
+
+namespace Ichni.Story.UI
+{
+ ///
+ /// 用于在剧情系统中管理并顺序展示 MessageBox 的独立 UI 页面。
+ /// 支持动态实例化给定的 MessageBox Prefab,并在所有消息展示完毕后进行大页面的 FadeOut。
+ ///
+ public class StoryMessageBoxUIPage : UIPageBase
+ {
+ public static StoryMessageBoxUIPage instance;
+
+ [Header("Prefabs & Containers")]
+ [Tooltip("默认使用的 MessageBox 预制体(请从 Project 中拖拽,而非场景中的实例)")]
+ public MessageBox defaultMessageBoxPrefab;
+
+ [Tooltip("生成的 MessageBox 挂载在哪?如果不填,默认挂载在自己身上")]
+ public Transform messageContainer;
+
+ // 用于排队的内部消息数据结构
+ private struct PendingMessage
+ {
+ public string title;
+ public string content;
+ public MessageBox customPrefab; // 支持未来传入不同种类的 Prefab
+ }
+
+ private Queue _messageQueue = new Queue();
+ private MessageBox _currentActiveBox;
+ private bool _isPageActive = false;
+
+ protected override void Awake()
+ {
+ base.Awake();
+
+ if (instance == null)
+ {
+ instance = this;
+ }
+ else
+ {
+ Debug.LogWarning("[StoryMessageBoxUIPage] 场景中存在多个实例,正在销毁多余的实例。");
+ Destroy(gameObject);
+ return;
+ }
+
+ if (messageContainer == null)
+ {
+ messageContainer = this.transform;
+ }
+ }
+
+ ///
+ /// 将歌曲解锁提示加入弹窗队列。
+ ///
+ public void ShowUnlockMessage(string songUnlockKey)
+ {
+ string title = "New Song Unlocked!";
+ string content = $"You have unlocked the song: {songUnlockKey}!";
+ EnqueueMessage(title, content, defaultMessageBoxPrefab);
+ }
+
+ ///
+ /// 将自定义文本提示加入弹窗队列。
+ ///
+ public void ShowCustomMessage(string title, string content)
+ {
+ EnqueueMessage(title, content, defaultMessageBoxPrefab);
+ }
+
+ ///
+ /// 将指定消息入队。如果是空闲状态,则唤醒大页面并开始处理队列。
+ ///
+ private void EnqueueMessage(string title, string content, MessageBox prefab)
+ {
+ if (prefab == null)
+ {
+ Debug.LogError("[StoryMessageBoxUIPage] 没有可用的 MessageBox 预制体!");
+ return;
+ }
+
+ _messageQueue.Enqueue(new PendingMessage
+ {
+ title = title,
+ content = content,
+ customPrefab = prefab
+ });
+
+ // 如果当前页面没有在显示中,则开始整体流程
+ if (!_isPageActive)
+ {
+ _isPageActive = true;
+
+ // 唤醒大页面(执行 UIPageBase 的渐入并拦截底层射线)
+ this.FadeIn(0.5f, false, ShowNextInQueue);
+ }
+ }
+
+ ///
+ /// 从队列中取出一个并实例化显示。
+ ///
+ private void ShowNextInQueue()
+ {
+ if (_messageQueue.Count == 0)
+ {
+ // 队列处理完毕,大页面整体退场
+ _currentActiveBox = null;
+ _isPageActive = false;
+ this.FadeOut();
+ return;
+ }
+
+ PendingMessage msg = _messageQueue.Dequeue();
+
+ // 实例化预制体
+ _currentActiveBox = Instantiate(msg.customPrefab, messageContainer);
+
+ // 订阅“当这个消息框彻底结束关闭时”的事件
+ _currentActiveBox.onAllMessagesClosed.AddListener(() =>
+ {
+ // 销毁旧实例
+ if (_currentActiveBox != null)
+ {
+ Destroy(_currentActiveBox.gameObject);
+ }
+
+ // 检查并显示下一个
+ ShowNextInQueue();
+ });
+
+ // 配置并启动 MessageBox
+ _currentActiveBox.Clear();
+ _currentActiveBox.AddInfo(msg.title, msg.content, null);
+
+ // MessageBox.SetUp() 内部会激活自己并执行自己的 FadeIn
+ _currentActiveBox.gameObject.SetActive(true);
+ _currentActiveBox.SetUp();
+ }
+ }
+}
diff --git a/Assets/Scripts/NewStorySystem/UI/StoryMessageBoxUIPage.cs.meta b/Assets/Scripts/NewStorySystem/UI/StoryMessageBoxUIPage.cs.meta
new file mode 100644
index 00000000..e7b1241a
--- /dev/null
+++ b/Assets/Scripts/NewStorySystem/UI/StoryMessageBoxUIPage.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 07f2a7ffd4b513d4e90d60a6587914cc
\ No newline at end of file
diff --git a/Assets/Scripts/Story/StoryData.meta b/Assets/Scripts/NewStorySystem/YarnFunctions.meta
similarity index 77%
rename from Assets/Scripts/Story/StoryData.meta
rename to Assets/Scripts/NewStorySystem/YarnFunctions.meta
index d4c0850c..d0867d0d 100644
--- a/Assets/Scripts/Story/StoryData.meta
+++ b/Assets/Scripts/NewStorySystem/YarnFunctions.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 31a6a9bf0919951489cacfb86fb715c9
+guid: 0700ab9bd015c9e4f8e5dcdc6f5f59ce
folderAsset: yes
DefaultImporter:
externalObjects: {}
diff --git a/Assets/Scripts/NewStorySystem/YarnFunctions/GeneralFunctions.cs b/Assets/Scripts/NewStorySystem/YarnFunctions/GeneralFunctions.cs
new file mode 100644
index 00000000..2ba11ccf
--- /dev/null
+++ b/Assets/Scripts/NewStorySystem/YarnFunctions/GeneralFunctions.cs
@@ -0,0 +1,30 @@
+using UnityEngine;
+using Yarn.Unity;
+
+namespace Ichni.Story.YarnFunctions
+{
+ public static class GeneralFunctions
+ {
+ [YarnCommand("log")]
+ public static void Log(string message, string logType)
+ {
+ logType = logType.ToLower();
+
+ switch (logType)
+ {
+ case "info":
+ Debug.Log(message);
+ break;
+ case "warning":
+ Debug.LogWarning(message);
+ break;
+ case "error":
+ Debug.LogError(message);
+ break;
+ default:
+ Debug.Log(message);
+ break;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/Scripts/NewStorySystem/YarnFunctions/GeneralFunctions.cs.meta b/Assets/Scripts/NewStorySystem/YarnFunctions/GeneralFunctions.cs.meta
new file mode 100644
index 00000000..87243bf7
--- /dev/null
+++ b/Assets/Scripts/NewStorySystem/YarnFunctions/GeneralFunctions.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 1af4095ad0bedbe41b834a162253a0e8
\ No newline at end of file
diff --git a/Assets/Scripts/NewStorySystem/YarnFunctions/PortraitAnimationCommands.cs b/Assets/Scripts/NewStorySystem/YarnFunctions/PortraitAnimationCommands.cs
new file mode 100644
index 00000000..eaaa5ad8
--- /dev/null
+++ b/Assets/Scripts/NewStorySystem/YarnFunctions/PortraitAnimationCommands.cs
@@ -0,0 +1,69 @@
+using UnityEngine;
+using Yarn.Unity;
+
+namespace Ichni.Story.YarnFunctions
+{
+ ///
+ /// 立绘动画控制相关的 Yarn 自定义命令静态注册器。
+ /// 包含平移、跳跃、震动等 DOTween 动画表现。
+ ///
+ public static class PortraitAnimationCommands
+ {
+ // ── Yarn Commands ────────────────────────────────────────────────────────
+
+ ///
+ /// 平滑移动角色立绘到目标位置。
+ /// 格式: <<move_portrait characterId x y duration>>
+ ///
+ /// 角色标识 ID
+ /// 目标 X 坐标 [-100, 100]
+ /// 目标 Y 坐标 [-100, 100]
+ /// 动画持续时间(秒)
+ [YarnCommand("move_portrait")]
+ public static void MovePortrait(string characterId, float x, float y, float duration)
+ {
+ if (!EnsureStage()) return;
+ Dialogue.VNPortraitStage.Instance.MovePortrait(characterId, new Vector2(x, y), duration);
+ }
+
+ ///
+ /// 让角色立绘原地跳跃。
+ /// 格式: <<jump_portrait characterId power numJumps duration>>
+ ///
+ /// 角色标识 ID
+ /// 跳跃高度(使用与坐标域相同的归一化尺度,如 10 表示 10% 高度)
+ /// 跳跃次数
+ /// 动画总持续时间(秒)
+ [YarnCommand("jump_portrait")]
+ public static void JumpPortrait(string characterId, float power, int numJumps, float duration)
+ {
+ if (!EnsureStage()) return;
+ Dialogue.VNPortraitStage.Instance.JumpPortrait(characterId, power, numJumps, duration);
+ }
+
+ ///
+ /// 让角色立绘产生左右震动效果。
+ /// 格式: <<shake_portrait characterId duration strength vibrato>>
+ ///
+ /// 角色标识 ID
+ /// 震动持续时间(秒)
+ /// 震动幅度(使用与坐标域相同的归一化尺度)
+ /// 震动频率
+ [YarnCommand("shake_portrait")]
+ public static void ShakePortrait(string characterId, float duration, float strength, int vibrato)
+ {
+ if (!EnsureStage()) return;
+ Dialogue.VNPortraitStage.Instance.ShakePortrait(characterId, duration, strength, vibrato);
+ }
+
+ // ── 内部辅助 ─────────────────────────────────────────────────────────────
+
+ private static bool EnsureStage()
+ {
+ if (Dialogue.VNPortraitStage.Instance != null) return true;
+
+ Debug.LogError("[PortraitAnimationCommands] 未找到 VNPortraitStage 实例!请确保在当前场景中存在挂载了 VNPortraitStage 的游戏物体。");
+ return false;
+ }
+ }
+}
diff --git a/Assets/Scripts/NewStorySystem/YarnFunctions/PortraitAnimationCommands.cs.meta b/Assets/Scripts/NewStorySystem/YarnFunctions/PortraitAnimationCommands.cs.meta
new file mode 100644
index 00000000..e8c2af9a
--- /dev/null
+++ b/Assets/Scripts/NewStorySystem/YarnFunctions/PortraitAnimationCommands.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 50b4898984f9bfc4da527dcd444f87b3
\ No newline at end of file
diff --git a/Assets/Scripts/NewStorySystem/YarnFunctions/PortraitCommands.cs b/Assets/Scripts/NewStorySystem/YarnFunctions/PortraitCommands.cs
new file mode 100644
index 00000000..09e4218d
--- /dev/null
+++ b/Assets/Scripts/NewStorySystem/YarnFunctions/PortraitCommands.cs
@@ -0,0 +1,112 @@
+using UnityEngine;
+using Yarn.Unity;
+
+namespace Ichni.Story.YarnFunctions
+{
+ ///
+ /// 立绘控制相关的 Yarn 自定义命令静态注册器。
+ ///
+ /// 全局静态命令,不依赖于 GameObject 的挂载。所有方法都使用强类型的参数,
+ /// 以更明确、简洁的指令名称区分不同应用场景,从而抛弃复杂的内部字符串解析判断。
+ ///
+ ///
+ public static class PortraitCommands
+ {
+ // ── Yarn Commands ────────────────────────────────────────────────────────
+
+ ///
+ /// 最基础、最全面的立绘指令:设置指定角色的坐标和表情。
+ /// 若角色不在台上,会自动以指定的表情和位置实例化。
+ /// 格式: <<set_portrait characterId x y [emotion]>>
+ ///
+ /// 角色标识 ID。
+ /// 归一化 X 坐标 [-100, 100]
+ /// 归一化 Y 坐标 [-100, 100]
+ /// 表情名称。如果不填,默认保持不变或初始化为 "normal"
+ [YarnCommand("set_portrait")]
+ public static void SetPortrait(string characterId, float x, float y, string emotion = null)
+ {
+ if (!EnsureStage()) return;
+
+ // 传入归一化坐标,由 VNPortraitStage 内部自动应用 positionOffset 并转换为像素坐标
+ Vector2 normalizedPos = new Vector2(x, y);
+ Dialogue.VNPortraitStage.Instance.SetPortraitPosition(characterId, normalizedPos, emotion);
+ }
+
+ ///
+ /// 设置当前说话角色的坐标和表情。
+ /// 格式: <<set_portrait_current x y [emotion]>>
+ ///
+ [YarnCommand("set_portrait_current")]
+ public static void SetPortraitCurrent(float x, float y, string emotion = null)
+ {
+ if (!EnsureStage()) return;
+
+ string characterId = Dialogue.VNPortraitStage.Instance.CurrentSpeakerId;
+ if (string.IsNullOrEmpty(characterId))
+ {
+ Debug.LogWarning("[PortraitCommands] set_portrait_current: 当前没有活动的说话者,无法执行此命令!");
+ return;
+ }
+
+ SetPortrait(characterId, x, y, emotion);
+ }
+
+ ///
+ /// 仅设置或移动指定角色的坐标(不改变当前表情)。
+ /// 格式: <<set_portrait_position characterId x y>>
+ ///
+ [YarnCommand("set_portrait_position")]
+ public static void SetPortraitPosition(string characterId, float x, float y)
+ {
+ // 通过传入 emotion = null,VNPortraitStage 在更新时将保持角色原有表情
+ SetPortrait(characterId, x, y, null);
+ }
+
+ ///
+ /// 仅改变指定角色的表情(角色必须已经上台)。
+ /// 格式: <<set_portrait_emotion characterId emotion>>
+ ///
+ [YarnCommand("set_portrait_emotion")]
+ public static void SetPortraitEmotion(string characterId, string emotion)
+ {
+ if (!EnsureStage()) return;
+
+ Dialogue.VNPortraitStage.Instance.SetPortraitEmotion(characterId, emotion);
+ }
+
+ ///
+ /// 隐藏指定角色的立绘。
+ /// 格式: <<hide_portrait characterId>>
+ ///
+ [YarnCommand("hide_portrait")]
+ public static void HidePortrait(string characterId)
+ {
+ if (!EnsureStage()) return;
+
+ Dialogue.VNPortraitStage.Instance.HidePortrait(characterId);
+ }
+
+ ///
+ /// 隐藏当前所有在台上的立绘。
+ /// 格式: <<hide_all_portraits>>
+ ///
+ [YarnCommand("hide_all_portraits")]
+ public static void HideAllPortraits()
+ {
+ if (!EnsureStage()) return;
+
+ Dialogue.VNPortraitStage.Instance.HideAll();
+ }
+
+ // ── 内部辅助 ─────────────────────────────────────────────────────────────
+
+ private static bool EnsureStage()
+ {
+ if (Dialogue.VNPortraitStage.Instance != null) return true;
+
+ Debug.LogError("[PortraitCommands] 未找到 VNPortraitStage 实例!请确保在当前场景中存在挂载了 VNPortraitStage 的游戏物体。");
+ return false;
+ }
+ }
+}
diff --git a/Assets/Scripts/NewStorySystem/YarnFunctions/PortraitCommands.cs.meta b/Assets/Scripts/NewStorySystem/YarnFunctions/PortraitCommands.cs.meta
new file mode 100644
index 00000000..bb6f3314
--- /dev/null
+++ b/Assets/Scripts/NewStorySystem/YarnFunctions/PortraitCommands.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: d56251fa130b1334eab42a8d3069932f
\ No newline at end of file
diff --git a/Assets/Scripts/NewStorySystem/YarnFunctions/StoryTreeCommands.cs b/Assets/Scripts/NewStorySystem/YarnFunctions/StoryTreeCommands.cs
new file mode 100644
index 00000000..83541132
--- /dev/null
+++ b/Assets/Scripts/NewStorySystem/YarnFunctions/StoryTreeCommands.cs
@@ -0,0 +1,103 @@
+using Ichni.Story.Dialogue;
+using Ichni.Story.UI;
+using UnityEngine;
+using UnityEngine.Localization.Settings;
+using Yarn.Unity;
+
+namespace Ichni.Story.YarnFunctions
+{
+ ///
+ /// 包含与故事树节点控制、全局进程、存档交互相关的 Yarn 自定义命令注册器。
+ ///
+ public static class StoryTreeCommands
+ {
+ // ── Yarn Commands ────────────────────────────────────────────────────────
+
+ ///
+ /// 解锁一首新歌曲,并在当前这段对话结束(对话 UI 淡出)后,弹出 MessageBox 提示。
+ /// 格式: <<unlock_song songUnlockKey>>
+ ///
+ /// 要解锁的歌曲密钥/ID
+ [YarnCommand("unlock_song")]
+ public static void UnlockSong(string songUnlockKey)
+ {
+ if (GameSaveManager.instance == null || GameSaveManager.instance.SongSaveModule == null)
+ {
+ Debug.LogError("[StoryTreeCommands] 无法解锁歌曲:GameSaveManager 或其 SongSaveModule 未初始化!");
+ return;
+ }
+
+ // 1. 检查是否已经解锁
+ if (GameSaveManager.instance.SongSaveModule.CheckStoryKey(songUnlockKey))
+ {
+ Debug.Log($"[StoryTreeCommands] 歌曲 {songUnlockKey} 已处于解锁状态。");
+ return;
+ }
+
+ // 2. 写入解锁状态并保存存档
+ GameSaveManager.instance.SongSaveModule.storyUnlockKeys.Add(songUnlockKey);
+ GameSaveManager.instance.SongSaveModule.SaveStoryUnlockKeys();
+ Debug.Log($"[StoryTreeCommands] 已成功写入并保存歌曲解锁密钥:{songUnlockKey}");
+
+ // 3. 将 UI 弹窗提示加入到对话结束队列中
+ if (StoryDialogueController.instance != null)
+ {
+ StoryDialogueController.instance.dialogueEndActions.Add(() =>
+ {
+ if (StoryMessageBoxUIPage.instance != null)
+ {
+ StoryMessageBoxUIPage.instance.ShowUnlockMessage(songUnlockKey);
+ }
+ else
+ {
+ Debug.LogError("[StoryTreeCommands] 弹窗失败:场景中未找到 StoryMessageBoxUIPage 实例!");
+ }
+ });
+ }
+ else
+ {
+ Debug.LogError("[StoryTreeCommands] 弹窗队列注册失败:未找到 StoryDialogueController 实例!");
+ }
+ }
+
+ ///
+ /// 在对话结束后,弹出一个自定义 MessageBox 提示。
+ /// 会尝试使用 Unity Localization 进行翻译,如果找不到对应条目则回退显示原文本(Key)。
+ /// 格式: <<show_message titleKey contentKey [tableName]>>
+ ///
+ /// 标题文本或本地化键
+ /// 正文文本或本地化键
+ /// Unity Localization 中的 String Table 名称
+ [YarnCommand("show_message")]
+ public static void ShowMessage(string titleKey, string contentKey, string tableName = "Message")
+ {
+ string translatedTitle = GetTranslatedText(tableName, titleKey);
+ string translatedContent = GetTranslatedText(tableName, contentKey);
+ Debug.Log($"[StoryTreeCommands] 准备在对话结束后显示自定义弹窗:标题='{translatedTitle}',内容='{translatedContent}'");
+ StoryDialogueController.instance.dialogueEndActions.Add(() =>
+ {
+ StoryMessageBoxUIPage.instance.ShowCustomMessage(translatedTitle, translatedContent);
+ });
+ }
+
+ // ── 内部辅助 ─────────────────────────────────────────────────────────────
+
+ private static string GetTranslatedText(string tableName, string key)
+ {
+ if (string.IsNullOrEmpty(key)) return string.Empty;
+
+ try
+ {
+ // 尝试从 Unity Localization 中获取翻译文本
+ string translated = LocalizationSettings.StringDatabase.GetLocalizedString(tableName, key);
+ // 若获取失败或为空,则直接原样返回 key 作为兜底文本
+ return string.IsNullOrEmpty(translated) ? key : translated;
+ }
+ catch
+ {
+ // 如果表不存在或其他异常,返回原 key
+ return key;
+ }
+ }
+ }
+}
diff --git a/Assets/Scripts/NewStorySystem/YarnFunctions/StoryTreeCommands.cs.meta b/Assets/Scripts/NewStorySystem/YarnFunctions/StoryTreeCommands.cs.meta
new file mode 100644
index 00000000..0a73caf8
--- /dev/null
+++ b/Assets/Scripts/NewStorySystem/YarnFunctions/StoryTreeCommands.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 7a048ef81fee2164b8c7ae9748690cfd
\ No newline at end of file
diff --git a/Assets/Scripts/NewStorySystem/YarnFunctions/VariableFunctions.cs b/Assets/Scripts/NewStorySystem/YarnFunctions/VariableFunctions.cs
new file mode 100644
index 00000000..2cb6c450
--- /dev/null
+++ b/Assets/Scripts/NewStorySystem/YarnFunctions/VariableFunctions.cs
@@ -0,0 +1,76 @@
+using UnityEngine;
+using Yarn.Unity;
+using Ichni.Story;
+
+namespace Ichni.Story.YarnFunctions
+{
+ ///
+ /// 提供可以直接在 Yarn 脚本中调用的全局变量读写指令。
+ /// 完全兼容旧系统中的自定义函数(避免旧的 .yarn 报错),
+ /// 底层统一指向全新的 StoryVariables 枢纽。
+ ///
+ public static class VariableCommands
+ {
+ [YarnCommand("set_bool")]
+ public static void SetBool(string key, bool value)
+ {
+ StoryVariables.SetBool(key, value);
+ }
+
+ [YarnFunction("get_bool")]
+ public static bool GetBool(string key)
+ {
+ return StoryVariables.GetBool(key);
+ }
+
+ [YarnCommand("set_int")]
+ public static void SetInt(string key, int value)
+ {
+ StoryVariables.SetInt(key, value);
+ }
+
+ [YarnCommand("modify_int")]
+ public static void ModifyInt(string key, int modification)
+ {
+ int currentValue = StoryVariables.GetInt(key);
+ StoryVariables.SetInt(key, currentValue + modification);
+ }
+
+ [YarnFunction("get_int")]
+ public static int GetInt(string key)
+ {
+ return StoryVariables.GetInt(key);
+ }
+
+ [YarnCommand("set_float")]
+ public static void SetFloat(string key, float value)
+ {
+ StoryVariables.SetFloat(key, value);
+ }
+
+ [YarnCommand("modify_float")]
+ public static void ModifyFloat(string key, float modification)
+ {
+ float currentValue = StoryVariables.GetFloat(key);
+ StoryVariables.SetFloat(key, currentValue + modification);
+ }
+
+ [YarnFunction("get_float")]
+ public static float GetFloat(string key)
+ {
+ return StoryVariables.GetFloat(key);
+ }
+
+ [YarnCommand("set_string")]
+ public static void SetString(string key, string value)
+ {
+ StoryVariables.SetString(key, value);
+ }
+
+ [YarnFunction("get_string")]
+ public static string GetString(string key)
+ {
+ return StoryVariables.GetString(key);
+ }
+ }
+}
diff --git a/Assets/Scripts/NewStorySystem/YarnFunctions/VariableFunctions.cs.meta b/Assets/Scripts/NewStorySystem/YarnFunctions/VariableFunctions.cs.meta
new file mode 100644
index 00000000..be95e9df
--- /dev/null
+++ b/Assets/Scripts/NewStorySystem/YarnFunctions/VariableFunctions.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: b9094628fd04644439b4afd553c7a6aa
\ No newline at end of file
diff --git a/Assets/Scripts/SLSUtilities/Narrative/Base/YarnFunctions.cs b/Assets/Scripts/SLSUtilities/Narrative/Base/YarnFunctions.cs
deleted file mode 100644
index 48b43ee5..00000000
--- a/Assets/Scripts/SLSUtilities/Narrative/Base/YarnFunctions.cs
+++ /dev/null
@@ -1,95 +0,0 @@
-using System.Collections.Generic;
-using Yarn.Unity;
-
-namespace SLSUtilities.Narrative
-{
- public static partial class YarnFunctions
- {
- [YarnCommand("set_bool")]
- public static void Yarn_SetBool(string key, bool value)
- {
- StorySystem.Variables.boolVariables[key] = value;
- }
-
- [YarnFunction("get_bool")]
- public static bool Yarn_GetBool(string key)
- {
- return StorySystem.Variables.boolVariables.GetValueOrDefault(key, false);
- }
-
- [YarnCommand("set_int")]
- public static void Yarn_SetInt(string key, int value)
- {
- StorySystem.Variables.intVariables[key] = value;
- }
-
- [YarnCommand("modify_int")]
- public static void Yarn_ModifyInt(string key, int modification)
- {
- int currentValue = StorySystem.Variables.intVariables.GetValueOrDefault(key, 0);
- StorySystem.Variables.intVariables[key] = currentValue + modification;
- }
-
- [YarnFunction("get_int")]
- public static int Yarn_GetInt(string key)
- {
- return StorySystem.Variables.intVariables.GetValueOrDefault(key, 0);
- }
-
- [YarnCommand("set_float")]
- public static void Yarn_SetFloat(string key, float value)
- {
- StorySystem.Variables.floatVariables[key] = value;
- }
-
- [YarnCommand("modify_float")]
- public static void Yarn_ModifyFloat(string key, float modification)
- {
- float currentValue = StorySystem.Variables.floatVariables.GetValueOrDefault(key, 0f);
- StorySystem.Variables.floatVariables[key] = currentValue + modification;
- }
-
- [YarnFunction("get_float")]
- public static float Yarn_GetFloat(string key)
- {
- return StorySystem.Variables.floatVariables.GetValueOrDefault(key, 0f);
- }
-
- [YarnCommand("set_string")]
- public static void Yarn_SetString(string key, string value)
- {
- StorySystem.Variables.stringVariables[key] = value;
- }
-
- [YarnFunction("get_string")]
- public static string Yarn_GetString(string key)
- {
- return StorySystem.Variables.stringVariables.GetValueOrDefault(key, "");
- }
- }
-
- public static partial class YarnFunctions
- {
- [YarnCommand("log")]
- public static void Log(string message, string logType)
- {
- logType = logType.ToLower();
-
- switch (logType)
- {
- case "info":
- UnityEngine.Debug.Log(message);
- break;
- case "warning":
- UnityEngine.Debug.LogWarning(message);
- break;
- case "error":
- UnityEngine.Debug.LogError(message);
- break;
- default:
- UnityEngine.Debug.Log(message);
- break;
- }
- }
- }
-}
\ No newline at end of file
diff --git a/Assets/Scripts/SLSUtilities/Narrative/Base/YarnFunctions.cs.meta b/Assets/Scripts/SLSUtilities/Narrative/Base/YarnFunctions.cs.meta
deleted file mode 100644
index cb67d7f9..00000000
--- a/Assets/Scripts/SLSUtilities/Narrative/Base/YarnFunctions.cs.meta
+++ /dev/null
@@ -1,2 +0,0 @@
-fileFormatVersion: 2
-guid: fd615694e3d8cc842a6c75bc3956a926
\ No newline at end of file
diff --git a/Assets/Scripts/Story/StoryUI/Blocks.meta b/Assets/Scripts/Story/StoryUI/Blocks.meta
deleted file mode 100644
index d9234b71..00000000
--- a/Assets/Scripts/Story/StoryUI/Blocks.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: b2c23056fb0ab4b45a8db11866018794
-folderAsset: yes
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/Scripts/Story/StoryUI/Blocks/BeatmapStatusMark.cs b/Assets/Scripts/Story/StoryUI/Blocks/BeatmapStatusMark.cs
deleted file mode 100644
index 349b514e..00000000
--- a/Assets/Scripts/Story/StoryUI/Blocks/BeatmapStatusMark.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-public class BeatmapStatusMark : MonoBehaviour
-{
- // Start is called before the first frame update
- void Start()
- {
-
- }
-
- // Update is called once per frame
- void Update()
- {
-
- }
-}
diff --git a/Assets/Scripts/Story/StoryUI/Blocks/BeatmapStatusMark.cs.meta b/Assets/Scripts/Story/StoryUI/Blocks/BeatmapStatusMark.cs.meta
deleted file mode 100644
index 5a3c0900..00000000
--- a/Assets/Scripts/Story/StoryUI/Blocks/BeatmapStatusMark.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: b547d2cc398393a46a2a4c503f128cac
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/Scripts/Story/StoryUI/DialogUI.meta b/Assets/Scripts/Story/StoryUI/DialogUI.meta
deleted file mode 100644
index 8ad1d3f4..00000000
--- a/Assets/Scripts/Story/StoryUI/DialogUI.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 8c234abdb2207c8459280e59152ba1c9
-folderAsset: yes
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/Scripts/UI/Elements/MessageBox.cs b/Assets/Scripts/UI/Elements/MessageBox.cs
index a8db9e40..f5698618 100644
--- a/Assets/Scripts/UI/Elements/MessageBox.cs
+++ b/Assets/Scripts/UI/Elements/MessageBox.cs
@@ -2,7 +2,6 @@ using System;
using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
-using I2.Loc;
using Sirenix.OdinInspector;
using SLSUtilities.WwiseAssistance;
using TMPro;
@@ -17,16 +16,16 @@ namespace Ichni.Menu.UI
{
public CanvasGroup canvasGroup;
+ [Tooltip("当该消息框结束所有消息并彻底淡出消失时触发。")]
+ public UnityEvent onAllMessagesClosed = new UnityEvent();
+
public int infoIndex;
public List infos;
public Sprite defaultIcon;
public Image iconImage;
- public Localize titleLocalize;
public TMP_Text titleText;
- public Localize contentLocalize;
public TMP_Text contentText;
- public LocalizationParamsManager parametersManager;
public Button receiveButton;
@@ -76,8 +75,8 @@ namespace Ichni.Menu.UI
infos[infoIndex].action?.Invoke();
- titleLocalize.SetTerm(infos[infoIndex].title);
- contentLocalize.SetTerm(infos[infoIndex].content);
+ if (titleText != null) titleText.text = infos[infoIndex].title;
+ if (contentText != null) contentText.text = infos[infoIndex].content;
this.iconImage.sprite = infos[infoIndex].icon != null ? infos[infoIndex].icon : defaultIcon;
infoIndex++;
@@ -95,17 +94,10 @@ namespace Ichni.Menu.UI
public partial class MessageBox
{
- public void SetParameter(string paramName, string paramValue, bool localize = false)
- {
- if (localize)
- {
- parametersManager.SetParameterValue(paramName, paramValue);
- }
- else
- {
- parametersManager.SetParameterValue(paramName, paramValue, false);
- }
- }
+ // 废弃对 I2.Loc 参数化功能的支持
+ // public void SetParameter(string paramName, string paramValue, bool localize = false)
+ // {
+ // }
}
public partial class MessageBox
@@ -136,6 +128,7 @@ namespace Ichni.Menu.UI
fadeTweener = canvasGroup.DOFade(0f, duration).OnComplete(() =>
{
canvasGroup.gameObject.SetActive(false);
+ onAllMessagesClosed?.Invoke();
});
if (ignoreTimeScale)
diff --git a/Assets/Story/Chapter0/C0_A0.yarn b/Assets/Story/Chapter0/C0_A0.yarn
index 53fc4081..c7751639 100644
--- a/Assets/Story/Chapter0/C0_A0.yarn
+++ b/Assets/Story/Chapter0/C0_A0.yarn
@@ -1,4 +1,4 @@
-// ============================================================
+// ============================================================
// Chapter 0 · Block A0
// 命名约定:C{章节}_{BlockId}_{分段}
// 入口节点:C0_A0
@@ -12,26 +12,22 @@ position: 0,0
// 变量声明(默认值;StoryVariableStorage 存有存档值时会自动覆盖)
<>
<>
-
SLS: 勇士,你终于来了。我们等待你很久了。 #line:0c2e7ae
+<>
Asahi: ……这就是那个传说中的地方吗? #line:0871a99
-
-// 条件分支:朝日是否已知晓真相(再访时触发)
-<>
- SLS: 朝日,你已经了解实情了。那就省去许多解释。 #line:036f930
- <>
-<>
- <>
-<>
+<>
===
title: C0_A0_first_meeting
position: -150,250
---
+<>
SLS: 这里曾是一场被时间掩埋的战争的终结之地。 #line:0cdce7d
SLS: 我们称之为"遗忘之地"。 #line:0fe1e57
+<>
Asahi: 为什么叫这个名字? #line:068875f
SLS: 因为死去的人希望被遗忘—— #line:04a17d7
+<>
SLS: ——而活下来的人,却永远无法忘记。 #line:03e5d89
Asahi: …… #line:0a4b2fc
@@ -41,6 +37,9 @@ Asahi: …… #line:0a4b2fc
<>
-> 暂时不告诉朝日 #line:02b0524
<>
+-> 聊聊朝日的过去 <> #line:0e8d4c1
+ Asahi: 那段记忆……我终于能开口谈了。 #line:0a3f9b7
+ <>
===
title: C0_A0_reveal
@@ -77,6 +76,7 @@ Asahi: 我已经准备好了。 #line:04617a4
title: C0_A0_end
position: 0,750
---
+<>
SLS: 无论你作何选择,这段旅途都只属于你。 #line:00bf206
SLS: 去吧,勇士。前方还有很长的路。 #line:03c5112
Asahi: 我会一直陪着你的,不管去哪里。 #line:06d2a12
diff --git a/Assets/Story/Chapter0/CharacterRegistry.asset b/Assets/Story/Chapter0/CharacterRegistry.asset
index 165f8fda..16b3af22 100644
--- a/Assets/Story/Chapter0/CharacterRegistry.asset
+++ b/Assets/Story/Chapter0/CharacterRegistry.asset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:0ef30a7b2fbb26d6e35da3aeb86037e3549f04366319bd406725f5c76d5dd583
-size 2017
+oid sha256:d7bdbba66204fad3ba0a8119895c1a00e68b963f7843cd05a2d537f35bfdb60e
+size 2297
diff --git a/Assets/Story/Chapter0/StoryData_Chapter0.asset b/Assets/Story/Chapter0/StoryData_Chapter0.asset
index 0c17cab0..ebe587a3 100644
--- a/Assets/Story/Chapter0/StoryData_Chapter0.asset
+++ b/Assets/Story/Chapter0/StoryData_Chapter0.asset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a2e541d2d13053a432720c2f266890bd1cf5a83861b2a513586c18c864c8e45b
+oid sha256:f783684cdd8f7a84fe2e6813b2d5822b0c93610170e1b7d40811606fa7980043
size 3647
diff --git a/Assets/StreamingAssets/ThemeBundles/Android/Android b/Assets/StreamingAssets/ThemeBundles/Android/Android
index 1086979c..77be6a9a 100644
Binary files a/Assets/StreamingAssets/ThemeBundles/Android/Android and b/Assets/StreamingAssets/ThemeBundles/Android/Android differ
diff --git a/Assets/StreamingAssets/ThemeBundles/Android/Android.manifest b/Assets/StreamingAssets/ThemeBundles/Android/Android.manifest
index a5c5f9ea..d66fc99c 100644
--- a/Assets/StreamingAssets/ThemeBundles/Android/Android.manifest
+++ b/Assets/StreamingAssets/ThemeBundles/Android/Android.manifest
@@ -1,6 +1,6 @@
ManifestFileVersion: 0
UnityVersion: 6000.3.7f1
-CRC: 2623424500
+CRC: 429033785
HashAppended: 0
AssetBundleManifest:
AssetBundleInfos:
diff --git a/Assets/StreamingAssets/ThemeBundles/Android/basic b/Assets/StreamingAssets/ThemeBundles/Android/basic
index dd8bfd84..f4881513 100644
Binary files a/Assets/StreamingAssets/ThemeBundles/Android/basic and b/Assets/StreamingAssets/ThemeBundles/Android/basic differ
diff --git a/Assets/StreamingAssets/ThemeBundles/Android/basic.manifest b/Assets/StreamingAssets/ThemeBundles/Android/basic.manifest
index b049feb4..3f07d656 100644
--- a/Assets/StreamingAssets/ThemeBundles/Android/basic.manifest
+++ b/Assets/StreamingAssets/ThemeBundles/Android/basic.manifest
@@ -1,16 +1,16 @@
ManifestFileVersion: 0
UnityVersion: 6000.3.7f1
-CRC: 3927326319
+CRC: 1054575820
Hashes:
AssetFileHash:
serializedVersion: 2
- Hash: 512dd2d788d66c7fe4fad82c9898ac5a
+ Hash: 007f20ee8efa9449fd672739395d8b8b
TypeTreeHash:
serializedVersion: 2
Hash: dfed41e3b38758e5f34df30221d719dc
IncrementalBuildHash:
serializedVersion: 2
- Hash: 11597e67617d09816dd570d9aea10af1
+ Hash: d5b71e5a50fcc975f61f5696454edfd0
HashAppended: 0
ClassTypes:
- Class: 1
diff --git a/Assets/StreamingAssets/ThemeBundles/Android/departure_to_multiverse b/Assets/StreamingAssets/ThemeBundles/Android/departure_to_multiverse
index 084aab9d..241d977d 100644
--- a/Assets/StreamingAssets/ThemeBundles/Android/departure_to_multiverse
+++ b/Assets/StreamingAssets/ThemeBundles/Android/departure_to_multiverse
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:0a6ed744644dd742bf4cda461c650f7f4ca9bbef06ef7ae5fedaa630763c4fdf
-size 1362798
+oid sha256:15e4245d8138aa63c6f4a9b56bb8837dd2e094dd7099b25aeb1de85b9d8aa745
+size 1362227
diff --git a/Assets/StreamingAssets/ThemeBundles/Android/departure_to_multiverse.manifest b/Assets/StreamingAssets/ThemeBundles/Android/departure_to_multiverse.manifest
index 096a71f6..2f9d6356 100644
--- a/Assets/StreamingAssets/ThemeBundles/Android/departure_to_multiverse.manifest
+++ b/Assets/StreamingAssets/ThemeBundles/Android/departure_to_multiverse.manifest
@@ -1,16 +1,16 @@
ManifestFileVersion: 0
UnityVersion: 6000.3.7f1
-CRC: 3130613331
+CRC: 3864940768
Hashes:
AssetFileHash:
serializedVersion: 2
- Hash: 0782fed7ca84aeedfdeb1c740adc5b26
+ Hash: 8b97cbc629946fe6dd535e8a6f698e0c
TypeTreeHash:
serializedVersion: 2
- Hash: 8cc3f86bb5dbc7fe3d0bf9f241837627
+ Hash: 6dc25ede816b5f1e26e55c131592f792
IncrementalBuildHash:
serializedVersion: 2
- Hash: d8a4fa251b182c13d591514f02a84c6d
+ Hash: 54ab974a222b103c89f3e0fe238ac426
HashAppended: 0
ClassTypes:
- Class: 1
@@ -37,6 +37,8 @@ ClassTypes:
Script: {fileID: 11500000, guid: 0def5156137c6d14082064fa7b5d5247, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 77ab80dc0820f9d4a8cd9fddbbc89057, type: 3}
+- Class: 114
+ Script: {fileID: 11500000, guid: 2cc178b2441bca14eb1321c83761ab6f, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 8ba3055fc57abcb41811796e6a0ed3aa, type: 3}
- Class: 114
@@ -83,6 +85,7 @@ SerializeReferenceClassIdentifiers:
- AssemblyName: Sirenix.Serialization
ClassName: Sirenix.Serialization.SerializationData
Assets:
+- Assets/ThemeBundles/DepartureToMultiverse/Prefabs/Environment/DTM_CircleSpinTrails.prefab
- Assets/ThemeBundles/DepartureToMultiverse/Prefabs/DTM_NoteVisualTap.prefab
- Assets/ThemeBundles/DepartureToMultiverse/Materials/Skybox/DTM_Skybox_Starry.mat
- Assets/ThemeBundles/DepartureToMultiverse/Prefabs/Environment/DTM_RandomGridTube.prefab
diff --git a/Assets/StreamingAssets/ThemeBundles/Android/metropolis_on_orbit.manifest b/Assets/StreamingAssets/ThemeBundles/Android/metropolis_on_orbit.manifest
index 68784dd6..9e9c5134 100644
--- a/Assets/StreamingAssets/ThemeBundles/Android/metropolis_on_orbit.manifest
+++ b/Assets/StreamingAssets/ThemeBundles/Android/metropolis_on_orbit.manifest
@@ -10,7 +10,7 @@ Hashes:
Hash: 8ab77e54d824a64c30bc20496c5f5926
IncrementalBuildHash:
serializedVersion: 2
- Hash: 7593ca8fd4ac3c250191162c1a3f3194
+ Hash: d713e609a88c186608032508763d02c3
HashAppended: 0
ClassTypes:
- Class: 1
diff --git a/Assets/StreamingAssets/ThemeBundles/Windows64/Windows64 b/Assets/StreamingAssets/ThemeBundles/Windows64/Windows64
index 1a581d1c..1a53f990 100644
Binary files a/Assets/StreamingAssets/ThemeBundles/Windows64/Windows64 and b/Assets/StreamingAssets/ThemeBundles/Windows64/Windows64 differ
diff --git a/Assets/StreamingAssets/ThemeBundles/Windows64/Windows64.manifest b/Assets/StreamingAssets/ThemeBundles/Windows64/Windows64.manifest
index 7e614bf2..17d449af 100644
--- a/Assets/StreamingAssets/ThemeBundles/Windows64/Windows64.manifest
+++ b/Assets/StreamingAssets/ThemeBundles/Windows64/Windows64.manifest
@@ -1,6 +1,6 @@
ManifestFileVersion: 0
UnityVersion: 6000.3.7f1
-CRC: 4273076075
+CRC: 3383810862
HashAppended: 0
AssetBundleManifest:
AssetBundleInfos:
diff --git a/Assets/StreamingAssets/ThemeBundles/Windows64/departure_to_multiverse b/Assets/StreamingAssets/ThemeBundles/Windows64/departure_to_multiverse
index 4df1e5b7..7f71cb71 100644
--- a/Assets/StreamingAssets/ThemeBundles/Windows64/departure_to_multiverse
+++ b/Assets/StreamingAssets/ThemeBundles/Windows64/departure_to_multiverse
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:0309ee6449212905f4813a2afb2f3e6d917e99d037c7f347232e8a7170f33659
-size 2006697
+oid sha256:fd1ad3b18b2e6a6ca6f0a62f42c67e85f4d62ebc79819eef7b4ea4b3481d2faa
+size 1413092
diff --git a/Assets/StreamingAssets/ThemeBundles/Windows64/departure_to_multiverse.manifest b/Assets/StreamingAssets/ThemeBundles/Windows64/departure_to_multiverse.manifest
index 2eb3f4ea..68c309c1 100644
--- a/Assets/StreamingAssets/ThemeBundles/Windows64/departure_to_multiverse.manifest
+++ b/Assets/StreamingAssets/ThemeBundles/Windows64/departure_to_multiverse.manifest
@@ -1,16 +1,16 @@
ManifestFileVersion: 0
UnityVersion: 6000.3.7f1
-CRC: 874269373
+CRC: 4039318435
Hashes:
AssetFileHash:
serializedVersion: 2
- Hash: 8ecfb5459953077e6f509c9dc150eec6
+ Hash: e59b40a27d3c2a868588952827b1934d
TypeTreeHash:
serializedVersion: 2
Hash: 6dc25ede816b5f1e26e55c131592f792
IncrementalBuildHash:
serializedVersion: 2
- Hash: 5c3ae75a4cdbf2e6e5fc462d0226b21b
+ Hash: 19e5914687b1150ef00de5f4923cced6
HashAppended: 0
ClassTypes:
- Class: 1
diff --git a/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Flick_HitFX.prefab b/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Flick_HitFX.prefab
index 6e5daeb9..fd60a446 100644
--- a/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Flick_HitFX.prefab
+++ b/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Flick_HitFX.prefab
@@ -108,7 +108,7 @@ ParticleSystem:
m_RotationOrder: 4
moveWithTransform: 0
moveWithCustomTransform: {fileID: 0}
- scalingMode: 1
+ scalingMode: 0
randomSeed: 0
InitialModule:
serializedVersion: 3
@@ -4816,7 +4816,7 @@ ParticleSystem:
vectorLabel1_3: W
--- !u!199 &6436623435409707789
ParticleSystemRenderer:
- serializedVersion: 6
+ serializedVersion: 7
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@@ -4832,6 +4832,11 @@ ParticleSystemRenderer:
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -4853,9 +4858,11 @@ ParticleSystemRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 2
+ m_MaskInteraction: 0
m_RenderMode: 0
m_MeshDistribution: 0
m_SortMode: 0
@@ -4887,7 +4894,6 @@ ParticleSystemRenderer:
m_MeshWeighting1: 1
m_MeshWeighting2: 1
m_MeshWeighting3: 1
- m_MaskInteraction: 0
--- !u!1 &393908652242839112
GameObject:
m_ObjectHideFlags: 0
@@ -4996,7 +5002,7 @@ ParticleSystem:
m_RotationOrder: 4
moveWithTransform: 0
moveWithCustomTransform: {fileID: 0}
- scalingMode: 1
+ scalingMode: 0
randomSeed: 0
InitialModule:
serializedVersion: 3
@@ -9740,7 +9746,7 @@ ParticleSystem:
vectorLabel1_3: W
--- !u!199 &5469123982439044343
ParticleSystemRenderer:
- serializedVersion: 6
+ serializedVersion: 7
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@@ -9756,6 +9762,11 @@ ParticleSystemRenderer:
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -9777,9 +9788,11 @@ ParticleSystemRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
+ m_MaskInteraction: 0
m_RenderMode: 1
m_MeshDistribution: 0
m_SortMode: 0
@@ -9811,7 +9824,6 @@ ParticleSystemRenderer:
m_MeshWeighting1: 1
m_MeshWeighting2: 1
m_MeshWeighting3: 1
- m_MaskInteraction: 0
--- !u!1 &987757201259740425
GameObject:
m_ObjectHideFlags: 0
@@ -9920,7 +9932,7 @@ ParticleSystem:
m_RotationOrder: 4
moveWithTransform: 0
moveWithCustomTransform: {fileID: 0}
- scalingMode: 1
+ scalingMode: 0
randomSeed: 0
InitialModule:
serializedVersion: 3
@@ -14664,7 +14676,7 @@ ParticleSystem:
vectorLabel1_3: W
--- !u!199 &7698517573709736333
ParticleSystemRenderer:
- serializedVersion: 6
+ serializedVersion: 7
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@@ -14680,6 +14692,11 @@ ParticleSystemRenderer:
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -14701,9 +14718,11 @@ ParticleSystemRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
+ m_MaskInteraction: 0
m_RenderMode: 4
m_MeshDistribution: 0
m_SortMode: 0
@@ -14735,7 +14754,6 @@ ParticleSystemRenderer:
m_MeshWeighting1: 1
m_MeshWeighting2: 1
m_MeshWeighting3: 1
- m_MaskInteraction: 0
--- !u!1 &2649872400038691757
GameObject:
m_ObjectHideFlags: 0
@@ -14844,7 +14862,7 @@ ParticleSystem:
m_RotationOrder: 4
moveWithTransform: 0
moveWithCustomTransform: {fileID: 0}
- scalingMode: 1
+ scalingMode: 0
randomSeed: 0
InitialModule:
serializedVersion: 3
@@ -19561,7 +19579,7 @@ ParticleSystem:
vectorLabel1_3: W
--- !u!199 &3804338172303829356
ParticleSystemRenderer:
- serializedVersion: 6
+ serializedVersion: 7
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@@ -19577,6 +19595,11 @@ ParticleSystemRenderer:
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -19598,9 +19621,11 @@ ParticleSystemRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 1
+ m_MaskInteraction: 0
m_RenderMode: 0
m_MeshDistribution: 0
m_SortMode: 0
@@ -19632,7 +19657,6 @@ ParticleSystemRenderer:
m_MeshWeighting1: 1
m_MeshWeighting2: 1
m_MeshWeighting3: 1
- m_MaskInteraction: 0
--- !u!1 &4315719500094685406
GameObject:
m_ObjectHideFlags: 0
@@ -19741,7 +19765,7 @@ ParticleSystem:
m_RotationOrder: 4
moveWithTransform: 0
moveWithCustomTransform: {fileID: 0}
- scalingMode: 1
+ scalingMode: 0
randomSeed: 0
InitialModule:
serializedVersion: 3
@@ -24574,7 +24598,7 @@ ParticleSystem:
vectorLabel1_3: W
--- !u!199 &3349403536436963533
ParticleSystemRenderer:
- serializedVersion: 6
+ serializedVersion: 7
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@@ -24590,6 +24614,11 @@ ParticleSystemRenderer:
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -24611,9 +24640,11 @@ ParticleSystemRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
+ m_MaskInteraction: 0
m_RenderMode: 1
m_MeshDistribution: 0
m_SortMode: 0
@@ -24645,7 +24676,6 @@ ParticleSystemRenderer:
m_MeshWeighting1: 1
m_MeshWeighting2: 1
m_MeshWeighting3: 1
- m_MaskInteraction: 0
--- !u!1 &6152325990999234384
GameObject:
m_ObjectHideFlags: 0
@@ -24754,7 +24784,7 @@ ParticleSystem:
m_RotationOrder: 4
moveWithTransform: 0
moveWithCustomTransform: {fileID: 0}
- scalingMode: 1
+ scalingMode: 0
randomSeed: 0
InitialModule:
serializedVersion: 3
@@ -29498,7 +29528,7 @@ ParticleSystem:
vectorLabel1_3: W
--- !u!199 &6804594070940386649
ParticleSystemRenderer:
- serializedVersion: 6
+ serializedVersion: 7
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@@ -29514,6 +29544,11 @@ ParticleSystemRenderer:
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -29535,9 +29570,11 @@ ParticleSystemRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
+ m_MaskInteraction: 0
m_RenderMode: 1
m_MeshDistribution: 0
m_SortMode: 0
@@ -29569,7 +29606,6 @@ ParticleSystemRenderer:
m_MeshWeighting1: 1
m_MeshWeighting2: 1
m_MeshWeighting3: 1
- m_MaskInteraction: 0
--- !u!1 &7653901243468862591
GameObject:
m_ObjectHideFlags: 0
@@ -29678,7 +29714,7 @@ ParticleSystem:
m_RotationOrder: 4
moveWithTransform: 0
moveWithCustomTransform: {fileID: 0}
- scalingMode: 1
+ scalingMode: 0
randomSeed: 0
InitialModule:
serializedVersion: 3
@@ -34511,7 +34547,7 @@ ParticleSystem:
vectorLabel1_3: W
--- !u!199 &3494879711755687896
ParticleSystemRenderer:
- serializedVersion: 6
+ serializedVersion: 7
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@@ -34527,6 +34563,11 @@ ParticleSystemRenderer:
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -34548,9 +34589,11 @@ ParticleSystemRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
+ m_MaskInteraction: 0
m_RenderMode: 1
m_MeshDistribution: 0
m_SortMode: 0
@@ -34582,7 +34625,6 @@ ParticleSystemRenderer:
m_MeshWeighting1: 1
m_MeshWeighting2: 1
m_MeshWeighting3: 1
- m_MaskInteraction: 0
--- !u!1 &7916584198410465453
GameObject:
m_ObjectHideFlags: 0
@@ -34698,7 +34740,7 @@ ParticleSystem:
m_RotationOrder: 4
moveWithTransform: 0
moveWithCustomTransform: {fileID: 0}
- scalingMode: 1
+ scalingMode: 0
randomSeed: 0
InitialModule:
serializedVersion: 3
@@ -39348,7 +39390,7 @@ ParticleSystem:
vectorLabel1_3: W
--- !u!199 &6411650891525449585
ParticleSystemRenderer:
- serializedVersion: 6
+ serializedVersion: 7
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@@ -39364,6 +39406,11 @@ ParticleSystemRenderer:
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -39385,9 +39432,11 @@ ParticleSystemRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
+ m_MaskInteraction: 0
m_RenderMode: 0
m_MeshDistribution: 0
m_SortMode: 0
@@ -39419,4 +39468,3 @@ ParticleSystemRenderer:
m_MeshWeighting1: 1
m_MeshWeighting2: 1
m_MeshWeighting3: 1
- m_MaskInteraction: 0
diff --git a/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Hold_HitFX_B.prefab b/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Hold_HitFX_B.prefab
index 39a883d0..70eaaed9 100644
--- a/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Hold_HitFX_B.prefab
+++ b/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Hold_HitFX_B.prefab
@@ -4758,7 +4758,7 @@ ParticleSystem:
vectorLabel1_3: W
--- !u!199 &9090909857404846383
ParticleSystemRenderer:
- serializedVersion: 6
+ serializedVersion: 7
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@@ -4774,6 +4774,11 @@ ParticleSystemRenderer:
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -4795,9 +4800,11 @@ ParticleSystemRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 1
+ m_MaskInteraction: 0
m_RenderMode: 1
m_MeshDistribution: 0
m_SortMode: 0
@@ -4829,7 +4836,6 @@ ParticleSystemRenderer:
m_MeshWeighting1: 1
m_MeshWeighting2: 1
m_MeshWeighting3: 1
- m_MaskInteraction: 0
--- !u!1 &2070592205952932412
GameObject:
m_ObjectHideFlags: 0
@@ -9588,7 +9594,7 @@ ParticleSystem:
vectorLabel1_3: W
--- !u!199 &9081262536151624848
ParticleSystemRenderer:
- serializedVersion: 6
+ serializedVersion: 7
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@@ -9604,6 +9610,11 @@ ParticleSystemRenderer:
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -9625,9 +9636,11 @@ ParticleSystemRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 2
+ m_MaskInteraction: 0
m_RenderMode: 0
m_MeshDistribution: 0
m_SortMode: 0
@@ -9659,7 +9672,6 @@ ParticleSystemRenderer:
m_MeshWeighting1: 1
m_MeshWeighting2: 1
m_MeshWeighting3: 1
- m_MaskInteraction: 0
--- !u!1 &2261133155526879230
GameObject:
m_ObjectHideFlags: 0
@@ -14485,7 +14497,7 @@ ParticleSystem:
vectorLabel1_3: W
--- !u!199 &6151027602389049168
ParticleSystemRenderer:
- serializedVersion: 6
+ serializedVersion: 7
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@@ -14501,6 +14513,11 @@ ParticleSystemRenderer:
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -14522,9 +14539,11 @@ ParticleSystemRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 1
+ m_MaskInteraction: 0
m_RenderMode: 0
m_MeshDistribution: 0
m_SortMode: 0
@@ -14556,7 +14575,6 @@ ParticleSystemRenderer:
m_MeshWeighting1: 1
m_MeshWeighting2: 1
m_MeshWeighting3: 1
- m_MaskInteraction: 0
--- !u!1 &2376255500188663908
GameObject:
m_ObjectHideFlags: 0
@@ -19315,7 +19333,7 @@ ParticleSystem:
vectorLabel1_3: W
--- !u!199 &1348402425390080252
ParticleSystemRenderer:
- serializedVersion: 6
+ serializedVersion: 7
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@@ -19331,6 +19349,11 @@ ParticleSystemRenderer:
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -19352,9 +19375,11 @@ ParticleSystemRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 2
+ m_MaskInteraction: 0
m_RenderMode: 0
m_MeshDistribution: 0
m_SortMode: 0
@@ -19386,7 +19411,6 @@ ParticleSystemRenderer:
m_MeshWeighting1: 1
m_MeshWeighting2: 1
m_MeshWeighting3: 1
- m_MaskInteraction: 0
--- !u!1 &2943020494385716766
GameObject:
m_ObjectHideFlags: 0
@@ -19501,7 +19525,7 @@ ParticleSystem:
m_RotationOrder: 4
moveWithTransform: 0
moveWithCustomTransform: {fileID: 0}
- scalingMode: 1
+ scalingMode: 0
randomSeed: 0
InitialModule:
serializedVersion: 3
@@ -24151,7 +24175,7 @@ ParticleSystem:
vectorLabel1_3: W
--- !u!199 &4188768693027638627
ParticleSystemRenderer:
- serializedVersion: 6
+ serializedVersion: 7
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@@ -24167,6 +24191,11 @@ ParticleSystemRenderer:
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -24188,9 +24217,11 @@ ParticleSystemRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
+ m_MaskInteraction: 0
m_RenderMode: 0
m_MeshDistribution: 0
m_SortMode: 0
@@ -24222,7 +24253,6 @@ ParticleSystemRenderer:
m_MeshWeighting1: 1
m_MeshWeighting2: 1
m_MeshWeighting3: 1
- m_MaskInteraction: 0
--- !u!1 &6573924625455929684
GameObject:
m_ObjectHideFlags: 0
@@ -28981,7 +29011,7 @@ ParticleSystem:
vectorLabel1_3: W
--- !u!199 &3563924814195315285
ParticleSystemRenderer:
- serializedVersion: 6
+ serializedVersion: 7
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@@ -28997,6 +29027,11 @@ ParticleSystemRenderer:
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -29018,9 +29053,11 @@ ParticleSystemRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 1
+ m_MaskInteraction: 0
m_RenderMode: 1
m_MeshDistribution: 0
m_SortMode: 0
@@ -29052,7 +29089,6 @@ ParticleSystemRenderer:
m_MeshWeighting1: 1
m_MeshWeighting2: 1
m_MeshWeighting3: 1
- m_MaskInteraction: 0
--- !u!1 &6651680105352939543
GameObject:
m_ObjectHideFlags: 0
@@ -33869,7 +33905,7 @@ ParticleSystem:
vectorLabel1_3: W
--- !u!199 &3958041096823129390
ParticleSystemRenderer:
- serializedVersion: 6
+ serializedVersion: 7
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@@ -33885,6 +33921,11 @@ ParticleSystemRenderer:
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -33906,9 +33947,11 @@ ParticleSystemRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 2
+ m_MaskInteraction: 0
m_RenderMode: 0
m_MeshDistribution: 0
m_SortMode: 0
@@ -33940,4 +33983,3 @@ ParticleSystemRenderer:
m_MeshWeighting1: 1
m_MeshWeighting2: 1
m_MeshWeighting3: 1
- m_MaskInteraction: 0
diff --git a/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Hold_HitFX_G.prefab b/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Hold_HitFX_G.prefab
index 9d5880f7..d1d7b767 100644
--- a/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Hold_HitFX_G.prefab
+++ b/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Hold_HitFX_G.prefab
@@ -4950,7 +4950,7 @@ ParticleSystem:
m_RotationOrder: 4
moveWithTransform: 0
moveWithCustomTransform: {fileID: 0}
- scalingMode: 1
+ scalingMode: 0
randomSeed: 0
InitialModule:
serializedVersion: 3
diff --git a/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Hold_HitFX_P.prefab b/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Hold_HitFX_P.prefab
index 52f342a6..919383ff 100644
--- a/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Hold_HitFX_P.prefab
+++ b/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Hold_HitFX_P.prefab
@@ -29255,7 +29255,7 @@ ParticleSystem:
m_RotationOrder: 4
moveWithTransform: 0
moveWithCustomTransform: {fileID: 0}
- scalingMode: 1
+ scalingMode: 0
randomSeed: 0
InitialModule:
serializedVersion: 3
diff --git a/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Stay_HitFX.prefab b/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Stay_HitFX.prefab
index a9da753e..59efc4a1 100644
--- a/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Stay_HitFX.prefab
+++ b/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Stay_HitFX.prefab
@@ -108,7 +108,7 @@ ParticleSystem:
m_RotationOrder: 4
moveWithTransform: 0
moveWithCustomTransform: {fileID: 0}
- scalingMode: 1
+ scalingMode: 0
randomSeed: 0
InitialModule:
serializedVersion: 3
@@ -4816,7 +4816,7 @@ ParticleSystem:
vectorLabel1_3: W
--- !u!199 &5640736116712977215
ParticleSystemRenderer:
- serializedVersion: 6
+ serializedVersion: 7
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@@ -4832,6 +4832,11 @@ ParticleSystemRenderer:
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -4853,9 +4858,11 @@ ParticleSystemRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 2
+ m_MaskInteraction: 0
m_RenderMode: 0
m_MeshDistribution: 0
m_SortMode: 0
@@ -4887,7 +4894,6 @@ ParticleSystemRenderer:
m_MeshWeighting1: 1
m_MeshWeighting2: 1
m_MeshWeighting3: 1
- m_MaskInteraction: 0
--- !u!1 &5249990677744981946
GameObject:
m_ObjectHideFlags: 0
@@ -4999,7 +5005,7 @@ ParticleSystem:
m_RotationOrder: 4
moveWithTransform: 0
moveWithCustomTransform: {fileID: 0}
- scalingMode: 1
+ scalingMode: 0
randomSeed: 0
InitialModule:
serializedVersion: 3
@@ -9649,7 +9655,7 @@ ParticleSystem:
vectorLabel1_3: W
--- !u!199 &4138720391616017682
ParticleSystemRenderer:
- serializedVersion: 6
+ serializedVersion: 7
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@@ -9665,6 +9671,11 @@ ParticleSystemRenderer:
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -9686,9 +9697,11 @@ ParticleSystemRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
+ m_MaskInteraction: 0
m_RenderMode: 0
m_MeshDistribution: 0
m_SortMode: 0
@@ -9720,7 +9733,6 @@ ParticleSystemRenderer:
m_MeshWeighting1: 1
m_MeshWeighting2: 1
m_MeshWeighting3: 1
- m_MaskInteraction: 0
--- !u!1 &5931878544904699336
GameObject:
m_ObjectHideFlags: 0
@@ -9829,7 +9841,7 @@ ParticleSystem:
m_RotationOrder: 4
moveWithTransform: 0
moveWithCustomTransform: {fileID: 0}
- scalingMode: 1
+ scalingMode: 0
randomSeed: 0
InitialModule:
serializedVersion: 3
@@ -14546,7 +14558,7 @@ ParticleSystem:
vectorLabel1_3: W
--- !u!199 &5870414974609834262
ParticleSystemRenderer:
- serializedVersion: 6
+ serializedVersion: 7
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@@ -14562,6 +14574,11 @@ ParticleSystemRenderer:
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -14583,9 +14600,11 @@ ParticleSystemRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 1
+ m_MaskInteraction: 0
m_RenderMode: 0
m_MeshDistribution: 0
m_SortMode: 0
@@ -14617,7 +14636,6 @@ ParticleSystemRenderer:
m_MeshWeighting1: 1
m_MeshWeighting2: 1
m_MeshWeighting3: 1
- m_MaskInteraction: 0
--- !u!1 &8633588085551914740
GameObject:
m_ObjectHideFlags: 0
@@ -14726,7 +14744,7 @@ ParticleSystem:
m_RotationOrder: 4
moveWithTransform: 0
moveWithCustomTransform: {fileID: 0}
- scalingMode: 1
+ scalingMode: 0
randomSeed: 0
InitialModule:
serializedVersion: 3
@@ -19452,7 +19470,7 @@ ParticleSystem:
vectorLabel1_3: W
--- !u!199 &1602668134873900334
ParticleSystemRenderer:
- serializedVersion: 6
+ serializedVersion: 7
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@@ -19468,6 +19486,11 @@ ParticleSystemRenderer:
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -19489,9 +19512,11 @@ ParticleSystemRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
+ m_MaskInteraction: 0
m_RenderMode: 4
m_MeshDistribution: 0
m_SortMode: 0
@@ -19523,4 +19548,3 @@ ParticleSystemRenderer:
m_MeshWeighting1: 1
m_MeshWeighting2: 1
m_MeshWeighting3: 1
- m_MaskInteraction: 0
diff --git a/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Tap_HiEffect_B.prefab b/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Tap_HiEffect_B.prefab
index 6c700c87..99d7036c 100644
--- a/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Tap_HiEffect_B.prefab
+++ b/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Tap_HiEffect_B.prefab
@@ -108,7 +108,7 @@ ParticleSystem:
m_RotationOrder: 4
moveWithTransform: 0
moveWithCustomTransform: {fileID: 0}
- scalingMode: 1
+ scalingMode: 0
randomSeed: 0
InitialModule:
serializedVersion: 3
@@ -4825,7 +4825,7 @@ ParticleSystem:
vectorLabel1_3: W
--- !u!199 &4109529955070703249
ParticleSystemRenderer:
- serializedVersion: 6
+ serializedVersion: 7
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@@ -4841,6 +4841,11 @@ ParticleSystemRenderer:
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -4862,9 +4867,11 @@ ParticleSystemRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 1
+ m_MaskInteraction: 0
m_RenderMode: 0
m_MeshDistribution: 0
m_SortMode: 0
@@ -4896,7 +4903,6 @@ ParticleSystemRenderer:
m_MeshWeighting1: 1
m_MeshWeighting2: 1
m_MeshWeighting3: 1
- m_MaskInteraction: 0
--- !u!1 &5480151176008203866
GameObject:
m_ObjectHideFlags: 0
@@ -5005,7 +5011,7 @@ ParticleSystem:
m_RotationOrder: 4
moveWithTransform: 0
moveWithCustomTransform: {fileID: 0}
- scalingMode: 1
+ scalingMode: 0
randomSeed: 0
InitialModule:
serializedVersion: 3
@@ -9731,7 +9737,7 @@ ParticleSystem:
vectorLabel1_3: W
--- !u!199 &5640841965484054353
ParticleSystemRenderer:
- serializedVersion: 6
+ serializedVersion: 7
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@@ -9747,6 +9753,11 @@ ParticleSystemRenderer:
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -9768,9 +9779,11 @@ ParticleSystemRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
+ m_MaskInteraction: 0
m_RenderMode: 4
m_MeshDistribution: 0
m_SortMode: 0
@@ -9802,7 +9815,6 @@ ParticleSystemRenderer:
m_MeshWeighting1: 1
m_MeshWeighting2: 1
m_MeshWeighting3: 1
- m_MaskInteraction: 0
--- !u!1 &8754511166712621810
GameObject:
m_ObjectHideFlags: 0
@@ -9913,7 +9925,7 @@ ParticleSystem:
m_RotationOrder: 4
moveWithTransform: 0
moveWithCustomTransform: {fileID: 0}
- scalingMode: 1
+ scalingMode: 0
randomSeed: 0
InitialModule:
serializedVersion: 3
@@ -14563,7 +14575,7 @@ ParticleSystem:
vectorLabel1_3: W
--- !u!199 &1014060429300395170
ParticleSystemRenderer:
- serializedVersion: 6
+ serializedVersion: 7
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@@ -14579,6 +14591,11 @@ ParticleSystemRenderer:
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -14600,9 +14617,11 @@ ParticleSystemRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
+ m_MaskInteraction: 0
m_RenderMode: 0
m_MeshDistribution: 0
m_SortMode: 0
@@ -14634,4 +14653,3 @@ ParticleSystemRenderer:
m_MeshWeighting1: 1
m_MeshWeighting2: 1
m_MeshWeighting3: 1
- m_MaskInteraction: 0
diff --git a/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Tap_HitEffect_G.prefab b/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Tap_HitEffect_G.prefab
index 77c37853..5f205909 100644
--- a/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Tap_HitEffect_G.prefab
+++ b/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Tap_HitEffect_G.prefab
@@ -108,7 +108,7 @@ ParticleSystem:
m_RotationOrder: 4
moveWithTransform: 0
moveWithCustomTransform: {fileID: 0}
- scalingMode: 1
+ scalingMode: 0
randomSeed: 0
InitialModule:
serializedVersion: 3
@@ -4825,7 +4825,7 @@ ParticleSystem:
vectorLabel1_3: W
--- !u!199 &3594631519425132185
ParticleSystemRenderer:
- serializedVersion: 6
+ serializedVersion: 7
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@@ -4841,6 +4841,11 @@ ParticleSystemRenderer:
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -4862,9 +4867,11 @@ ParticleSystemRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 1
+ m_MaskInteraction: 0
m_RenderMode: 0
m_MeshDistribution: 0
m_SortMode: 0
@@ -4896,7 +4903,6 @@ ParticleSystemRenderer:
m_MeshWeighting1: 1
m_MeshWeighting2: 1
m_MeshWeighting3: 1
- m_MaskInteraction: 0
--- !u!1 &3240066047640847786
GameObject:
m_ObjectHideFlags: 0
@@ -5005,7 +5011,7 @@ ParticleSystem:
m_RotationOrder: 4
moveWithTransform: 0
moveWithCustomTransform: {fileID: 0}
- scalingMode: 1
+ scalingMode: 0
randomSeed: 0
InitialModule:
serializedVersion: 3
@@ -9749,7 +9755,7 @@ ParticleSystem:
vectorLabel1_3: W
--- !u!199 &3141689248629385762
ParticleSystemRenderer:
- serializedVersion: 6
+ serializedVersion: 7
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@@ -9765,6 +9771,11 @@ ParticleSystemRenderer:
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -9786,9 +9797,11 @@ ParticleSystemRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
+ m_MaskInteraction: 0
m_RenderMode: 4
m_MeshDistribution: 0
m_SortMode: 0
@@ -9820,7 +9833,6 @@ ParticleSystemRenderer:
m_MeshWeighting1: 1
m_MeshWeighting2: 1
m_MeshWeighting3: 1
- m_MaskInteraction: 0
--- !u!1 &7671123070809976812
GameObject:
m_ObjectHideFlags: 0
@@ -9932,7 +9944,7 @@ ParticleSystem:
m_RotationOrder: 4
moveWithTransform: 0
moveWithCustomTransform: {fileID: 0}
- scalingMode: 1
+ scalingMode: 0
randomSeed: 0
InitialModule:
serializedVersion: 3
@@ -14582,7 +14594,7 @@ ParticleSystem:
vectorLabel1_3: W
--- !u!199 &8700396741641032723
ParticleSystemRenderer:
- serializedVersion: 6
+ serializedVersion: 7
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@@ -14598,6 +14610,11 @@ ParticleSystemRenderer:
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -14619,9 +14636,11 @@ ParticleSystemRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
+ m_MaskInteraction: 0
m_RenderMode: 0
m_MeshDistribution: 0
m_SortMode: 0
@@ -14653,7 +14672,6 @@ ParticleSystemRenderer:
m_MeshWeighting1: 1
m_MeshWeighting2: 1
m_MeshWeighting3: 1
- m_MaskInteraction: 0
--- !u!1 &7986537471941685033
GameObject:
m_ObjectHideFlags: 0
@@ -14762,7 +14780,7 @@ ParticleSystem:
m_RotationOrder: 4
moveWithTransform: 0
moveWithCustomTransform: {fileID: 0}
- scalingMode: 1
+ scalingMode: 0
randomSeed: 0
InitialModule:
serializedVersion: 3
@@ -19470,7 +19488,7 @@ ParticleSystem:
vectorLabel1_3: W
--- !u!199 &1832114136647296338
ParticleSystemRenderer:
- serializedVersion: 6
+ serializedVersion: 7
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@@ -19486,6 +19504,11 @@ ParticleSystemRenderer:
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -19507,9 +19530,11 @@ ParticleSystemRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 2
+ m_MaskInteraction: 0
m_RenderMode: 0
m_MeshDistribution: 0
m_SortMode: 0
@@ -19541,4 +19566,3 @@ ParticleSystemRenderer:
m_MeshWeighting1: 1
m_MeshWeighting2: 1
m_MeshWeighting3: 1
- m_MaskInteraction: 0
diff --git a/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Tap_HitEffect_P.prefab b/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Tap_HitEffect_P.prefab
index b71f8012..c0e0b355 100644
--- a/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Tap_HitEffect_P.prefab
+++ b/Assets/ThemeBundles/DepartureToMultiverse/Prefabs/NoteEffects/Tap_HitEffect_P.prefab
@@ -108,7 +108,7 @@ ParticleSystem:
m_RotationOrder: 4
moveWithTransform: 0
moveWithCustomTransform: {fileID: 0}
- scalingMode: 1
+ scalingMode: 0
randomSeed: 0
InitialModule:
serializedVersion: 3
@@ -5025,7 +5025,7 @@ ParticleSystem:
m_RotationOrder: 4
moveWithTransform: 0
moveWithCustomTransform: {fileID: 0}
- scalingMode: 1
+ scalingMode: 0
randomSeed: 0
InitialModule:
serializedVersion: 3
@@ -9861,7 +9861,7 @@ ParticleSystem:
m_RotationOrder: 4
moveWithTransform: 0
moveWithCustomTransform: {fileID: 0}
- scalingMode: 1
+ scalingMode: 0
randomSeed: 0
InitialModule:
serializedVersion: 3
@@ -14755,7 +14755,7 @@ ParticleSystem:
m_RotationOrder: 4
moveWithTransform: 0
moveWithCustomTransform: {fileID: 0}
- scalingMode: 1
+ scalingMode: 0
randomSeed: 0
InitialModule:
serializedVersion: 3
@@ -19676,7 +19676,7 @@ ParticleSystem:
m_RotationOrder: 4
moveWithTransform: 0
moveWithCustomTransform: {fileID: 0}
- scalingMode: 1
+ scalingMode: 0
randomSeed: 0
InitialModule:
serializedVersion: 3
diff --git a/ProjectSettings/Packages/dev.yarnspinner/Assembly-CSharp-generated.ysls.json b/ProjectSettings/Packages/dev.yarnspinner/Assembly-CSharp-generated.ysls.json
new file mode 100644
index 00000000..6a045c0a
--- /dev/null
+++ b/ProjectSettings/Packages/dev.yarnspinner/Assembly-CSharp-generated.ysls.json
@@ -0,0 +1 @@
+{"version":2,"commands":[{"yarnName":"log","definitionName":"global::Ichni.Story.YarnFunctions.GeneralFunctions.Log","fileName":"D:\\Projects\\ichni Official\\Assets/Scripts/NewStorySystem/YarnFunctions/GeneralFunctions.cs","language":"csharp","async":false,"containsErrors":false,"location":{"start":{"line":7,"character":8},"end":{"line":27,"character":9}},"parameters":[{"name":"message","isParamsArray":false,"type":"string"},{"name":"logType","isParamsArray":false,"type":"string"}]},{"yarnName":"move_portrait","definitionName":"global::Ichni.Story.YarnFunctions.PortraitAnimationCommands.MovePortrait","fileName":"D:\\Projects\\ichni Official\\Assets/Scripts/NewStorySystem/YarnFunctions/PortraitAnimationCommands.cs","documentation":"\u5e73\u6ed1\u79fb\u52a8\u89d2\u8272\u7acb\u7ed8\u5230\u76ee\u6807\u4f4d\u7f6e\u3002 \u683c\u5f0f: <<move_portrait characterId x y duration>>","language":"csharp","async":false,"containsErrors":false,"location":{"start":{"line":21,"character":8},"end":{"line":26,"character":9}},"parameters":[{"name":"characterId","documentation":"\u89d2\u8272\u6807\u8bc6 ID","isParamsArray":false,"type":"string"},{"name":"x","documentation":"\u76ee\u6807 X \u5750\u6807 [-100, 100]","isParamsArray":false,"type":"number"},{"name":"y","documentation":"\u76ee\u6807 Y \u5750\u6807 [-100, 100]","isParamsArray":false,"type":"number"},{"name":"duration","documentation":"\u52a8\u753b\u6301\u7eed\u65f6\u95f4\uff08\u79d2\uff09","isParamsArray":false,"type":"number"}]},{"yarnName":"jump_portrait","definitionName":"global::Ichni.Story.YarnFunctions.PortraitAnimationCommands.JumpPortrait","fileName":"D:\\Projects\\ichni Official\\Assets/Scripts/NewStorySystem/YarnFunctions/PortraitAnimationCommands.cs","documentation":"\u8ba9\u89d2\u8272\u7acb\u7ed8\u539f\u5730\u8df3\u8dc3\u3002 \u683c\u5f0f: <<jump_portrait characterId power numJumps duration>>","language":"csharp","async":false,"containsErrors":false,"location":{"start":{"line":36,"character":8},"end":{"line":41,"character":9}},"parameters":[{"name":"characterId","documentation":"\u89d2\u8272\u6807\u8bc6 ID","isParamsArray":false,"type":"string"},{"name":"power","documentation":"\u8df3\u8dc3\u9ad8\u5ea6\uff08\u4f7f\u7528\u4e0e\u5750\u6807\u57df\u76f8\u540c\u7684\u5f52\u4e00\u5316\u5c3a\u5ea6\uff0c\u5982 10 \u8868\u793a 10% \u9ad8\u5ea6\uff09","isParamsArray":false,"type":"number"},{"name":"numJumps","documentation":"\u8df3\u8dc3\u6b21\u6570","isParamsArray":false,"type":"number"},{"name":"duration","documentation":"\u52a8\u753b\u603b\u6301\u7eed\u65f6\u95f4\uff08\u79d2\uff09","isParamsArray":false,"type":"number"}]},{"yarnName":"shake_portrait","definitionName":"global::Ichni.Story.YarnFunctions.PortraitAnimationCommands.ShakePortrait","fileName":"D:\\Projects\\ichni Official\\Assets/Scripts/NewStorySystem/YarnFunctions/PortraitAnimationCommands.cs","documentation":"\u8ba9\u89d2\u8272\u7acb\u7ed8\u4ea7\u751f\u5de6\u53f3\u9707\u52a8\u6548\u679c\u3002 \u683c\u5f0f: <<shake_portrait characterId duration strength vibrato>>","language":"csharp","async":false,"containsErrors":false,"location":{"start":{"line":51,"character":8},"end":{"line":56,"character":9}},"parameters":[{"name":"characterId","documentation":"\u89d2\u8272\u6807\u8bc6 ID","isParamsArray":false,"type":"string"},{"name":"duration","documentation":"\u9707\u52a8\u6301\u7eed\u65f6\u95f4\uff08\u79d2\uff09","isParamsArray":false,"type":"number"},{"name":"strength","documentation":"\u9707\u52a8\u5e45\u5ea6\uff08\u4f7f\u7528\u4e0e\u5750\u6807\u57df\u76f8\u540c\u7684\u5f52\u4e00\u5316\u5c3a\u5ea6\uff09","isParamsArray":false,"type":"number"},{"name":"vibrato","documentation":"\u9707\u52a8\u9891\u7387","isParamsArray":false,"type":"number"}]},{"yarnName":"set_portrait","definitionName":"global::Ichni.Story.YarnFunctions.PortraitCommands.SetPortrait","fileName":"D:\\Projects\\ichni Official\\Assets/Scripts/NewStorySystem/YarnFunctions/PortraitCommands.cs","documentation":"\u6700\u57fa\u7840\u3001\u6700\u5168\u9762\u7684\u7acb\u7ed8\u6307\u4ee4\uff1a\u8bbe\u7f6e\u6307\u5b9a\u89d2\u8272\u7684\u5750\u6807\u548c\u8868\u60c5\u3002 \u82e5\u89d2\u8272\u4e0d\u5728\u53f0\u4e0a\uff0c\u4f1a\u81ea\u52a8\u4ee5\u6307\u5b9a\u7684\u8868\u60c5\u548c\u4f4d\u7f6e\u5b9e\u4f8b\u5316\u3002 \u683c\u5f0f: <<set_portrait characterId x y [emotion]>>","language":"csharp","async":false,"containsErrors":false,"location":{"start":{"line":25,"character":8},"end":{"line":33,"character":9}},"parameters":[{"name":"characterId","documentation":"\u89d2\u8272\u6807\u8bc6 ID\u3002","isParamsArray":false,"type":"string"},{"name":"x","documentation":"\u5f52\u4e00\u5316 X \u5750\u6807 [-100, 100]","isParamsArray":false,"type":"number"},{"name":"y","documentation":"\u5f52\u4e00\u5316 Y \u5750\u6807 [-100, 100]","isParamsArray":false,"type":"number"},{"name":"emotion","documentation":"\u8868\u60c5\u540d\u79f0\u3002\u5982\u679c\u4e0d\u586b\uff0c\u9ed8\u8ba4\u4fdd\u6301\u4e0d\u53d8\u6216\u521d\u59cb\u5316\u4e3a \"normal\"","isParamsArray":false,"type":"string"}]},{"yarnName":"set_portrait_current","definitionName":"global::Ichni.Story.YarnFunctions.PortraitCommands.SetPortraitCurrent","fileName":"D:\\Projects\\ichni Official\\Assets/Scripts/NewStorySystem/YarnFunctions/PortraitCommands.cs","documentation":"\u8bbe\u7f6e\u5f53\u524d\u8bf4\u8bdd\u89d2\u8272\u7684\u5750\u6807\u548c\u8868\u60c5\u3002 \u683c\u5f0f: <<set_portrait_current x y [emotion]>>","language":"csharp","async":false,"containsErrors":false,"location":{"start":{"line":39,"character":8},"end":{"line":52,"character":9}},"parameters":[{"name":"x","isParamsArray":false,"type":"number"},{"name":"y","isParamsArray":false,"type":"number"},{"name":"emotion","isParamsArray":false,"type":"string"}]},{"yarnName":"set_portrait_position","definitionName":"global::Ichni.Story.YarnFunctions.PortraitCommands.SetPortraitPosition","fileName":"D:\\Projects\\ichni Official\\Assets/Scripts/NewStorySystem/YarnFunctions/PortraitCommands.cs","documentation":"\u4ec5\u8bbe\u7f6e\u6216\u79fb\u52a8\u6307\u5b9a\u89d2\u8272\u7684\u5750\u6807\uff08\u4e0d\u6539\u53d8\u5f53\u524d\u8868\u60c5\uff09\u3002 \u683c\u5f0f: <<set_portrait_position characterId x y>>","language":"csharp","async":false,"containsErrors":false,"location":{"start":{"line":58,"character":8},"end":{"line":63,"character":9}},"parameters":[{"name":"characterId","isParamsArray":false,"type":"string"},{"name":"x","isParamsArray":false,"type":"number"},{"name":"y","isParamsArray":false,"type":"number"}]},{"yarnName":"set_portrait_emotion","definitionName":"global::Ichni.Story.YarnFunctions.PortraitCommands.SetPortraitEmotion","fileName":"D:\\Projects\\ichni Official\\Assets/Scripts/NewStorySystem/YarnFunctions/PortraitCommands.cs","documentation":"\u4ec5\u6539\u53d8\u6307\u5b9a\u89d2\u8272\u7684\u8868\u60c5\uff08\u89d2\u8272\u5fc5\u987b\u5df2\u7ecf\u4e0a\u53f0\uff09\u3002 \u683c\u5f0f: <<set_portrait_emotion characterId emotion>>","language":"csharp","async":false,"containsErrors":false,"location":{"start":{"line":69,"character":8},"end":{"line":75,"character":9}},"parameters":[{"name":"characterId","isParamsArray":false,"type":"string"},{"name":"emotion","isParamsArray":false,"type":"string"}]},{"yarnName":"hide_portrait","definitionName":"global::Ichni.Story.YarnFunctions.PortraitCommands.HidePortrait","fileName":"D:\\Projects\\ichni Official\\Assets/Scripts/NewStorySystem/YarnFunctions/PortraitCommands.cs","documentation":"\u9690\u85cf\u6307\u5b9a\u89d2\u8272\u7684\u7acb\u7ed8\u3002 \u683c\u5f0f: <<hide_portrait characterId>>","language":"csharp","async":false,"containsErrors":false,"location":{"start":{"line":81,"character":8},"end":{"line":87,"character":9}},"parameters":[{"name":"characterId","isParamsArray":false,"type":"string"}]},{"yarnName":"hide_all_portraits","definitionName":"global::Ichni.Story.YarnFunctions.PortraitCommands.HideAllPortraits","fileName":"D:\\Projects\\ichni Official\\Assets/Scripts/NewStorySystem/YarnFunctions/PortraitCommands.cs","documentation":"\u9690\u85cf\u5f53\u524d\u6240\u6709\u5728\u53f0\u4e0a\u7684\u7acb\u7ed8\u3002 \u683c\u5f0f: <<hide_all_portraits>>","language":"csharp","async":false,"containsErrors":false,"location":{"start":{"line":93,"character":8},"end":{"line":99,"character":9}},"parameters":[]},{"yarnName":"unlock_song","definitionName":"global::Ichni.Story.YarnFunctions.StoryTreeCommands.UnlockSong","fileName":"D:\\Projects\\ichni Official\\Assets/Scripts/NewStorySystem/YarnFunctions/StoryTreeCommands.cs","documentation":"\u89e3\u9501\u4e00\u9996\u65b0\u6b4c\u66f2\uff0c\u5e76\u5728\u5f53\u524d\u8fd9\u6bb5\u5bf9\u8bdd\u7ed3\u675f\uff08\u5bf9\u8bdd UI \u6de1\u51fa\uff09\u540e\uff0c\u5f39\u51fa MessageBox \u63d0\u793a\u3002 \u683c\u5f0f: <<unlock_song songUnlockKey>>","language":"csharp","async":false,"containsErrors":false,"location":{"start":{"line":20,"character":8},"end":{"line":60,"character":9}},"parameters":[{"name":"songUnlockKey","documentation":"\u8981\u89e3\u9501\u7684\u6b4c\u66f2\u5bc6\u94a5/ID","isParamsArray":false,"type":"string"}]},{"yarnName":"show_message","definitionName":"global::Ichni.Story.YarnFunctions.StoryTreeCommands.ShowMessage","fileName":"D:\\Projects\\ichni Official\\Assets/Scripts/NewStorySystem/YarnFunctions/StoryTreeCommands.cs","documentation":"\u5728\u5bf9\u8bdd\u7ed3\u675f\u540e\uff0c\u5f39\u51fa\u4e00\u4e2a\u81ea\u5b9a\u4e49 MessageBox \u63d0\u793a\u3002 \u4f1a\u5c1d\u8bd5\u4f7f\u7528 Unity Localization \u8fdb\u884c\u7ffb\u8bd1\uff0c\u5982\u679c\u627e\u4e0d\u5230\u5bf9\u5e94\u6761\u76ee\u5219\u56de\u9000\u663e\u793a\u539f\u6587\u672c\uff08Key\uff09\u3002 \u683c\u5f0f: <<show_message titleKey contentKey [tableName]>>","language":"csharp","async":false,"containsErrors":false,"location":{"start":{"line":70,"character":8},"end":{"line":80,"character":9}},"parameters":[{"name":"titleKey","documentation":"\u6807\u9898\u6587\u672c\u6216\u672c\u5730\u5316\u952e","isParamsArray":false,"type":"string"},{"name":"contentKey","documentation":"\u6b63\u6587\u6587\u672c\u6216\u672c\u5730\u5316\u952e","isParamsArray":false,"type":"string"},{"name":"tableName","documentation":"Unity Localization \u4e2d\u7684 String Table \u540d\u79f0","defaultValue":"Message","isParamsArray":false,"type":"string"}]},{"yarnName":"set_bool","definitionName":"global::Ichni.Story.YarnFunctions.VariableCommands.SetBool","fileName":"D:\\Projects\\ichni Official\\Assets/Scripts/NewStorySystem/YarnFunctions/VariableFunctions.cs","language":"csharp","async":false,"containsErrors":false,"location":{"start":{"line":13,"character":8},"end":{"line":17,"character":9}},"parameters":[{"name":"key","isParamsArray":false,"type":"string"},{"name":"value","isParamsArray":false,"type":"bool"}]},{"yarnName":"set_int","definitionName":"global::Ichni.Story.YarnFunctions.VariableCommands.SetInt","fileName":"D:\\Projects\\ichni Official\\Assets/Scripts/NewStorySystem/YarnFunctions/VariableFunctions.cs","language":"csharp","async":false,"containsErrors":false,"location":{"start":{"line":25,"character":8},"end":{"line":29,"character":9}},"parameters":[{"name":"key","isParamsArray":false,"type":"string"},{"name":"value","isParamsArray":false,"type":"number"}]},{"yarnName":"modify_int","definitionName":"global::Ichni.Story.YarnFunctions.VariableCommands.ModifyInt","fileName":"D:\\Projects\\ichni Official\\Assets/Scripts/NewStorySystem/YarnFunctions/VariableFunctions.cs","language":"csharp","async":false,"containsErrors":false,"location":{"start":{"line":31,"character":8},"end":{"line":36,"character":9}},"parameters":[{"name":"key","isParamsArray":false,"type":"string"},{"name":"modification","isParamsArray":false,"type":"number"}]},{"yarnName":"set_float","definitionName":"global::Ichni.Story.YarnFunctions.VariableCommands.SetFloat","fileName":"D:\\Projects\\ichni Official\\Assets/Scripts/NewStorySystem/YarnFunctions/VariableFunctions.cs","language":"csharp","async":false,"containsErrors":false,"location":{"start":{"line":44,"character":8},"end":{"line":48,"character":9}},"parameters":[{"name":"key","isParamsArray":false,"type":"string"},{"name":"value","isParamsArray":false,"type":"number"}]},{"yarnName":"modify_float","definitionName":"global::Ichni.Story.YarnFunctions.VariableCommands.ModifyFloat","fileName":"D:\\Projects\\ichni Official\\Assets/Scripts/NewStorySystem/YarnFunctions/VariableFunctions.cs","language":"csharp","async":false,"containsErrors":false,"location":{"start":{"line":50,"character":8},"end":{"line":55,"character":9}},"parameters":[{"name":"key","isParamsArray":false,"type":"string"},{"name":"modification","isParamsArray":false,"type":"number"}]},{"yarnName":"set_string","definitionName":"global::Ichni.Story.YarnFunctions.VariableCommands.SetString","fileName":"D:\\Projects\\ichni Official\\Assets/Scripts/NewStorySystem/YarnFunctions/VariableFunctions.cs","language":"csharp","async":false,"containsErrors":false,"location":{"start":{"line":63,"character":8},"end":{"line":67,"character":9}},"parameters":[{"name":"key","isParamsArray":false,"type":"string"},{"name":"value","isParamsArray":false,"type":"string"}]}],"functions":[{"yarnName":"get_bool","definitionName":"global::Ichni.Story.YarnFunctions.VariableCommands.GetBool","fileName":"D:\\Projects\\ichni Official\\Assets/Scripts/NewStorySystem/YarnFunctions/VariableFunctions.cs","language":"csharp","async":false,"containsErrors":false,"location":{"start":{"line":19,"character":8},"end":{"line":23,"character":9}},"parameters":[{"name":"key","isParamsArray":false,"type":"string"}],"return":{"type":"bool"}},{"yarnName":"get_int","definitionName":"global::Ichni.Story.YarnFunctions.VariableCommands.GetInt","fileName":"D:\\Projects\\ichni Official\\Assets/Scripts/NewStorySystem/YarnFunctions/VariableFunctions.cs","language":"csharp","async":false,"containsErrors":false,"location":{"start":{"line":38,"character":8},"end":{"line":42,"character":9}},"parameters":[{"name":"key","isParamsArray":false,"type":"string"}],"return":{"type":"number"}},{"yarnName":"get_float","definitionName":"global::Ichni.Story.YarnFunctions.VariableCommands.GetFloat","fileName":"D:\\Projects\\ichni Official\\Assets/Scripts/NewStorySystem/YarnFunctions/VariableFunctions.cs","language":"csharp","async":false,"containsErrors":false,"location":{"start":{"line":57,"character":8},"end":{"line":61,"character":9}},"parameters":[{"name":"key","isParamsArray":false,"type":"string"}],"return":{"type":"number"}},{"yarnName":"get_string","definitionName":"global::Ichni.Story.YarnFunctions.VariableCommands.GetString","fileName":"D:\\Projects\\ichni Official\\Assets/Scripts/NewStorySystem/YarnFunctions/VariableFunctions.cs","language":"csharp","async":false,"containsErrors":false,"location":{"start":{"line":69,"character":8},"end":{"line":73,"character":9}},"parameters":[{"name":"key","isParamsArray":false,"type":"string"}],"return":{"type":"string"}}]}
\ No newline at end of file
diff --git a/UserSettings/Layouts/CurrentMaximizeLayout.dwlt b/UserSettings/Layouts/CurrentMaximizeLayout.dwlt
index 174f3f0f..c0dcbb2e 100644
--- a/UserSettings/Layouts/CurrentMaximizeLayout.dwlt
+++ b/UserSettings/Layouts/CurrentMaximizeLayout.dwlt
@@ -23,7 +23,7 @@ MonoBehaviour:
m_MinSize: {x: 300, y: 112}
m_MaxSize: {x: 24288, y: 16192}
vertical: 1
- controlID: 342
+ controlID: 56
draggingID: 0
--- !u!114 &2
MonoBehaviour:
@@ -47,10 +47,10 @@ MonoBehaviour:
m_TextWithWhitespace: "Game\u200B"
m_Pos:
serializedVersion: 2
- x: 298.6667
+ x: 271.33334
y: 78.66667
- width: 894.66675
- height: 544.6667
+ width: 922
+ height: 487.3333
m_SerializedDataModeController:
m_DataMode: 0
m_PreferredDataMode: 0
@@ -72,7 +72,7 @@ MonoBehaviour:
m_ShowGizmos: 0
m_TargetDisplay: 0
m_ClearColor: {r: 0, g: 0, b: 0, a: 0}
- m_TargetSize: {x: 2732, y: 2048}
+ m_TargetSize: {x: 1920, y: 1080}
m_TextureFilterMode: 0
m_TextureHideFlags: 61
m_RenderIMGUI: 1
@@ -81,16 +81,16 @@ MonoBehaviour:
m_VSyncEnabled: 0
m_Gizmos: 0
m_Stats: 0
- m_SelectedSizes: 03000000000000001200000015000000000000000000000000000000000000000000000000000000
+ m_SelectedSizes: 03000000000000001200000006000000000000000000000000000000000000000000000000000000
m_ZoomArea:
m_HRangeLocked: 0
m_VRangeLocked: 0
hZoomLockedByDefault: 0
vZoomLockedByDefault: 0
- m_HBaseRangeMin: -910.6667
- m_HBaseRangeMax: 910.6667
- m_VBaseRangeMin: -682.6667
- m_VBaseRangeMax: 682.6667
+ m_HBaseRangeMin: -640
+ m_HBaseRangeMax: 640
+ m_VBaseRangeMin: -360
+ m_VBaseRangeMax: 360
m_HAllowExceedBaseRangeMin: 1
m_HAllowExceedBaseRangeMax: 1
m_VAllowExceedBaseRangeMin: 1
@@ -108,23 +108,23 @@ MonoBehaviour:
serializedVersion: 2
x: 0
y: 21
- width: 894.66675
- height: 523.6667
- m_Scale: {x: 0.38354492, y: 0.38354492}
- m_Translation: {x: 447.33337, y: 261.83334}
+ width: 922
+ height: 466.3333
+ m_Scale: {x: 0.64768517, y: 0.64768517}
+ m_Translation: {x: 461, y: 233.16666}
m_MarginLeft: 0
m_MarginRight: 0
m_MarginTop: 0
m_MarginBottom: 0
m_LastShownAreaInsideMargins:
serializedVersion: 2
- x: -1166.3129
- y: -682.6667
- width: 2332.6257
- height: 1365.3334
+ x: -711.76556
+ y: -360
+ width: 1423.5311
+ height: 720
m_MinimalGUI: 1
- m_defaultScale: 0.38354492
- m_LastWindowPixelSize: {x: 1342.0001, y: 817}
+ m_defaultScale: 0.64768517
+ m_LastWindowPixelSize: {x: 1383, y: 731}
m_ClearInEditMode: 1
m_NoCameraWarning: 1
m_LowResolutionForAspectRatios: 00000000000000000000
@@ -145,7 +145,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
m_Children:
- {fileID: 4}
- - {fileID: 17}
+ - {fileID: 16}
m_Position:
serializedVersion: 2
x: 0
@@ -155,7 +155,7 @@ MonoBehaviour:
m_MinSize: {x: 300, y: 112}
m_MaxSize: {x: 24288, y: 16192}
vertical: 0
- controlID: 343
+ controlID: 57
draggingID: 0
--- !u!114 &4
MonoBehaviour:
@@ -171,7 +171,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
m_Children:
- {fileID: 5}
- - {fileID: 12}
+ - {fileID: 11}
m_Position:
serializedVersion: 2
x: 0
@@ -181,7 +181,7 @@ MonoBehaviour:
m_MinSize: {x: 200, y: 112}
m_MaxSize: {x: 16192, y: 16192}
vertical: 1
- controlID: 344
+ controlID: 58
draggingID: 0
--- !u!114 &5
MonoBehaviour:
@@ -203,11 +203,11 @@ MonoBehaviour:
x: 0
y: 0
width: 1195.3334
- height: 570.6667
+ height: 513.3333
m_MinSize: {x: 200, y: 56}
m_MaxSize: {x: 16192, y: 8096}
vertical: 0
- controlID: 345
+ controlID: 59
draggingID: 0
--- !u!114 &6
MonoBehaviour:
@@ -226,8 +226,8 @@ MonoBehaviour:
serializedVersion: 2
x: 0
y: 0
- width: 298.66666
- height: 570.6667
+ width: 271.33334
+ height: 513.3333
m_MinSize: {x: 200, y: 200}
m_MaxSize: {x: 4000, y: 4000}
m_ActualView: {fileID: 7}
@@ -259,8 +259,8 @@ MonoBehaviour:
serializedVersion: 2
x: 0
y: 78.66667
- width: 297.66666
- height: 544.6667
+ width: 270.33334
+ height: 487.3333
m_SerializedDataModeController:
m_DataMode: 0
m_PreferredDataMode: 0
@@ -277,57 +277,38 @@ MonoBehaviour:
m_SceneHierarchy:
m_TreeViewState:
scrollPos: {x: 0, y: 0}
- m_SelectedIDs: []
+ m_SelectedIDs:
+ - m_Data: 48546
m_LastClickedID:
m_Data: 0
m_ExpandedIDs:
- - m_Data: -366368
- - m_Data: -363360
- - m_Data: -362956
- - m_Data: -338844
- - m_Data: -283904
- - m_Data: -283892
- - m_Data: -281414
- - m_Data: -278436
- - m_Data: -278074
- - m_Data: -255902
- - m_Data: -236384
- - m_Data: -236380
- - m_Data: -236374
- - m_Data: -236048
- - m_Data: -236036
- - m_Data: -233542
- - m_Data: -212182
- - m_Data: -212178
- - m_Data: -212172
- - m_Data: -211846
- - m_Data: -211834
- - m_Data: -209340
- - m_Data: -187642
- - m_Data: -187638
- - m_Data: -187632
- - m_Data: -187306
- - m_Data: -187294
- - m_Data: -187220
- - m_Data: -121380
- - m_Data: -55898
- - m_Data: -55894
- - m_Data: -55888
- - m_Data: -55562
- - m_Data: -55550
- - m_Data: -55476
- - m_Data: -35098
- - m_Data: -35094
- - m_Data: -35088
- - m_Data: -34762
- - m_Data: -34750
- - m_Data: -34640
- - m_Data: -1332
- - m_Data: 113838
+ - m_Data: -108648
+ - m_Data: -94366
+ - m_Data: -94330
+ - m_Data: -87070
+ - m_Data: -87048
+ - m_Data: -87012
+ - m_Data: -49606
+ - m_Data: -47774
+ - m_Data: -14502
+ - m_Data: -1338
+ - m_Data: 102028
+ - m_Data: 102060
+ - m_Data: 103324
+ - m_Data: 256180
+ - m_Data: 256254
+ - m_Data: 256286
+ - m_Data: 256290
+ - m_Data: 256456
+ - m_Data: 256864
+ - m_Data: 257170
+ - m_Data: 257262
+ - m_Data: 257486
+ - m_Data: 257494
m_RenameOverlay:
m_UserAcceptedRename: 0
- m_Name: EmptyObject(Clone)
- m_OriginalName: EmptyObject(Clone)
+ m_Name:
+ m_OriginalName:
m_EditFieldRect:
serializedVersion: 2
x: 0
@@ -335,10 +316,10 @@ MonoBehaviour:
width: 0
height: 0
m_UserData:
- m_Data: -55916
+ m_Data: 0
m_IsWaitingForDelay: 0
m_IsRenaming: 0
- m_OriginalEventType: 0
+ m_OriginalEventType: 11
m_IsRenamingFilename: 0
m_TrimLeadingAndTrailingWhitespace: 0
m_ClientGUIView: {fileID: 6}
@@ -364,18 +345,17 @@ MonoBehaviour:
m_Children: []
m_Position:
serializedVersion: 2
- x: 298.66666
+ x: 271.33334
y: 0
- width: 896.66675
- height: 570.6667
- m_MinSize: {x: 200, y: 200}
- m_MaxSize: {x: 4000, y: 4000}
+ width: 924
+ height: 513.3333
+ m_MinSize: {x: 202, y: 226}
+ m_MaxSize: {x: 4002, y: 4026}
m_ActualView: {fileID: 2}
m_Panes:
- {fileID: 9}
- {fileID: 2}
- {fileID: 10}
- - {fileID: 11}
m_Selected: 1
m_LastSelected: 0
--- !u!114 &9
@@ -400,10 +380,10 @@ MonoBehaviour:
m_TextWithWhitespace: "Scene\u200B"
m_Pos:
serializedVersion: 2
- x: 298.6667
+ x: 271.33334
y: 78.66667
- width: 894.66675
- height: 544.6667
+ width: 922
+ height: 487.3333
m_SerializedDataModeController:
m_DataMode: 0
m_PreferredDataMode: 0
@@ -1072,9 +1052,9 @@ MonoBehaviour:
m_AudioPlay: 0
m_DebugDrawModesUseInteractiveLightBakingData: 0
m_Position:
- m_Target: {x: 3.284062, y: -4.438463, z: 228.66423}
+ m_Target: {x: 70.46575, y: -40.140606, z: 90.52266}
speed: 2
- m_Value: {x: 3.284062, y: -4.438463, z: 228.66423}
+ m_Value: {x: 70.46575, y: -40.140606, z: 90.52266}
m_RenderMode: 0
m_CameraMode:
drawMode: 0
@@ -1120,13 +1100,13 @@ MonoBehaviour:
m_GridAxis: 1
m_gridOpacity: 0.5
m_Rotation:
- m_Target: {x: -0.2943263, y: 0.04165452, z: -0.0128243575, w: -0.9548516}
+ m_Target: {x: -0.01900035, y: 0.013590706, z: -0.0003011617, w: -0.9998659}
speed: 2
- m_Value: {x: -0.2942867, y: 0.041648913, z: -0.012822632, w: -0.9547231}
+ m_Value: {x: -0.018997714, y: 0.01358882, z: -0.0003011199, w: -0.9997272}
m_Size:
- m_Target: 10.775852
+ m_Target: 48.76874
speed: 2
- m_Value: 10.775852
+ m_Value: 48.76874
m_Ortho:
m_Target: 0
speed: 2
@@ -1144,7 +1124,7 @@ MonoBehaviour:
m_FarClip: 1000
m_DynamicClip: 1
m_OcclusionCulling: 0
- m_LastSceneViewRotation: {x: 0.08635472, y: -0.90288734, z: 0.21522357, w: 0.36232075}
+ m_LastSceneViewRotation: {x: -0.0018017952, y: 0.09097248, z: -0.00016610812, w: -0.9958704}
m_LastSceneViewOrtho: 0
m_Viewpoint:
m_SceneView: {fileID: 9}
@@ -1182,10 +1162,10 @@ MonoBehaviour:
m_TextWithWhitespace: "Animator\u200B"
m_Pos:
serializedVersion: 2
- x: 298.6667
- y: 78.66667
- width: 894.66675
- height: 544
+ x: -2153.3333
+ y: -7.9999924
+ width: 1384
+ height: 882.6667
m_SerializedDataModeController:
m_DataMode: 0
m_PreferredDataMode: 0
@@ -1268,78 +1248,6 @@ MonoBehaviour:
m_LayerEditor:
m_SelectedLayerIndex: 0
--- !u!114 &11
-MonoBehaviour:
- m_ObjectHideFlags: 61
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 0}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 41147144ff556e246b736135eb26f185, type: 3}
- m_Name:
- m_EditorClassIdentifier: Unity.RenderPipelines.Core.Editor::UnityEditor.Rendering.DebugWindow
- m_MinSize: {x: 800, y: 300}
- m_MaxSize: {x: 4000, y: 4000}
- m_TitleContent:
- m_Text: Rendering Debugger
- m_Image: {fileID: 0}
- m_Tooltip:
- m_TextWithWhitespace: "Rendering Debugger\u200B"
- m_Pos:
- serializedVersion: 2
- x: 298.6667
- y: 78.66667
- width: 894.66675
- height: 544.6667
- m_SerializedDataModeController:
- m_DataMode: 0
- m_PreferredDataMode: 0
- m_SupportedDataModes:
- isAutomatic: 1
- m_ViewDataDictionary: {fileID: 0}
- m_OverlayCanvas:
- m_LastAppliedPresetName: Default
- m_SaveData: []
- m_ContainerData: []
- m_DynamicPanelContainerData: []
- m_OverlaysVisible: 1
- m_DynamicPanelBehavior: 0
- m_WidgetStates:
- m_Keys:
- - Display Stats -> Frame Stats
- - Display Stats -> Bottlenecks
- - Display Stats -> Detailed Stats
- - Frequently Used -> Rendering Debug
- - Frequently Used -> Material Filters
- - Frequently Used -> Lighting Debug Modes
- - Rendering -> Pixel Validation
- - Rendering -> HDR Output
- - Rendering -> GPU Resident Drawer Settings
- - Rendering -> Occlusion Context Stats
- - Rendering -> Instance Culler Stats
- - Rendering -> Render Graph
- - Material -> Material Validation
- - Volume -> Camera
- - Volume -> Component
- m_Values:
- - {fileID: 0}
- - {fileID: 0}
- - {fileID: 0}
- - {fileID: 0}
- - {fileID: 0}
- - {fileID: 0}
- - {fileID: 0}
- - {fileID: 0}
- - {fileID: 0}
- - {fileID: 0}
- - {fileID: 0}
- - {fileID: 0}
- - {fileID: 0}
- - {fileID: 0}
- - {fileID: 0}
- m_Settings: {fileID: 0}
---- !u!114 &12
MonoBehaviour:
m_ObjectHideFlags: 52
m_CorrespondingSourceObject: {fileID: 0}
@@ -1355,20 +1263,20 @@ MonoBehaviour:
m_Position:
serializedVersion: 2
x: 0
- y: 570.6667
+ y: 513.3333
width: 1195.3334
- height: 242.66663
+ height: 300
m_MinSize: {x: 231, y: 276}
m_MaxSize: {x: 10001, y: 10026}
- m_ActualView: {fileID: 13}
+ m_ActualView: {fileID: 12}
m_Panes:
+ - {fileID: 12}
- {fileID: 13}
- {fileID: 14}
- {fileID: 15}
- - {fileID: 16}
m_Selected: 0
m_LastSelected: 1
---- !u!114 &13
+--- !u!114 &12
MonoBehaviour:
m_ObjectHideFlags: 52
m_CorrespondingSourceObject: {fileID: 0}
@@ -1391,9 +1299,9 @@ MonoBehaviour:
m_Pos:
serializedVersion: 2
x: 0
- y: 649.3334
+ y: 592
width: 1194.3334
- height: 216.66663
+ height: 274
m_SerializedDataModeController:
m_DataMode: 0
m_PreferredDataMode: 0
@@ -1418,7 +1326,7 @@ MonoBehaviour:
m_SkipHidden: 0
m_SearchArea: 1
m_Folders:
- - Assets/Prefabs/GameElements/Track
+ - Assets/Wwise/MonoBehaviour/Editor/EditorPlatformHelpers/iOS
m_Globs: []
m_ProductIds:
m_AnyWithAssetOrigin: 0
@@ -1428,108 +1336,114 @@ MonoBehaviour:
m_ViewMode: 1
m_StartGridSize: 16
m_LastFolders:
- - Assets/Prefabs/GameElements/Track
+ - Assets/Wwise/MonoBehaviour/Editor/EditorPlatformHelpers/iOS
m_LastFoldersGridSize: 16
m_LastProjectPath: D:\Projects\ichni Official
m_LockTracker:
m_IsLocked: 0
m_LastLocalAssetsSearchArea: 1
m_FolderTreeState:
- scrollPos: {x: 0, y: 335.33337}
+ scrollPos: {x: 0, y: 1010}
m_SelectedIDs:
- - m_Data: 209432
+ - m_Data: 100976
m_LastClickedID:
- m_Data: 209432
+ m_Data: 100976
m_ExpandedIDs:
- m_Data: 0
- - m_Data: 77244
- - m_Data: 77246
- - m_Data: 77248
- - m_Data: 77250
- - m_Data: 77252
- - m_Data: 77254
- - m_Data: 77256
- - m_Data: 77258
- - m_Data: 77260
- - m_Data: 77262
- - m_Data: 77264
- - m_Data: 77266
- - m_Data: 77268
- - m_Data: 77270
- - m_Data: 77272
- - m_Data: 77274
- - m_Data: 77276
- - m_Data: 77278
- - m_Data: 77280
- - m_Data: 77282
- - m_Data: 77284
- - m_Data: 77286
- - m_Data: 77288
- - m_Data: 77290
- - m_Data: 77292
- - m_Data: 77294
- - m_Data: 77296
- - m_Data: 77298
- - m_Data: 77300
- - m_Data: 77302
- - m_Data: 77304
- - m_Data: 77306
- - m_Data: 77308
- - m_Data: 77310
- - m_Data: 77312
- - m_Data: 77314
- - m_Data: 77316
- - m_Data: 77318
- - m_Data: 77322
- - m_Data: 77324
- - m_Data: 77326
- - m_Data: 77328
- - m_Data: 77330
- - m_Data: 77332
- - m_Data: 77334
- - m_Data: 77336
- - m_Data: 77340
- - m_Data: 77342
- - m_Data: 77344
- - m_Data: 77346
- - m_Data: 77348
- - m_Data: 77350
- - m_Data: 77352
- - m_Data: 77354
- - m_Data: 77356
- - m_Data: 77358
- - m_Data: 77360
- - m_Data: 77362
- - m_Data: 77364
- - m_Data: 77366
- - m_Data: 77368
- - m_Data: 77370
- - m_Data: 77372
- - m_Data: 77374
- - m_Data: 77376
- - m_Data: 77378
- - m_Data: 77380
- - m_Data: 77382
- - m_Data: 77384
- - m_Data: 77386
- - m_Data: 77388
- - m_Data: 77390
- - m_Data: 77392
- - m_Data: 77394
- - m_Data: 77396
- - m_Data: 77398
- - m_Data: 77400
- - m_Data: 77402
- - m_Data: 77816
- - m_Data: 77818
- - m_Data: 77822
- - m_Data: 153162
- - m_Data: 153164
- - m_Data: 153166
- - m_Data: 153168
- - m_Data: 197202
- - m_Data: 204772
- - m_Data: 204774
+ - m_Data: 82090
+ - m_Data: 82092
+ - m_Data: 82094
+ - m_Data: 82096
+ - m_Data: 82098
+ - m_Data: 82100
+ - m_Data: 82102
+ - m_Data: 82104
+ - m_Data: 82106
+ - m_Data: 82108
+ - m_Data: 82110
+ - m_Data: 82112
+ - m_Data: 82114
+ - m_Data: 82116
+ - m_Data: 82118
+ - m_Data: 82120
+ - m_Data: 82126
+ - m_Data: 82128
+ - m_Data: 82130
+ - m_Data: 82132
+ - m_Data: 82134
+ - m_Data: 82136
+ - m_Data: 82138
+ - m_Data: 82140
+ - m_Data: 82142
+ - m_Data: 82144
+ - m_Data: 82146
+ - m_Data: 82148
+ - m_Data: 82150
+ - m_Data: 82152
+ - m_Data: 82154
+ - m_Data: 82156
+ - m_Data: 82158
+ - m_Data: 82160
+ - m_Data: 82162
+ - m_Data: 82164
+ - m_Data: 82166
+ - m_Data: 82168
+ - m_Data: 82170
+ - m_Data: 82172
+ - m_Data: 82174
+ - m_Data: 82176
+ - m_Data: 82178
+ - m_Data: 82180
+ - m_Data: 82182
+ - m_Data: 82184
+ - m_Data: 82186
+ - m_Data: 82188
+ - m_Data: 82190
+ - m_Data: 82192
+ - m_Data: 82194
+ - m_Data: 82196
+ - m_Data: 82198
+ - m_Data: 82200
+ - m_Data: 82202
+ - m_Data: 82204
+ - m_Data: 82206
+ - m_Data: 82210
+ - m_Data: 82212
+ - m_Data: 82214
+ - m_Data: 82216
+ - m_Data: 82218
+ - m_Data: 82220
+ - m_Data: 82222
+ - m_Data: 82224
+ - m_Data: 82226
+ - m_Data: 82228
+ - m_Data: 82230
+ - m_Data: 82232
+ - m_Data: 82234
+ - m_Data: 82236
+ - m_Data: 82238
+ - m_Data: 82240
+ - m_Data: 82242
+ - m_Data: 82244
+ - m_Data: 82246
+ - m_Data: 82248
+ - m_Data: 82250
+ - m_Data: 82252
+ - m_Data: 82254
+ - m_Data: 82256
+ - m_Data: 82258
+ - m_Data: 82260
+ - m_Data: 82264
+ - m_Data: 82266
+ - m_Data: 82268
+ - m_Data: 82274
+ - m_Data: 82276
+ - m_Data: 82796
+ - m_Data: 82854
+ - m_Data: 82858
+ - m_Data: 100978
+ - m_Data: 100980
+ - m_Data: 125440
- m_Data: 1000000000
m_RenameOverlay:
m_UserAcceptedRename: 0
@@ -1548,7 +1462,7 @@ MonoBehaviour:
m_OriginalEventType: 11
m_IsRenamingFilename: 1
m_TrimLeadingAndTrailingWhitespace: 0
- m_ClientGUIView: {fileID: 12}
+ m_ClientGUIView: {fileID: 11}
m_SearchString:
m_CreateAssetUtility:
m_EndAction: {fileID: 0}
@@ -1563,87 +1477,100 @@ MonoBehaviour:
m_Data: 0
m_ExpandedIDs:
- m_Data: 0
- - m_Data: 77244
- - m_Data: 77246
- - m_Data: 77248
- - m_Data: 77250
- - m_Data: 77252
- - m_Data: 77254
- - m_Data: 77256
- - m_Data: 77258
- - m_Data: 77260
- - m_Data: 77262
- - m_Data: 77264
- - m_Data: 77266
- - m_Data: 77268
- - m_Data: 77270
- - m_Data: 77272
- - m_Data: 77274
- - m_Data: 77276
- - m_Data: 77278
- - m_Data: 77280
- - m_Data: 77282
- - m_Data: 77284
- - m_Data: 77286
- - m_Data: 77288
- - m_Data: 77290
- - m_Data: 77292
- - m_Data: 77294
- - m_Data: 77296
- - m_Data: 77298
- - m_Data: 77300
- - m_Data: 77302
- - m_Data: 77304
- - m_Data: 77306
- - m_Data: 77308
- - m_Data: 77310
- - m_Data: 77312
- - m_Data: 77314
- - m_Data: 77316
- - m_Data: 77318
- - m_Data: 77320
- - m_Data: 77322
- - m_Data: 77324
- - m_Data: 77326
- - m_Data: 77328
- - m_Data: 77330
- - m_Data: 77332
- - m_Data: 77334
- - m_Data: 77336
- - m_Data: 77338
- - m_Data: 77340
- - m_Data: 77342
- - m_Data: 77344
- - m_Data: 77346
- - m_Data: 77348
- - m_Data: 77350
- - m_Data: 77352
- - m_Data: 77354
- - m_Data: 77356
- - m_Data: 77358
- - m_Data: 77360
- - m_Data: 77362
- - m_Data: 77364
- - m_Data: 77366
- - m_Data: 77368
- - m_Data: 77370
- - m_Data: 77372
- - m_Data: 77374
- - m_Data: 77376
- - m_Data: 77378
- - m_Data: 77380
- - m_Data: 77382
- - m_Data: 77384
- - m_Data: 77386
- - m_Data: 77388
- - m_Data: 77390
- - m_Data: 77392
- - m_Data: 77394
- - m_Data: 77396
- - m_Data: 77398
- - m_Data: 77400
- - m_Data: 77402
- - m_Data: 1000000000
+ - m_Data: 82090
+ - m_Data: 82092
+ - m_Data: 82094
+ - m_Data: 82096
+ - m_Data: 82098
+ - m_Data: 82100
+ - m_Data: 82102
+ - m_Data: 82104
+ - m_Data: 82106
+ - m_Data: 82108
+ - m_Data: 82110
+ - m_Data: 82112
+ - m_Data: 82114
+ - m_Data: 82116
+ - m_Data: 82118
+ - m_Data: 82120
+ - m_Data: 82122
+ - m_Data: 82124
+ - m_Data: 82126
+ - m_Data: 82128
+ - m_Data: 82130
+ - m_Data: 82132
+ - m_Data: 82134
+ - m_Data: 82136
+ - m_Data: 82138
+ - m_Data: 82140
+ - m_Data: 82142
+ - m_Data: 82144
+ - m_Data: 82146
+ - m_Data: 82148
+ - m_Data: 82150
+ - m_Data: 82152
+ - m_Data: 82154
+ - m_Data: 82156
+ - m_Data: 82158
+ - m_Data: 82160
+ - m_Data: 82162
+ - m_Data: 82164
+ - m_Data: 82166
+ - m_Data: 82168
+ - m_Data: 82170
+ - m_Data: 82172
+ - m_Data: 82174
+ - m_Data: 82176
+ - m_Data: 82178
+ - m_Data: 82180
+ - m_Data: 82182
+ - m_Data: 82184
+ - m_Data: 82186
+ - m_Data: 82188
+ - m_Data: 82190
+ - m_Data: 82192
+ - m_Data: 82194
+ - m_Data: 82196
+ - m_Data: 82198
+ - m_Data: 82200
+ - m_Data: 82202
+ - m_Data: 82204
+ - m_Data: 82206
+ - m_Data: 82208
+ - m_Data: 82210
+ - m_Data: 82212
+ - m_Data: 82214
+ - m_Data: 82216
+ - m_Data: 82218
+ - m_Data: 82220
+ - m_Data: 82222
+ - m_Data: 82224
+ - m_Data: 82226
+ - m_Data: 82228
+ - m_Data: 82230
+ - m_Data: 82232
+ - m_Data: 82234
+ - m_Data: 82236
+ - m_Data: 82238
+ - m_Data: 82240
+ - m_Data: 82242
+ - m_Data: 82244
+ - m_Data: 82246
+ - m_Data: 82248
+ - m_Data: 82250
+ - m_Data: 82252
+ - m_Data: 82254
+ - m_Data: 82256
+ - m_Data: 82258
+ - m_Data: 82260
+ - m_Data: 82262
+ - m_Data: 82264
+ - m_Data: 82266
+ - m_Data: 82268
+ - m_Data: 82270
+ - m_Data: 82272
+ - m_Data: 82274
+ - m_Data: 82276
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:
@@ -1670,18 +1597,21 @@ MonoBehaviour:
m_Icon: {fileID: 0}
m_ResourceFile:
m_ListAreaState:
- m_SelectedInstanceIDs: []
- m_LastClickedInstanceID: 0
+ m_SelectedInstanceIDs:
+ - m_Data: 48546
+ m_LastClickedInstanceID: 48546
m_HadKeyboardFocusLastEvent: 1
m_ExpandedInstanceIDs:
- m_Data: 0
- m_Data: 80838
- m_Data: 66042
- m_Data: 68026
+ - m_Data: 83032
+ - m_Data: 74112
m_RenameOverlay:
m_UserAcceptedRename: 0
- m_Name: ObjectTracker
- m_OriginalName: ObjectTracker
+ m_Name:
+ m_OriginalName:
m_EditFieldRect:
serializedVersion: 2
x: 0
@@ -1689,13 +1619,13 @@ MonoBehaviour:
width: 0
height: 0
m_UserData:
- m_Data: 209452
+ m_Data: 0
m_IsWaitingForDelay: 0
m_IsRenaming: 0
- m_OriginalEventType: 0
+ m_OriginalEventType: 11
m_IsRenamingFilename: 1
m_TrimLeadingAndTrailingWhitespace: 0
- m_ClientGUIView: {fileID: 12}
+ m_ClientGUIView: {fileID: 11}
m_CreateAssetUtility:
m_EndAction: {fileID: 0}
m_InstanceID: 0
@@ -1707,7 +1637,7 @@ MonoBehaviour:
m_GridSize: 16
m_SkipHiddenPackages: 0
m_DirectoriesAreaWidth: 209
---- !u!114 &14
+--- !u!114 &13
MonoBehaviour:
m_ObjectHideFlags: 52
m_CorrespondingSourceObject: {fileID: 0}
@@ -1730,9 +1660,9 @@ MonoBehaviour:
m_Pos:
serializedVersion: 2
x: 0
- y: 649.3334
+ y: 592
width: 1194.3334
- height: 216.66663
+ height: 274
m_SerializedDataModeController:
m_DataMode: 0
m_PreferredDataMode: 0
@@ -1746,7 +1676,7 @@ MonoBehaviour:
m_DynamicPanelContainerData: []
m_OverlaysVisible: 1
m_DynamicPanelBehavior: 0
---- !u!114 &15
+--- !u!114 &14
MonoBehaviour:
m_ObjectHideFlags: 52
m_CorrespondingSourceObject: {fileID: 0}
@@ -1788,7 +1718,7 @@ MonoBehaviour:
m_LockTracker:
m_IsLocked: 0
m_LastSelectedObjectID: 48546
---- !u!114 &16
+--- !u!114 &15
MonoBehaviour:
m_ObjectHideFlags: 52
m_CorrespondingSourceObject: {fileID: 0}
@@ -1826,7 +1756,7 @@ MonoBehaviour:
m_DynamicPanelContainerData: []
m_OverlaysVisible: 1
m_DynamicPanelBehavior: 0
---- !u!114 &17
+--- !u!114 &16
MonoBehaviour:
m_ObjectHideFlags: 52
m_CorrespondingSourceObject: {fileID: 0}
@@ -1847,15 +1777,15 @@ MonoBehaviour:
height: 813.3333
m_MinSize: {x: 275, y: 50}
m_MaxSize: {x: 4000, y: 4000}
- m_ActualView: {fileID: 18}
+ m_ActualView: {fileID: 17}
m_Panes:
+ - {fileID: 17}
- {fileID: 18}
- {fileID: 19}
- {fileID: 20}
- - {fileID: 21}
m_Selected: 0
m_LastSelected: 3
---- !u!114 &18
+--- !u!114 &17
MonoBehaviour:
m_ObjectHideFlags: 52
m_CorrespondingSourceObject: {fileID: 0}
@@ -1897,7 +1827,7 @@ MonoBehaviour:
m_ObjectsLockedBeforeSerialization: []
m_InstanceIDsLockedBeforeSerialization:
m_PreviewResizer:
- m_CachedPref: -312.99988
+ m_CachedPref: 312.99988
m_ControlHash: -371814159
m_PrefName: Preview_InspectorPreview
m_LastInspectedObjectInstanceID: -1
@@ -1907,6 +1837,58 @@ MonoBehaviour:
m_LockTracker:
m_IsLocked: 0
m_PreviewWindow: {fileID: 0}
+--- !u!114 &18
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 12019, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_MinSize: {x: 275, y: 100}
+ m_MaxSize: {x: 4000, y: 4000}
+ m_TitleContent:
+ m_Text: Inspector
+ m_Image: {fileID: -440750813802333266, guid: 0000000000000000d000000000000000,
+ type: 0}
+ m_Tooltip:
+ m_TextWithWhitespace: "Inspector\u200B"
+ m_Pos:
+ serializedVersion: 2
+ x: 1195.3334
+ y: 78.66667
+ width: 510.33325
+ height: 787.3333
+ m_SerializedDataModeController:
+ m_DataMode: 0
+ m_PreferredDataMode: 0
+ m_SupportedDataModes:
+ isAutomatic: 1
+ m_ViewDataDictionary: {fileID: 0}
+ m_OverlayCanvas:
+ m_LastAppliedPresetName: Default
+ m_SaveData: []
+ m_ContainerData: []
+ m_DynamicPanelContainerData: []
+ m_OverlaysVisible: 1
+ m_DynamicPanelBehavior: 0
+ m_ObjectsLockedBeforeSerialization: []
+ m_InstanceIDsLockedBeforeSerialization:
+ m_PreviewResizer:
+ m_CachedPref: 184.33334
+ m_ControlHash: 1412526313
+ m_PrefName: Preview_InspectorPreview
+ m_LastInspectedObjectInstanceID: 48546
+ m_LastVerticalScrollValue: 0
+ m_GlobalObjectId:
+ m_InspectorMode: 0
+ m_LockTracker:
+ m_IsLocked: 0
+ m_PreviewWindow: {fileID: 0}
--- !u!114 &19
MonoBehaviour:
m_ObjectHideFlags: 52
@@ -1949,10 +1931,10 @@ MonoBehaviour:
m_ObjectsLockedBeforeSerialization: []
m_InstanceIDsLockedBeforeSerialization:
m_PreviewResizer:
- m_CachedPref: 184.33334
+ m_CachedPref: 165.66669
m_ControlHash: 1412526313
m_PrefName: Preview_InspectorPreview
- m_LastInspectedObjectInstanceID: -1
+ m_LastInspectedObjectInstanceID: 48546
m_LastVerticalScrollValue: 0
m_GlobalObjectId:
m_InspectorMode: 0
@@ -1960,58 +1942,6 @@ MonoBehaviour:
m_IsLocked: 0
m_PreviewWindow: {fileID: 0}
--- !u!114 &20
-MonoBehaviour:
- m_ObjectHideFlags: 52
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 0}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 12019, guid: 0000000000000000e000000000000000, type: 0}
- m_Name:
- m_EditorClassIdentifier:
- m_MinSize: {x: 275, y: 100}
- m_MaxSize: {x: 4000, y: 4000}
- m_TitleContent:
- m_Text: Inspector
- m_Image: {fileID: -440750813802333266, guid: 0000000000000000d000000000000000,
- type: 0}
- m_Tooltip:
- m_TextWithWhitespace: "Inspector\u200B"
- m_Pos:
- serializedVersion: 2
- x: 1195.3334
- y: 78.66667
- width: 510.33325
- height: 787.3333
- m_SerializedDataModeController:
- m_DataMode: 0
- m_PreferredDataMode: 0
- m_SupportedDataModes:
- isAutomatic: 1
- m_ViewDataDictionary: {fileID: 0}
- m_OverlayCanvas:
- m_LastAppliedPresetName: Default
- m_SaveData: []
- m_ContainerData: []
- m_DynamicPanelContainerData: []
- m_OverlaysVisible: 1
- m_DynamicPanelBehavior: 0
- m_ObjectsLockedBeforeSerialization: []
- m_InstanceIDsLockedBeforeSerialization:
- m_PreviewResizer:
- m_CachedPref: 165.66669
- m_ControlHash: 1412526313
- m_PrefName: Preview_InspectorPreview
- m_LastInspectedObjectInstanceID: -1
- m_LastVerticalScrollValue: 0
- m_GlobalObjectId:
- m_InspectorMode: 0
- m_LockTracker:
- m_IsLocked: 0
- m_PreviewWindow: {fileID: 0}
---- !u!114 &21
MonoBehaviour:
m_ObjectHideFlags: 52
m_CorrespondingSourceObject: {fileID: 0}
diff --git a/UserSettings/Layouts/default-6000.dwlt b/UserSettings/Layouts/default-6000.dwlt
index 76ff445c..06ec2a04 100644
--- a/UserSettings/Layouts/default-6000.dwlt
+++ b/UserSettings/Layouts/default-6000.dwlt
@@ -118,7 +118,7 @@ MonoBehaviour:
m_MinSize: {x: 300, y: 112}
m_MaxSize: {x: 24288, y: 16192}
vertical: 1
- controlID: 56
+ controlID: 44086
draggingID: 0
--- !u!114 &6
MonoBehaviour:
@@ -144,7 +144,7 @@ MonoBehaviour:
m_MinSize: {x: 300, y: 112}
m_MaxSize: {x: 24288, y: 16192}
vertical: 0
- controlID: 57
+ controlID: 44087
draggingID: 0
--- !u!114 &7
MonoBehaviour:
@@ -170,7 +170,7 @@ MonoBehaviour:
m_MinSize: {x: 200, y: 112}
m_MaxSize: {x: 16192, y: 16192}
vertical: 1
- controlID: 58
+ controlID: 44088
draggingID: 0
--- !u!114 &8
MonoBehaviour:
@@ -196,7 +196,7 @@ MonoBehaviour:
m_MinSize: {x: 200, y: 56}
m_MaxSize: {x: 16192, y: 8096}
vertical: 0
- controlID: 59
+ controlID: 44089
draggingID: 0
--- !u!114 &9
MonoBehaviour:
@@ -217,8 +217,8 @@ MonoBehaviour:
y: 0
width: 271.33334
height: 513.3333
- m_MinSize: {x: 201, y: 226}
- m_MaxSize: {x: 4001, y: 4026}
+ m_MinSize: {x: 200, y: 200}
+ m_MaxSize: {x: 4000, y: 4000}
m_ActualView: {fileID: 15}
m_Panes:
- {fileID: 15}
@@ -300,8 +300,8 @@ MonoBehaviour:
y: 0
width: 511.33325
height: 813.3333
- m_MinSize: {x: 276, y: 76}
- m_MaxSize: {x: 4001, y: 4026}
+ m_MinSize: {x: 275, y: 50}
+ m_MaxSize: {x: 4000, y: 4000}
m_ActualView: {fileID: 22}
m_Panes:
- {fileID: 22}
@@ -332,7 +332,7 @@ MonoBehaviour:
m_Pos:
serializedVersion: 2
x: 0
- y: 0
+ y: 42.666668
width: 1706.6666
height: 36
m_SerializedDataModeController:
@@ -559,10 +559,10 @@ MonoBehaviour:
displayed: 1
id: Play Mode Controls
index: 0
- contents: '{"m_Layout":4,"m_Collapsed":false,"m_Folded":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":-781.333251953125,"y":-36.0},"m_SnapOffsetDelta":{"x":0.0,"y":0.0},"m_FloatingSnapCorner":3,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+ contents: '{"m_Layout":4,"m_Collapsed":false,"m_Folded":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":-781.3333129882813,"y":-36.0},"m_SnapOffsetDelta":{"x":0.0,"y":0.0},"m_FloatingSnapCorner":3,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
floating: 0
collapsed: 0
- snapOffset: {x: -781.33325, y: -36}
+ snapOffset: {x: -781.3333, y: -36}
snapOffsetDelta: {x: 0, y: 0}
snapCorner: 3
layout: 4
@@ -717,7 +717,7 @@ MonoBehaviour:
height: 720
m_MinimalGUI: 1
m_defaultScale: 0.64768517
- m_LastWindowPixelSize: {x: 922, y: 487.3333}
+ m_LastWindowPixelSize: {x: 1383, y: 731}
m_ClearInEditMode: 1
m_NoCameraWarning: 1
m_LowResolutionForAspectRatios: 00000000000000000000
@@ -747,7 +747,7 @@ MonoBehaviour:
m_Pos:
serializedVersion: 2
x: 0
- y: 24
+ y: 78.66667
width: 270.33334
height: 487.3333
m_SerializedDataModeController:
@@ -770,23 +770,30 @@ MonoBehaviour:
m_LastClickedID:
m_Data: 0
m_ExpandedIDs:
- - m_Data: -9402
+ - m_Data: -108648
+ - m_Data: -94366
+ - m_Data: -94330
+ - m_Data: -87070
+ - m_Data: -87048
+ - m_Data: -87012
+ - m_Data: -49606
+ - m_Data: -47774
+ - m_Data: -14502
- m_Data: -1338
- - m_Data: 77206
- - m_Data: 77654
- - m_Data: 77968
- - m_Data: 78104
- - m_Data: 78128
- - m_Data: 78326
- - m_Data: 78506
- - m_Data: 78902
- - m_Data: 78930
- - m_Data: 79000
- - m_Data: 79392
+ - m_Data: 102028
+ - m_Data: 102060
+ - m_Data: 103324
+ - m_Data: 256180
+ - m_Data: 256254
+ - m_Data: 256286
+ - m_Data: 256456
+ - m_Data: 256864
+ - m_Data: 257262
+ - m_Data: 257494
m_RenameOverlay:
m_UserAcceptedRename: 0
- m_Name:
- m_OriginalName:
+ m_Name: DialogCanvas
+ m_OriginalName: DialogCanvas
m_EditFieldRect:
serializedVersion: 2
x: 0
@@ -794,10 +801,10 @@ MonoBehaviour:
width: 0
height: 0
m_UserData:
- m_Data: 0
+ m_Data: 257494
m_IsWaitingForDelay: 0
m_IsRenaming: 0
- m_OriginalEventType: 11
+ m_OriginalEventType: 0
m_IsRenamingFilename: 0
m_TrimLeadingAndTrailingWhitespace: 0
m_ClientGUIView: {fileID: 9}
@@ -830,8 +837,8 @@ MonoBehaviour:
m_TextWithWhitespace: "Scene\u200B"
m_Pos:
serializedVersion: 2
- x: 272.33334
- y: 24
+ x: 271.33334
+ y: 78.66667
width: 922
height: 487.3333
m_SerializedDataModeController:
@@ -1502,9 +1509,9 @@ MonoBehaviour:
m_AudioPlay: 0
m_DebugDrawModesUseInteractiveLightBakingData: 0
m_Position:
- m_Target: {x: -38.69434, y: 1.4327267, z: 90.70299}
+ m_Target: {x: 1.7105114, y: -5.044157, z: 89.96282}
speed: 2
- m_Value: {x: -38.69434, y: 1.4327267, z: 90.70299}
+ m_Value: {x: 1.7105114, y: -5.044157, z: 89.96282}
m_RenderMode: 0
m_CameraMode:
drawMode: 0
@@ -1550,13 +1557,13 @@ MonoBehaviour:
m_GridAxis: 1
m_gridOpacity: 0.5
m_Rotation:
- m_Target: {x: -0.01900035, y: 0.013590706, z: -0.0003011617, w: -0.9998659}
+ m_Target: {x: 0.0009989224, y: -0.00040756795, z: -0.000043291617, w: -1.0001386}
speed: 2
- m_Value: {x: -0.01900035, y: 0.0135907065, z: -0.00030116172, w: -0.99986595}
+ m_Value: {x: 0.0009987833, y: -0.0004075112, z: -0.00004328559, w: -0.9999994}
m_Size:
- m_Target: 51.759678
+ m_Target: 55.17186
speed: 2
- m_Value: 51.759678
+ m_Value: 55.17186
m_Ortho:
m_Target: 0
speed: 2
@@ -1722,7 +1729,7 @@ MonoBehaviour:
x: 0
y: 592
width: 1194.3334
- height: 274.00006
+ height: 274
m_SerializedDataModeController:
m_DataMode: 0
m_PreferredDataMode: 0
@@ -1747,7 +1754,7 @@ MonoBehaviour:
m_SkipHidden: 0
m_SearchArea: 1
m_Folders:
- - Packages/com.unity.collab-proxy/Editor/UI/Avatar
+ - Assets/Wwise/MonoBehaviour/Editor/EditorPlatformHelpers/iOS
m_Globs: []
m_ProductIds:
m_AnyWithAssetOrigin: 0
@@ -1757,65 +1764,20 @@ MonoBehaviour:
m_ViewMode: 1
m_StartGridSize: 16
m_LastFolders:
- - Packages/com.unity.collab-proxy/Editor/UI/Avatar
+ - Assets/Wwise/MonoBehaviour/Editor/EditorPlatformHelpers/iOS
m_LastFoldersGridSize: 16
m_LastProjectPath: D:\Projects\ichni Official
m_LockTracker:
m_IsLocked: 0
m_LastLocalAssetsSearchArea: 1
m_FolderTreeState:
- scrollPos: {x: 0, y: 1458}
+ scrollPos: {x: 0, y: 1010}
m_SelectedIDs:
- - m_Data: 82676
+ - m_Data: 100976
m_LastClickedID:
- m_Data: 82676
+ m_Data: 100976
m_ExpandedIDs:
- m_Data: 0
- - m_Data: 82000
- - m_Data: 82002
- - m_Data: 82004
- - m_Data: 82006
- - m_Data: 82008
- - m_Data: 82010
- - m_Data: 82012
- - m_Data: 82014
- - m_Data: 82016
- - m_Data: 82018
- - m_Data: 82020
- - m_Data: 82022
- - m_Data: 82024
- - m_Data: 82026
- - m_Data: 82028
- - m_Data: 82030
- - m_Data: 82032
- - m_Data: 82034
- - m_Data: 82036
- - m_Data: 82038
- - m_Data: 82040
- - m_Data: 82042
- - m_Data: 82044
- - m_Data: 82046
- - m_Data: 82048
- - m_Data: 82050
- - m_Data: 82052
- - m_Data: 82054
- - m_Data: 82056
- - m_Data: 82058
- - m_Data: 82060
- - m_Data: 82062
- - m_Data: 82064
- - m_Data: 82066
- - m_Data: 82068
- - m_Data: 82070
- - m_Data: 82072
- - m_Data: 82074
- - m_Data: 82076
- - m_Data: 82078
- - m_Data: 82080
- - m_Data: 82082
- - m_Data: 82084
- - m_Data: 82086
- - m_Data: 82088
- m_Data: 82090
- m_Data: 82092
- m_Data: 82094
@@ -1832,8 +1794,6 @@ MonoBehaviour:
- m_Data: 82116
- m_Data: 82118
- m_Data: 82120
- - m_Data: 82122
- - m_Data: 82124
- m_Data: 82126
- m_Data: 82128
- m_Data: 82130
@@ -1862,6 +1822,57 @@ MonoBehaviour:
- m_Data: 82176
- m_Data: 82178
- m_Data: 82180
+ - m_Data: 82182
+ - m_Data: 82184
+ - m_Data: 82186
+ - m_Data: 82188
+ - m_Data: 82190
+ - m_Data: 82192
+ - m_Data: 82194
+ - m_Data: 82196
+ - m_Data: 82198
+ - m_Data: 82200
+ - m_Data: 82202
+ - m_Data: 82204
+ - m_Data: 82206
+ - m_Data: 82210
+ - m_Data: 82212
+ - m_Data: 82214
+ - m_Data: 82216
+ - m_Data: 82218
+ - m_Data: 82220
+ - m_Data: 82222
+ - m_Data: 82224
+ - m_Data: 82226
+ - m_Data: 82228
+ - m_Data: 82230
+ - m_Data: 82232
+ - m_Data: 82234
+ - m_Data: 82236
+ - m_Data: 82238
+ - m_Data: 82240
+ - m_Data: 82242
+ - m_Data: 82244
+ - m_Data: 82246
+ - m_Data: 82248
+ - m_Data: 82250
+ - m_Data: 82252
+ - m_Data: 82254
+ - m_Data: 82256
+ - m_Data: 82258
+ - m_Data: 82260
+ - m_Data: 82264
+ - m_Data: 82266
+ - m_Data: 82268
+ - m_Data: 82274
+ - m_Data: 82276
+ - m_Data: 82796
+ - m_Data: 82854
+ - m_Data: 82858
+ - m_Data: 100978
+ - m_Data: 100980
+ - m_Data: 125440
+ - m_Data: 1000000000
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:
@@ -1894,51 +1905,6 @@ MonoBehaviour:
m_Data: 0
m_ExpandedIDs:
- m_Data: 0
- - m_Data: 82000
- - m_Data: 82002
- - m_Data: 82004
- - m_Data: 82006
- - m_Data: 82008
- - m_Data: 82010
- - m_Data: 82012
- - m_Data: 82014
- - m_Data: 82016
- - m_Data: 82018
- - m_Data: 82020
- - m_Data: 82022
- - m_Data: 82024
- - m_Data: 82026
- - m_Data: 82028
- - m_Data: 82030
- - m_Data: 82032
- - m_Data: 82034
- - m_Data: 82036
- - m_Data: 82038
- - m_Data: 82040
- - m_Data: 82042
- - m_Data: 82044
- - m_Data: 82046
- - m_Data: 82048
- - m_Data: 82050
- - m_Data: 82052
- - m_Data: 82054
- - m_Data: 82056
- - m_Data: 82058
- - m_Data: 82060
- - m_Data: 82062
- - m_Data: 82064
- - m_Data: 82066
- - m_Data: 82068
- - m_Data: 82070
- - m_Data: 82072
- - m_Data: 82074
- - m_Data: 82076
- - m_Data: 82078
- - m_Data: 82080
- - m_Data: 82082
- - m_Data: 82084
- - m_Data: 82086
- - m_Data: 82088
- m_Data: 82090
- m_Data: 82092
- m_Data: 82094
@@ -1955,8 +1921,6 @@ MonoBehaviour:
- m_Data: 82116
- m_Data: 82118
- m_Data: 82120
- - m_Data: 82122
- - m_Data: 82124
- m_Data: 82126
- m_Data: 82128
- m_Data: 82130
@@ -1985,6 +1949,56 @@ MonoBehaviour:
- m_Data: 82176
- m_Data: 82178
- m_Data: 82180
+ - m_Data: 82182
+ - m_Data: 82184
+ - m_Data: 82186
+ - m_Data: 82188
+ - m_Data: 82190
+ - m_Data: 82192
+ - m_Data: 82194
+ - m_Data: 82196
+ - m_Data: 82198
+ - m_Data: 82200
+ - m_Data: 82202
+ - m_Data: 82204
+ - m_Data: 82206
+ - m_Data: 82210
+ - m_Data: 82212
+ - m_Data: 82214
+ - m_Data: 82216
+ - m_Data: 82218
+ - m_Data: 82220
+ - m_Data: 82222
+ - m_Data: 82224
+ - m_Data: 82226
+ - m_Data: 82228
+ - m_Data: 82230
+ - m_Data: 82232
+ - m_Data: 82234
+ - m_Data: 82236
+ - m_Data: 82238
+ - m_Data: 82240
+ - m_Data: 82242
+ - m_Data: 82244
+ - m_Data: 82246
+ - m_Data: 82248
+ - m_Data: 82250
+ - m_Data: 82252
+ - m_Data: 82254
+ - m_Data: 82256
+ - m_Data: 82258
+ - m_Data: 82260
+ - m_Data: 82264
+ - m_Data: 82266
+ - m_Data: 82268
+ - m_Data: 82274
+ - m_Data: 82276
+ - m_Data: 82796
+ - m_Data: 82858
+ - m_Data: 100978
+ - m_Data: 100980
+ - m_Data: 125440
+ - m_Data: 1000000000
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:
@@ -2011,15 +2025,16 @@ MonoBehaviour:
m_Icon: {fileID: 0}
m_ResourceFile:
m_ListAreaState:
- m_SelectedInstanceIDs:
- - m_Data: 48546
- m_LastClickedInstanceID: 48546
+ m_SelectedInstanceIDs: []
+ m_LastClickedInstanceID: 0
m_HadKeyboardFocusLastEvent: 1
m_ExpandedInstanceIDs:
- m_Data: 0
- m_Data: 80838
- m_Data: 66042
- m_Data: 68026
+ - m_Data: 83032
+ - m_Data: 74112
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:
@@ -2072,7 +2087,7 @@ MonoBehaviour:
m_Pos:
serializedVersion: 2
x: 0
- y: 537.3333
+ y: 592
width: 1194.3334
height: 274
m_SerializedDataModeController:
@@ -2190,8 +2205,8 @@ MonoBehaviour:
m_TextWithWhitespace: "Inspector\u200B"
m_Pos:
serializedVersion: 2
- x: 1196.3334
- y: 24
+ x: 1195.3334
+ y: 78.66667
width: 510.33325
height: 787.3333
m_SerializedDataModeController:
@@ -2265,7 +2280,7 @@ MonoBehaviour:
m_CachedPref: 184.33334
m_ControlHash: 1412526313
m_PrefName: Preview_InspectorPreview
- m_LastInspectedObjectInstanceID: 48546
+ m_LastInspectedObjectInstanceID: -1
m_LastVerticalScrollValue: 0
m_GlobalObjectId:
m_InspectorMode: 0
@@ -2317,7 +2332,7 @@ MonoBehaviour:
m_CachedPref: 165.66669
m_ControlHash: 1412526313
m_PrefName: Preview_InspectorPreview
- m_LastInspectedObjectInstanceID: 48546
+ m_LastInspectedObjectInstanceID: -1
m_LastVerticalScrollValue: 0
m_GlobalObjectId:
m_InspectorMode: 0
diff --git a/docs/Plan 剧情系统重构(故事树 + Yarn Spinner 对话,VN 风格).md b/docs/Plan 剧情系统重构(故事树 + Yarn Spinner 对话,VN 风格).md
new file mode 100644
index 00000000..6a8797ff
--- /dev/null
+++ b/docs/Plan 剧情系统重构(故事树 + Yarn Spinner 对话,VN 风格).md
@@ -0,0 +1,439 @@
+## Plan: 剧情系统重构(故事树 + Yarn Spinner 对话,VN 风格)
+
+## Context
+
+**目标项目:** `ichni Official`(Unity 6000.3,URP,Wwise)。剧情系统为 Official 独有(`IchniCreatorStudio` 无 `Story` 模块),因此本次重构**不涉及双项目同步**,也不涉及 BM 类。
+
+**要做什么、为什么:** 现有剧情系统在引入 Yarn Spinner 之前编写,对话处理(`DialogManager` + 自定义文本解析 + DynamicExpresso 解释器 + `DialogUI`)已过时。本计划**从零重构**整个剧情系统:数据、故事树 UI、存档、对话,全部重来,改用 **Yarn Spinner 3.2.1** 驱动对话,并采用**视觉小说(VN)风格**呈现(多角色立绘、打字机、表现类 Yarn 命令),对话文本经 **Unity Localization** 统一管理多语言。
+
+**当前系统关键事实(将被替换):**
+
+- `StoryData`(`SerializedScriptableObject`)按章节定义 `DialogBlockData`/`SongBlockData`/`TutorialBlockData`/`initialBlocks`(`blockName`/`blockID`/`blockSize`/`blockPosition`/`nextBlocks`)。
+- `Storyline`(`MonoBehaviour`)从 `StoryData` 或 ES3 存档构建节点图,管理 `storyBlocks`/`connectors`,按章节存取;`StoryBlockUIBase` → `DialogBlockUI`/`SongBlockUI`/`TutorialBlockUI`,点击判断 `StoryBlockState { Locked, Current, Completed }`。
+- `DialogManager`:自定义解析器(`[段落]{函数}`、`speaker:句子`、`$Choice(...)`、`$Condition{...}`、内联 `{@表达式}`),从 `Resources/Story/[chapter]/Dialogs/` 加载 `TextAsset`。
+- `StoryInterpreters`(DynamicExpresso):`SetVariable`/`GetVariable`/`GenerateDialogBlock`/`GenerateSongBlock`/`SetUnlockKey`——不仅分支对话,还动态生成故事树节点、解锁歌曲。
+- `DialogUI`(`DialogUIPage`/`DialogContentFrame`/`DialogTextUI`/`ChoiceGroupUI`/`ChoiceButtonUI`):历史记录式(scrollback)呈现,点击推进。
+- 存档:`GameSaveManager.StorySaveModule`(block 存档、`storyVariables`、`selectedChoices`),ES3 持久化到 `persistentDataPath/StorySaves/[Chapter].json`。
+- 剧情系统实例位于 `MenuScene.unity`(`StoryManager`、`DialogManager` 均在其中)。
+
+**Yarn Spinner 3.2.1 关键 API(已核实包源码):**
+
+- `DialogueRunner`:`StartDialogue(nodeName)`;`UnityEvent onDialogueStart` / `onDialogueComplete`;`AddCommandHandler(name, Delegate)`;`dialogueViews`(`DialoguePresenterBase` 列表)。异步架构(`YarnTask`)。
+- `DialoguePresenterBase`(`Runtime/Views/DialoguePresenterBase.cs`):override `YarnTask RunLineAsync(LocalizedLine, LineCancellationToken)`、`YarnTask RunOptionsAsync(DialogueOption[], LineCancellationToken)`、`YarnTask OnDialogueStartedAsync()`、`YarnTask OnDialogueCompleteAsync()`;可选 `OnNodeEnter/OnNodeExit`。
+- `VariableStorageBehaviour`(`Runtime/Storage/VariableStorageBehaviour.cs`):自定义变量存储基类。
+- `UnityLocalisedLineProvider`(`Runtime/LineProviders/UnityLocalisedLineProvider.cs`,`.Installed.cs` 分部类需安装 `com.unity.localization` 才编译):桥接 Unity Localization String Table。
+- 表现命令用 `[YarnCommand("name")]` 静态/实例方法或 `AddCommandHandler` 注册。
+
+**设计决策(已与你确认):**
+
+1. **全部从零重构**(数据、UI、存档)。
+2. **VN 风格呈现** + 多角色立绘 + 表现类 Yarn 命令(如立绘跳动/移动)。
+3. **混合式解锁**:故事树默认在 `StoryData` 静态定义;同时允许 Yarn 命令在特殊情况下插入/解锁 block。
+4. **完整表现命令集** + 支持多立绘的 VN Presenter;立绘渲染**做抽象**(当前 Sprite,未来可换 Live2D/Spine)。
+5. **对话本地化桥接 Unity Localization**(弃用 I2),由 Unity Localization 统一管理对话与 UI 文本。
+6. **仅优先文本块(TextBlock)**;Song/Tutorial block 作为占位符。
+
+**新目录结构(`/ichni Official/Assets/Scripts/Story/`):**
+
+```
+Story/
+├── Data/ # 数据与 ScriptableObject
+│ ├── StoryData.cs # 章节故事树定义(重建)
+│ ├── StoryBlockDefinition.cs # block 定义基类 + Text/Song/Tutorial + 解锁条件
+│ ├── CharacterData.cs # 单个角色定义(id/显示名Key/立绘/情绪)
+│ └── CharacterRegistry.cs # 角色注册表(id -> CharacterData)
+├── Tree/ # 故事树运行时 + UI
+│ ├── StoryManager.cs # 协调器(重建)
+│ ├── StoryTreeController.cs # 构建树/状态/解锁重算/存取(原 Storyline)
+│ ├── StoryBlockView.cs # block 视图基类(原 StoryBlockUIBase)
+│ ├── TextBlockView.cs # 文本块(原 DialogBlockUI)
+│ ├── SongBlockView.cs # 占位
+│ ├── TutorialBlockView.cs # 占位
+│ └── BlockConnectorView.cs # 连接线(原 BlockConnectorUI)
+├── Dialogue/ # Yarn 集成
+│ ├── StoryDialogueController.cs # block → DialogueRunner 桥接
+│ ├── VNDialoguePresenter.cs # DialoguePresenterBase 实现(VN)
+│ ├── VNPortraitStage.cs # 立绘舞台(多槽位)
+│ ├── IPortraitRenderer.cs # 立绘渲染抽象接口
+│ ├── SpritePortraitRenderer.cs # Sprite 实现
+│ ├── StoryVariableStorage.cs # VariableStorageBehaviour 桥接存档
+│ ├── StoryPresentationCommands.cs # [YarnCommand] 表现命令
+│ ├── StoryTreeCommands.cs # [YarnCommand] 解锁/生成 block/解锁歌曲
+│ └── StoryFunctions.cs # [YarnFunction] 条件辅助
+├── Save/
+│ └── StorySave.cs # 存档 DTO(重建)
+└── UI/
+ └── StoryUIPage.cs # 故事树页面(适配保留)
+```
+
+参考页面:@ichni-Project-Architecture-Report
+
+------
+
+## Modifications
+
+### A. Scripts
+
+#### A1. `Story/Data/StoryBlockDefinition.cs`(新建)
+
+- **描述:** 章节故事树中单个 block 的纯数据定义 + 解锁条件。路径 `/ichni Official/Assets/Scripts/Story/Data/StoryBlockDefinition.cs`。
+- **遵循模式:** 参考旧 `StoryData.cs` 的 `[Serializable]`/`[InlineProperty]`/`[FoldoutGroup("$blockName")]` Odin 风格。
+- **内容:**
+ - `enum StoryBlockType { Text, Song, Tutorial }`。
+ - `[Serializable] class StoryBlockDefinition`:`string blockId`(唯一,替代旧 `blockName`/`blockID` 二元)、`StoryBlockType type`、`Vector2 position`、`Vector2 size`、`StoryBlockState initialState`、`List nextBlockIds`、`UnlockCondition unlockCondition`。
+ - 类型专属数据(用 Odin `[ShowIf]` 按 `type` 显示):`string yarnNodeName` + `string titleKey`(Text);`string songName`(Song 占位);`string tutorialName`(Tutorial 占位)。
+ - `[Serializable] class UnlockCondition`:`List requiredCompletedBlockIds`;`List variableConditions`;方法 `bool IsSatisfied(Func getVar, Func isCompleted)`。
+ - `[Serializable] class VariableCondition`:`string variableName`、`enum Comparison { Equal, NotEqual, Greater, GreaterOrEqual, Less, LessOrEqual }`、`int value`;`bool Evaluate(int actual)`。
+- **公共 API:** `bool UnlockCondition.IsSatisfied(...)`、`bool VariableCondition.Evaluate(int)`。
+
+#### A2. `Story/Data/StoryData.cs`(重建,覆盖现有)
+
+- **描述:** 章节故事树 ScriptableObject。路径 `/ichni Official/Assets/Scripts/Story/Data/StoryData.cs`。
+- **内容:** `[CreateAssetMenu(menuName="Ichni/Story/StoryData")] class StoryData : SerializedScriptableObject`:`string chapterIndex`、`List blocks`、`YarnProject yarnProject`(该章节编译产物引用)、`AssetReference/string` 本地化 String Table 集合名(供 Presenter/Provider 使用)。
+- **公共 API:** `StoryBlockDefinition GetBlock(string blockId)`、`IEnumerable GetInitialBlocks()`、`IEnumerable GetNextBlocks(string blockId)`。
+- **依赖:** A1、Yarn `YarnProject`。
+
+#### A3. `Story/Data/CharacterData.cs` + `CharacterRegistry.cs`(新建)
+
+- **描述:** 角色立绘/情绪注册表(VN Presenter 需要)。路径 `/ichni Official/Assets/Scripts/Story/Data/`。
+- `**CharacterData`(`[Serializable]`):** `string characterId`(与 Yarn 行的 speaker 名对应)、`string displayNameKey`(Unity Localization 键)、`PortraitStyle portraitStyle`(`enum { Sprite, Live2D, Spine }` 预留)、`SerializedDictionary emotionSprites`(Sprite 方案)、`GameObject dynamicPortraitPrefab`(Live2D/Spine 预留,实现 `IPortraitRenderer`)。
+- `**CharacterRegistry`(`[CreateAssetMenu(menuName="Ichni/Story/CharacterRegistry")] SerializedScriptableObject`):** `Dictionary characters`;`bool TryGet(string id, out CharacterData data)`。
+- **说明:** 立绘表现不直接耦合 Sprite,交由 `IPortraitRenderer`(见 A9)读取 `CharacterData` 决定渲染方式,未来接入 Live2D/Spine 只需新增 renderer 实现。
+
+#### A4. `Story/Save/StorySave.cs`(重建,覆盖现有)
+
+- **描述:** 存档 DTO。路径 `/ichni Official/Assets/Scripts/Story/Save/StorySave.cs`。
+- **内容:** `[Serializable] class StoryBlockSave { string blockId; Vector2 position; StoryBlockState state; List nextBlockIds; }`(合并旧的按类型拆分的多个 Save 类为单一带 `blockId` 的 DTO;类型信息从 `StoryData` 反查,存档只存运行态);`[Serializable] class ChapterStorySave { string chapterIndex; List blocks; }`。
+- **依赖:** A1(`StoryBlockState`、block 类型引用)。
+
+#### A5. `Story/Tree/StoryManager.cs`(重建,覆盖现有)
+
+- **描述:** 剧情系统协调器(单例)。路径 `/ichni Official/Assets/Scripts/Story/Tree/StoryManager.cs`。
+- **遵循模式:** 参考现有 `StoryManager` 单例 + `[Button] ClearAllStorySave()`;建议继承 `SLSUtilities.General.Singleton`(项目已有单例基类)。
+- **内容:** 持有 `StoryTreeController treeController`、`StoryDialogueController dialogueController`、`StoryUIPage storyUIPage`、`CharacterRegistry characterRegistry`、`Dictionary storyDatas`。保留 `enum StoryBlockState { Locked, Current, Completed }`(移到此文件或独立文件)。保留 `ClearAllStorySave()`(改为调用新 `StorySaveModule` 接口)。
+- **公共 API:** `void OpenChapter(string chapterIndex)`(构建树)、`StoryData GetStoryData(string chapterIndex)`。
+
+#### A6. `Story/Tree/StoryTreeController.cs`(重建自 `Storyline.cs`)
+
+- **描述:** 从 `StoryData`/存档构建 block 视图与连接线,管理状态、解锁重算与存取。路径 `/ichni Official/Assets/Scripts/Story/Tree/StoryTreeController.cs`。
+- **遵循模式:** 参考旧 `Storyline.cs` 的 `SetUpStoryline`/`Generate*Block`/`GenerateConnector`/`SaveStoryline`/`ResetStory` 结构与 `ScrollRect content` 布局逻辑。
+- **公共 API:**
+ - `void BuildChapter(string chapterIndex)`:优先 `LoadChapter`,无存档则 `ResetToInitial`。
+ - `StoryBlockView GenerateBlock(StoryBlockDefinition def)` / `void GenerateConnector(string fromBlockId, string toBlockId)`。
+ - `void OnBlockCompleted(string blockId)`:设该 block `Completed`,遍历所有 `Locked` block 用 `UnlockCondition.IsSatisfied(...)` 重算,满足者置 `Current`(并按需生成尚未显示的后继 block/连接线),刷新连接线,保存。
+ - `void UnlockBlock(string blockId)` / `void InsertBlock(StoryBlockDefinition def, string fromBlockId)`:供 Yarn 树命令(A11)调用,实现"混合式"动态解锁/插入。
+ - `void SaveChapter()` / `void LoadChapter(string chapterIndex)` / `void ResetToInitial(string chapterIndex)`。
+ - `StoryBlockView currentBlock { get; }`、`IReadOnlyList blocks`。
+- **解锁判定:** `IsSatisfied` 的 `getVar` 委托指向 `StoryVariableStorage`(A8),`isCompleted` 指向已完成 block 集合。
+- **依赖:** A1、A2、A4、A8、`GameSaveManager.StorySaveModule`(重建后,见 A13)、`ChapterSelectionManager`。
+
+#### A7. `Story/Tree/StoryBlockView.cs` + `TextBlockView.cs` + `SongBlockView.cs` + `TutorialBlockView.cs` + `BlockConnectorView.cs`(重建自 Blocks/*)
+
+- `**StoryBlockView`(抽象,`MonoBehaviour`):** `string blockId`、`StoryBlockState state`、`RectTransform inPort/outPort`、`Button button`;`virtual void ApplyState(StoryBlockState)`(更新视觉:锁定/当前/已完成外观);`abstract StoryBlockSave GetSave()`;`abstract void OnClicked()`。
+- `**TextBlockView`:** 覆盖 `OnClicked()`:`state == Locked` → 忽略;否则 `StoryManager.instance.dialogueController.PlayBlock(this)`(传 `yarnNodeName`)。参考旧 `DialogBlockUI` 的 `button.onClick` + 状态判断。
+- `**SongBlockView` / `TutorialBlockView`:** 占位实现——显示标题/状态,`OnClicked()` 暂仅 `Debug.Log`(保留旧 `SongBlockUI`/`TutorialBlockUI` 视觉字段,交互逻辑注释或占位)。
+- `**BlockConnectorView`:** 沿用旧 `BlockConnectorUI`,用 `UILineRenderer` 在 `outPort`→`inPort` 画曲线;`SetCurve()`。
+- **依赖:** A6、A9(对话触发)。
+
+#### A8. `Story/Dialogue/StoryVariableStorage.cs`(新建)
+
+- **描述:** 自定义 Yarn 变量存储,桥接 `GameSaveManager.StorySaveModule.storyVariables`,ES3 持久化。路径 `/ichni Official/Assets/Scripts/Story/Dialogue/StoryVariableStorage.cs`。
+- **遵循模式:** 继承 `Yarn.Unity.VariableStorageBehaviour`,实现其抽象/虚方法(`SetValue`/`TryGetValue`/`Clear`/`Contains` 等——**实现步骤时先 `printAsset` 或 view `VariableStorageBehaviour.cs` 核对当前签名**)。
+- **要点:** Yarn 变量以 `$` 前缀命名;本存储把布尔/数值/字符串映射到 `storyVariables`(现为 `Dictionary`,需扩展为支持多类型,见 A13)。变量读写触发 `StorySaveModule` 持久化。
+- **公共 API(供 A6 解锁判定复用):** `int GetIntVariable(string name)`、`bool HasVariable(string name)`。
+- **依赖:** A13(`StorySaveModule`)。
+
+#### A9. `Story/Dialogue/IPortraitRenderer.cs` + `SpritePortraitRenderer.cs`(新建)
+
+- **描述:** 立绘渲染抽象 + Sprite 实现。路径 `/ichni Official/Assets/Scripts/Story/Dialogue/`。
+- `**IPortraitRenderer`:** `void Show(CharacterData character, string emotion)`、`void Hide()`、`void SetEmotion(string emotion)`、`void MoveTo(Vector2 anchoredPos, float duration)`、`void PlayEffect(string effect, float intensity)`(如 "jump"/"shake"/"nod")、`void SetActiveVisual(bool speaking)`(说话者高亮/变暗)。
+- `**SpritePortraitRenderer`(`MonoBehaviour, IPortraitRenderer`):** 持有 `UnityEngine.UI.Image`;`Show` 从 `CharacterData.emotionSprites` 取 Sprite;`MoveTo`/`PlayEffect` 用 DOTween(项目已含 DOTweenPro)实现跳动/移动/晃动。
+- **说明:** 未来 Live2D/Spine 只需新增实现 `IPortraitRenderer` 的组件,`CharacterData.portraitStyle`/`dynamicPortraitPrefab` 决定实例化哪个 renderer。
+
+#### A10. `Story/Dialogue/VNPortraitStage.cs`(新建)
+
+- **描述:** 管理多立绘槽位(如 Left/Center/Right),按 characterId 分配/复用 renderer。路径 `/ichni Official/Assets/Scripts/Story/Dialogue/VNPortraitStage.cs`。
+- **公共 API:** `void ShowPortrait(string characterId, string slot, string emotion)`、`void HidePortrait(string characterId)`、`void HideAll()`、`void MovePortrait(string characterId, string slot, float duration)`、`void PlayEffect(string characterId, string effect, float intensity)`、`void HighlightSpeaker(string characterId)`。
+- **内部:** `Dictionary activePortraits`;依据 `CharacterData.portraitStyle` 实例化对应 renderer 到槽位。
+- **依赖:** A3、A9。
+
+#### A11. `Story/Dialogue/StoryPresentationCommands.cs`(新建)
+
+- **描述:** 表现类 Yarn 命令集合(`[YarnCommand]`)。路径 `/ichni Official/Assets/Scripts/Story/Dialogue/StoryPresentationCommands.cs`。
+- **命令集(完整表现集):** 均委托到 `VNPortraitStage`/`VNDialoguePresenter`:
+ - `<>` / `<>` / `<>`
+ - `<>` / `<>` / `<>` / `<>`
+ - `<>`(背景切换)
+ - `<>`(Yarn 内置也可,视需要)
+- **注册方式:** 实例方法用 `[YarnCommand("show_portrait")]` 挂到与 `DialogueRunner` 同场景的组件上(Yarn 自动发现),或在 `StoryDialogueController.Awake` 用 `dialogueRunner.AddCommandHandler(...)` 显式注册。**实现步骤时先核对 `DialogueRunner.ActionRegistration.cs` 的 `AddCommandHandler` 重载与 `[YarnCommand]` 自动注册要求。**
+- **依赖:** A10、A12。
+
+#### A12. `Story/Dialogue/StoryTreeCommands.cs`(新建)
+
+- **描述:** 影响故事树/解锁的 Yarn 命令(替代旧 `StoryInterpreters` 的 `GenerateDialogBlock`/`GenerateSongBlock`/`SetUnlockKey`)。路径 `/ichni Official/Assets/Scripts/Story/Dialogue/StoryTreeCommands.cs`。
+- **命令集:**
+ - `<>` → `StoryTreeController.UnlockBlock`
+ - `<>` → 从当前 block 生成后继("混合式"动态插入)→ `StoryTreeController.InsertBlock`
+ - `<>` → 复用旧 `SetUnlockKey` 逻辑:写入 `SongSaveModule.storyUnlockKeys`,并把"解锁提示消息"入队到对话结束后执行(见 A14 结束回调)。
+- **依赖:** A6、A14、`GameSaveManager.SongSaveModule`、`ChapterSelectionManager`。
+
+#### A13. `Scripts/Saving/GameSaveManager.cs` → `StorySaveModule`(重建剧情存档模块)
+
+- **描述:** 重建 `StorySaveModule`,适配新 DTO 与多类型变量。路径 `/ichni Official/Assets/Scripts/Saving/GameSaveManager.cs`(`StorySaveModule` 分部/内嵌类)。
+- **改动:**
+ - block 存档改用 `ChapterStorySave`/`StoryBlockSave`(A4),ES3 存 `persistentDataPath/StorySaves/[Chapter].json`(沿用旧路径约定)。
+ - `storyVariables` 扩展为支持 Yarn 多类型(float/bool/string)——建议 `Dictionary` 序列化 + 类型标记,或三个分字典;供 `StoryVariableStorage`(A8)读写。
+ - 保留 `selectedChoices` 语义(Yarn 选项选择记录),如需回放已完成对话可保留(见"实现说明")。
+ - 保留 `SongSaveModule.storyUnlockKeys` 相关接口(A12 依赖)。
+ - `ClearAllStoryline()` / `ClearStoryKeys()` 接口保留,供 `StoryManager.ClearAllStorySave` 调用。
+- **注意:** `GameSaveManager` 含其它模块(`SongSaveModule`),改动**仅限剧情相关字段**,保持其余不变。**实现前先完整 view `GameSaveManager.cs` 的 `StorySaveModule` 现状。**
+
+#### A14. `Story/Dialogue/StoryDialogueController.cs`(新建)
+
+- **描述:** block → `DialogueRunner` 的桥接与生命周期协调。路径 `/ichni Official/Assets/Scripts/Story/Dialogue/StoryDialogueController.cs`。
+- **公共 API:**
+ - `void PlayBlock(TextBlockView block)`:记录当前 block 上下文,`storyUIPage` 淡出/对话页淡入,`dialogueRunner.StartDialogue(block.yarnNodeName)`。
+ - `List dialogueEndActions`(保留旧 `dialogEndActions` 语义,供 A12 `unlock_song` 入队解锁提示)。
+- **事件接线:** 订阅 `dialogueRunner.onDialogueComplete`:若当前 block 为 `Current` → `treeController.OnBlockCompleted(blockId)`;清空/执行 `dialogueEndActions`(弹解锁提示);`treeController.SaveChapter()`;对话页淡出、故事树页淡入。参考旧 `DialogManager.PlayDialog` 完成分支(旧 L138-152)。
+- **依赖:** Yarn `DialogueRunner`、A6、A7、A12、`StoryUIPage`。
+
+#### A15. `Story/Dialogue/VNDialoguePresenter.cs`(新建)
+
+- **描述:** VN 风格对话呈现器,继承 `Yarn.Unity.DialoguePresenterBase`。路径 `/ichni Official/Assets/Scripts/Story/Dialogue/VNDialoguePresenter.cs`。
+- **override:**
+ - `OnDialogueStartedAsync()`:显示对话面板(DOTween 淡入)、`portraitStage` 就绪。
+ - `RunLineAsync(LocalizedLine line, LineCancellationToken token)`:从 `line.CharacterName` 查 `CharacterRegistry` 取显示名(Unity Localization),高亮说话者立绘(`portraitStage.HighlightSpeaker`),打字机逐字显示 `line.TextWithoutCharacterName`;等待玩家点击推进(点击→`token` hurry/advance)。
+ - `RunOptionsAsync(DialogueOption[], LineCancellationToken)`:实例化选项按钮面板,等待选择,返回选中项;记录到 `selectedChoices`。
+ - `OnDialogueCompleteAsync()`:对话面板淡出。
+- **要点:** 全程 `YarnTask` 异步;打字机需响应 `LineCancellationToken`(点击加速/跳过)。**实现步骤时先 view `DialoguePresenterBase.cs` 与 `LocalizedLine`/`DialogueOption` 类型核对属性名(`CharacterName`/`TextWithoutCharacterName`/`Text`)。**
+- **依赖:** A3、A10、Unity Localization。
+
+#### A16. `Story/Dialogue/StoryFunctions.cs`(新建,可选)
+
+- **描述:** `[YarnFunction]` 辅助,让 `.yarn` 的 `<>` 能读取剧情状态。路径 `/ichni Official/Assets/Scripts/Story/Dialogue/StoryFunctions.cs`。
+- **示例:** `[YarnFunction("is_completed")] static bool IsCompleted(string blockId)`、`[YarnFunction("story_var")] static int StoryVar(string name)`。
+- **说明:** 多数条件可直接用 Yarn 变量(`$var`)+ `StoryVariableStorage` 完成;此文件仅在需要读取"block 完成状态"等非变量信息时补充。
+
+#### A17. 删除/弃用旧脚本
+
+- **删除:** `Story/Dialog/DialogManager.cs`、`Story/Dialog/DialogModule.cs`、`Story/Dialog/StoryInterpreters.cs`;`Story/StoryUI/DialogUI/*`(`DialogUIPage`/`DialogContentFrame`/`DialogTextUI`/`ChoiceGroupUI`/`ChoiceButtonUI`);`Story/StoryUI/Blocks/*` 旧类(迁移到 A7 后删除);旧 `Story/StoryData/StoryData.cs`、旧 `Story/Dialog/StoryManager.cs`、旧 `Story/StoryUI/Storyline.cs`(被 A2/A5/A6 取代)。
+- **注意:** DynamicExpresso 若无其它使用者,可保留包(供将来),但剧情不再依赖它。删除前 `grep` 确认无外部引用(尤其 `ChapterSelectionManager`/`Menu` 对 `DialogManager` 的调用点,需改为 `StoryDialogueController`)。
+
+------
+
+### B. Text Files(`.yarn` 脚本)
+
+#### B1. 示例章节 Yarn 脚本
+
+- **描述:** 每个 TextBlock 对应一个 Yarn 节点。路径示例 `/ichni Official/Assets/Story/Chapters/Chapter1/Chapter1.yarn`(新目录,脱离旧 `Resources/Story/.../Dialogs`)。
+- **内容:** 为若干 TextBlock 各写一个 `title:` 节点,含 speaker 行、`<>`/`<>` 等表现命令、`->` 选项、`<>` 条件分支、`<>`、必要处 `<>`/`<>`。用于验证管线。
+- **依赖:** A11/A12 命令、A8 变量。
+
+------
+
+### C. Unity Assets(ScriptableObject / YarnProject)
+
+#### C1. `Chapter1` YarnProject
+
+- **名称:** `/ichni Official/Assets/Story/Chapters/Chapter1/Chapter1.yarnproject`。
+- **描述:** 编译 B1 的 `.yarn`,配置 **Localisation = Unity**(使用 `UnityLocalisedLineProvider`),关联 Unity Localization String Table Collection。
+- **Bezi Actions:** 无直接创建 YarnProject 的 Action → **手动创建**(见 E2)。
+
+#### C2. `StoryData`(Chapter1)资产
+
+- **名称:** `/ichni Official/Assets/Story/Chapters/Chapter1/Chapter1_StoryData.asset`。
+- **描述:** 定义 Chapter1 故事树 block、连接、初始状态、`yarnNodeName`、解锁条件,引用 C1 YarnProject。
+- **Bezi Actions:** `createOrUpdateScriptableObject`(`scriptableObjectType: "Ichni.Story.StoryData"`)。
+- **依赖:** A2、C1。
+
+#### C3. `CharacterRegistry` + 角色资产
+
+- **名称:** `/ichni Official/Assets/Story/Characters/CharacterRegistry.asset`。
+- **描述:** 登记若干测试角色(characterId、displayNameKey、emotion→Sprite)。
+- **Bezi Actions:** `createOrUpdateScriptableObject`(`scriptableObjectType: "Ichni.Story.CharacterRegistry"`)。
+- **依赖:** A3。
+
+------
+
+### D. Unity Actions(场景 / 预制体 / UI 接线,均在 `MenuScene.unity`)
+
+#### D1. Yarn 运行时对象
+
+- **描述:** 在剧情 UI 层新建 `StoryDialogueRoot` GameObject,挂 `DialogueRunner` + `UnityLocalisedLineProvider` + `StoryVariableStorage` + `StoryDialogueController` + `StoryPresentationCommands` + `StoryTreeCommands`;`DialogueRunner.yarnProject` 指向 C1,`dialogueViews` 加入 D2 的 `VNDialoguePresenter`,`variableStorage` 指向 `StoryVariableStorage`,`lineProvider` 指向 `UnityLocalisedLineProvider`。
+- **Bezi Actions:** `createGameObject`、`addOrUpdateComponent`(逐个组件;`DialogueRunner` 字段引用用 `UnityObjectReference`)。
+- **依赖:** A8/A11/A12/A14/A15、C1。
+
+#### D2. VN 对话 UI
+
+- **描述:** 构建 VN 对话面板:全屏遮罩/背景 `Image`、立绘舞台(Left/Center/Right 槽位 `Image`)、对话框(说话者名 `TextMeshProUGUI` + 正文 `TextMeshProUGUI` + 继续指示)、选项面板(竖直布局,运行时实例化选项按钮)。挂 `VNDialoguePresenter`、`VNPortraitStage`,槽位挂 `SpritePortraitRenderer`。
+- **Bezi Actions:** `createGameObject`、`addOrUpdateComponent`(`UnityEngine.UI.Image`/`TMPro.TextMeshProUGUI`/`UnityEngine.UI.Button`)、`setRectTransformLayout`(锚点/拉伸)。
+- **依赖:** A9/A10/A15。
+
+#### D3. 故事树 UI 与 block 预制体
+
+- **描述:** 构建/复用故事树滚动视图(`ScrollRect content`);创建 `TextBlockView`/`SongBlockView`/`TutorialBlockView`/`BlockConnectorView` 预制体(含 `Button`、`inPort`/`outPort`、状态视觉),供 `StoryTreeController` 实例化。将 `StoryManager`/`StoryTreeController`/`StoryUIPage` 组件接线到既有剧情 UI 对象。
+- **Bezi Actions:** `createGameObject`、`addOrUpdateComponent`、`setRectTransformLayout`、`createPrefab`(block 预制体)。
+- **依赖:** A5/A6/A7、C2/C3。
+
+------
+
+### E. Manual User Actions
+
+#### E1. 安装 Unity Localization,规划弃用 I2
+
+- **描述:** 通过 Package Manager 安装 `com.unity.localization`(使 `UnityLocalisedLineProvider.Installed.cs` 生效);创建 Locale 与 String Table Collection(对话文本 + UI 文本)。I2 的实际移除可后置,避免一次性破坏现有 UI 文本;本计划仅让**剧情对话**走 Unity Localization。
+
+#### E2. 创建并配置 YarnProject
+
+- **描述:** 在 `Assets/Story/Chapters/Chapter1/` 右键创建 YarnProject,纳入 B1 的 `.yarn`;Inspector 中设 Localisation 为 Unity 并关联 String Table Collection;导入生成基础语言行。(Bezi Actions 无 YarnProject 创建能力。)
+
+#### E3. 核对 Yarn 命令/呈现器 API 签名
+
+- **描述:** 实现 A8/A11/A15 前,在 Editor 中确认 `VariableStorageBehaviour`、`DialoguePresenterBase`、`LocalizedLine`、`DialogueOption`、`DialogueRunner.AddCommandHandler`/`[YarnCommand]` 的确切签名(版本 3.2.1),避免 API 漂移导致编译错误。
+
+------
+
+## Key Patterns to Reuse
+
+- **Source:** `/ichni Official/Assets/Scripts/Story/StoryUI/Storyline.cs` — **Pattern:** 故事树构建、连接线生成、按章节 ES3 存取、`ScrollRect` 布局,迁移到 `StoryTreeController`。
+- **Source:** `/ichni Official/Assets/Scripts/Story/Dialog/DialogManager.cs`(L138-152 完成分支、`dialogEndActions`)— **Pattern:** 对话完成 → 置 block `Completed` → 执行结束回调 → 存档,迁移到 `StoryDialogueController.onDialogueComplete`。
+- **Source:** `/ichni Official/Assets/Scripts/Story/Dialog/StoryInterpreters.cs` — **Pattern:** `SetUnlockKey` 的歌曲解锁 + 消息入队逻辑,迁移到 `StoryTreeCommands.unlock_song`。
+- **Source:** `SLSUtilities/General/Singleton` — **Pattern:** `StoryManager` 单例,替换手写 `instance = this`。
+- **Source:** 旧 `StoryData.cs` 的 Odin `[FoldoutGroup("$blockName")]`/`[InlineProperty]` — **Pattern:** 新 `StoryBlockDefinition` 的 Inspector 组织。
+- **Source:** `DialogCharacter`(旧 `DialogModule.cs`:`name`/`title`/`emotions`)— **Pattern:** 演进为 `CharacterData`(`characterId`/`displayNameKey`/`emotionSprites`)。
+
+------
+
+## Implementation Notes
+
+- **Yarn 3.x 异步:** Presenter 全部 `YarnTask`;打字机与"点击推进"须响应 `LineCancellationToken`(hurry-up / cancel),否则点击无法加速或跳过。
+- **命令注册:** `[YarnCommand]` 自动发现要求承载组件与 `DialogueRunner` 处于可解析范围;若自动发现不稳定,改用 `DialogueRunner.AddCommandHandler` 显式注册(在 `StoryDialogueController.Awake`)。
+- **变量类型:** Yarn 变量支持 number/bool/string;旧 `storyVariables` 仅 `int`,须扩展多类型存储(A13),否则 `StoryVariableStorage` 无法承载布尔/字符串。
+- **本地化桥接:** speaker 名解析来自 Yarn 行的 `CharacterName`;显示名走 Unity Localization(`CharacterData.displayNameKey`),正文走 `UnityLocalisedLineProvider` 关联的 String Table。
+- **立绘抽象:** 不要在 Presenter/命令中直接写 `Image`;一律经 `IPortraitRenderer`,为 Live2D/Spine 预留。DOTween 已在项目中,用于跳动/移动/晃动。
+- **混合式解锁:** 静态解锁在 `OnBlockCompleted` 重算 `UnlockCondition`;动态解锁由 `<>`/`<>` 命令在对话中触发——两者都最终调用 `StoryTreeController`,保证存档一致。
+- **存档兼容:** 这是破坏性重构,旧 `StorySaves/*.json`/`Choices.json` 结构不兼容;建议在 `StorySaveModule` 加版本号或提供一次性清档(`ClearAllStorySave` 已存在)。
+- **场景范围:** 所有场景接线在 `MenuScene.unity`;剧情为 Official 独有,无需同步到 `IchniCreatorStudio`。
+- **可运行性分阶段:** 每阶段完成后项目应可编译、可进入剧情页。先落数据/树(占位对话),再接 Yarn 管线,再做 VN 呈现与命令,最后清理旧系统。
+
+------
+
+## TODO
+
+**阶段 1 — 数据与故事树骨架(可编译、可显示占位树)**
+
+-
+
+ 新建 `StoryBlockDefinition.cs`(block 定义 + `UnlockCondition`/`VariableCondition` + `StoryBlockType`)
+
+-
+
+ 重建 `StoryData.cs`(章节 block 列表 + `YarnProject` 引用 + 查询 API)
+
+-
+
+ 新建 `CharacterData.cs` + `CharacterRegistry.cs`(含 `portraitStyle` 预留)
+
+-
+
+ 重建 `StorySave.cs`(`StoryBlockSave`/`BlockConnectorSave`/`ChapterStorySave`/`StoryVariablesSave`)
+
+-
+
+ 重建 `StoryManager.cs`(单例协调器 + `StoryBlockState`)
+
+-
+
+ 重建 `StoryTreeController.cs`(构建/解锁重算/存取,从 `Storyline` 迁移)
+
+-
+
+ 重建 `StoryBlockView` + `TextBlockView`/`SongBlockView`/`TutorialBlockView`/`BlockConnectorView`
+
+-
+
+ 用 `createOrUpdateScriptableObject` 生成 `Chapter1_StoryData.asset` 与 `CharacterRegistry.asset`(用户已手动创建三个 SO 资产)
+
+-
+
+ 用 Bezi Actions 搭建故事树滚动视图与 block 预制体,接线 `StoryManager`/`StoryTreeController`/`StoryUIPage`(改为用户手动制作,见阶段总结的手动步骤)
+
+-
+
+ (提前合并原阶段 5 清理)删除旧剧情/对话脚本网:`DialogManager`/`DialogModule`/`StoryInterpreters`/`Storyline`/旧 `StoryManager`/旧 Block UIs/`DialogUI/*`/旧 `StoryData`/旧 `StorySave`;`MenuManager` 移除失效 `dialogUIPage` 字段
+
+**阶段 2 — Yarn 对话管线(点击文本块可跑通 Yarn 节点)**
+
+-
+
+ 安装 `com.unity.localization` 并创建 Locale / String Table Collection(手动)
+
+-
+
+ 手动创建 `Chapter0.yarnproject` 并设为 Unity Localisation,编写示例 `Chapter0.yarn`
+
+-
+
+ 新建 `StoryVariableStorage.cs`(`VariableStorageBehaviour` 桥接存档,多类型变量)
+
+-
+
+ 重建 `GameSaveManager.StorySaveModule`(新 DTO + 多类型 `storyVariables`,保留 `SongSaveModule` 不变)——已在阶段 1 StorySave 步骤中一并完成:树+选项按章节(单 key 容器),变量全局(float/string/bool 三类型,匹配 Yarn 契约)
+
+-
+
+ 新建 `StoryDialogueController.cs`(`PlayBlock` + `onDialogueComplete` → 置 `Completed`/重算解锁/存档/结束回调)
+
+-
+
+ 在 `MenuScene` 搭建 `StoryDialogueRoot`(`DialogueRunner` + `StoryVariableStorage` + 控制器),接线到 `Chapter0.yarnproject`。注:项目未安装 `com.unity.localization`,`Chapter0.yarnproject` 使用 Yarn 内置本地化;`DialogueRunner` 在无 lineProvider 时会自动创建 `BuiltinLocalisedLineProvider`,故阶段 2 无需接 Unity Localization。呈现器(dialoguePresenters)留空,待阶段 3 接入 VN 呈现器。
+
+**阶段 3 — VN 呈现与立绘**
+
+-
+
+ 新建 `VNDialoguePresenter.cs`(`DialoguePresenterBase`:打字机行、说话者显示名、选项面板、淡入淡出,响应 `LineCancellationToken`)
+
+-
+
+ 新建 `IPortraitRenderer.cs` + `SpritePortraitRenderer.cs`(DOTween 跳动/移动/晃动)
+
+-
+
+ 新建 `VNPortraitStage.cs`(多槽位管理,按 `portraitStyle` 实例化 renderer)
+
+-
+
+ 用 Bezi Actions 搭建 VN 对话 UI(背景/立绘槽位/对话框/选项面板),接入 `DialogueRunner.dialogueViews`
+
+**阶段 4 — 表现与树命令、条件**
+
+-
+
+ 新建 `StoryPresentationCommands.cs`(`show/hide/move/jump/shake_portrait`、`set_emotion`、`set_background`)
+
+-
+
+ 新建 `StoryTreeCommands.cs`(`unlock_block`/`insert_block`/`unlock_song`,迁移旧 `SetUnlockKey` 歌曲解锁+消息入队)
+
+-
+
+ 新建 `StoryFunctions.cs`(`[YarnFunction]` `is_completed`/`story_var`,按需)
+
+-
+
+ 在示例 `.yarn` 中覆盖表现命令、选项、`<>` 条件、`<>`、`<>` 并验证
+
+**阶段 5 — 清理旧系统**
+
+-
+
+ `grep` 确认并改接 `ChapterSelectionManager`/`Menu` 等对 `DialogManager` 的调用点到 `StoryDialogueController`
+
+-
+
+ 删除 `DialogManager.cs`/`DialogModule.cs`/`StoryInterpreters.cs`/`DialogUI/*`/旧 `Blocks/*`/旧 `Storyline.cs`/旧 `StoryData.cs`/旧 `StoryManager.cs`
+
+-
+
+ 重新编译并清零剧情相关编译错误
\ No newline at end of file