feat(huoshan): 接入表达界面序列帧与本地化文字

This commit is contained in:
2026-07-26 13:06:25 +08:00
parent 3c27b0ef03
commit 0aae59262a
21 changed files with 4285 additions and 5 deletions
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 4c8fb9b5f91b4e35a9d61cc6307b3ab7
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 4c05bc7d223b4f41b37b289cda62ce31
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,454 @@
{ "frames": {
"火山释放log界面 0.aseprite": {
"frame": { "x": 0, "y": 0, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 300
},
"火山释放log界面 1.aseprite": {
"frame": { "x": 384, "y": 0, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 2.aseprite": {
"frame": { "x": 768, "y": 0, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 3.aseprite": {
"frame": { "x": 1152, "y": 0, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 4.aseprite": {
"frame": { "x": 1536, "y": 0, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 5.aseprite": {
"frame": { "x": 1920, "y": 0, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 6.aseprite": {
"frame": { "x": 0, "y": 216, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 7.aseprite": {
"frame": { "x": 384, "y": 216, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 8.aseprite": {
"frame": { "x": 768, "y": 216, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 9.aseprite": {
"frame": { "x": 1152, "y": 216, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 10.aseprite": {
"frame": { "x": 1536, "y": 216, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 11.aseprite": {
"frame": { "x": 1920, "y": 216, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 12.aseprite": {
"frame": { "x": 0, "y": 432, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 13.aseprite": {
"frame": { "x": 384, "y": 432, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 14.aseprite": {
"frame": { "x": 768, "y": 432, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 15.aseprite": {
"frame": { "x": 1152, "y": 432, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 16.aseprite": {
"frame": { "x": 1536, "y": 432, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 50
},
"火山释放log界面 17.aseprite": {
"frame": { "x": 1920, "y": 432, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 50
},
"火山释放log界面 18.aseprite": {
"frame": { "x": 0, "y": 648, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 19.aseprite": {
"frame": { "x": 384, "y": 648, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 20.aseprite": {
"frame": { "x": 768, "y": 648, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 21.aseprite": {
"frame": { "x": 1152, "y": 648, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 50
},
"火山释放log界面 22.aseprite": {
"frame": { "x": 1536, "y": 648, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 23.aseprite": {
"frame": { "x": 1920, "y": 648, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 24.aseprite": {
"frame": { "x": 0, "y": 864, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 25.aseprite": {
"frame": { "x": 384, "y": 864, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 50
},
"火山释放log界面 26.aseprite": {
"frame": { "x": 768, "y": 864, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 27.aseprite": {
"frame": { "x": 1152, "y": 864, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 28.aseprite": {
"frame": { "x": 1536, "y": 864, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 29.aseprite": {
"frame": { "x": 1920, "y": 864, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 300
},
"火山释放log界面 30.aseprite": {
"frame": { "x": 0, "y": 1080, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 31.aseprite": {
"frame": { "x": 384, "y": 1080, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 32.aseprite": {
"frame": { "x": 768, "y": 1080, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 33.aseprite": {
"frame": { "x": 1152, "y": 1080, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 34.aseprite": {
"frame": { "x": 1536, "y": 1080, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 35.aseprite": {
"frame": { "x": 1920, "y": 1080, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 36.aseprite": {
"frame": { "x": 0, "y": 1296, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 37.aseprite": {
"frame": { "x": 384, "y": 1296, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 38.aseprite": {
"frame": { "x": 768, "y": 1296, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 39.aseprite": {
"frame": { "x": 1152, "y": 1296, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 40.aseprite": {
"frame": { "x": 1536, "y": 1296, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 41.aseprite": {
"frame": { "x": 1920, "y": 1296, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 42.aseprite": {
"frame": { "x": 0, "y": 1512, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 43.aseprite": {
"frame": { "x": 384, "y": 1512, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 44.aseprite": {
"frame": { "x": 768, "y": 1512, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 45.aseprite": {
"frame": { "x": 1152, "y": 1512, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 46.aseprite": {
"frame": { "x": 1536, "y": 1512, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 47.aseprite": {
"frame": { "x": 1920, "y": 1512, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 300
},
"火山释放log界面 48.aseprite": {
"frame": { "x": 0, "y": 1728, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 300
},
"火山释放log界面 49.aseprite": {
"frame": { "x": 384, "y": 1728, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 50
},
"火山释放log界面 50.aseprite": {
"frame": { "x": 768, "y": 1728, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 50
},
"火山释放log界面 51.aseprite": {
"frame": { "x": 1152, "y": 1728, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 50
},
"火山释放log界面 52.aseprite": {
"frame": { "x": 1536, "y": 1728, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 50
}
},
"meta": {
"app": "https://www.aseprite.org/",
"version": "1.3.17.2-x64",
"image": "火山释放log界面.png",
"format": "RGBA8888",
"size": { "w": 2304, "h": 1944 },
"scale": "1",
"frameTags": [
{ "name": "deep", "from": 0, "to": 14, "direction": "forward", "color": "#000000ff" },
{ "name": "UI flash", "from": 15, "to": 29, "direction": "forward", "color": "#000000ff" },
{ "name": "huan", "from": 30, "to": 40, "direction": "forward", "color": "#000000ff" },
{ "name": "output", "from": 41, "to": 47, "direction": "forward", "color": "#000000ff" },
{ "name": "Floating", "from": 48, "to": 48, "direction": "forward", "color": "#000000ff" },
{ "name": "Click", "from": 49, "to": 52, "direction": "forward", "color": "#000000ff" }
],
"layers": [
{ "name": "Layer", "opacity": 255, "blendMode": "normal" },
{ "name": "图层 3", "opacity": 255, "blendMode": "addition" },
{ "name": "组 2" },
{ "name": "Layer", "group": "组 2", "opacity": 255, "blendMode": "normal" },
{ "name": "图层 1", "group": "组 2", "opacity": 255, "blendMode": "normal" },
{ "name": "output", "opacity": 255, "blendMode": "normal" },
{ "name": "fade in", "opacity": 255, "blendMode": "normal" }
],
"slices": [
]
}
}
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 228a3f5c649244e3b8ae027756a00fb8
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
File diff suppressed because it is too large Load Diff
@@ -243,6 +243,22 @@ MonoBehaviour:
m_Key: memory_index_label
m_Metadata:
m_Items: []
- m_Id: 200000000000000001
m_Key: huoshan_expression_objective
m_Metadata:
m_Items: []
- m_Id: 200000000000000002
m_Key: huoshan_expression_output
m_Metadata:
m_Items: []
- m_Id: 200000000000000003
m_Key: huoshan_expression_integration
m_Metadata:
m_Items: []
- m_Id: 200000000000000004
m_Key: huoshan_expression_interference
m_Metadata:
m_Items: []
m_Metadata:
m_Items: []
m_KeyGenerator:
+16
View File
@@ -257,6 +257,22 @@ MonoBehaviour:
m_Localized: Memory Index @VIS
m_Metadata:
m_Items: []
- m_Id: 200000000000000001
m_Localized: "\u76EE\u6807\uFF1A\u5265\u79BB\u7EA2\u8272\u7684\u5E72\u6270\u8BED\u8A00\uFF0C\u805A\u96C6\u84DD\u8272\u7684\u771F\u5B9E\u8868\u8FBE"
m_Metadata:
m_Items: []
- m_Id: 200000000000000002
m_Localized: "\u8F93\u51FA"
m_Metadata:
m_Items: []
- m_Id: 200000000000000003
m_Localized: "{0}% \u8BED\u8A00\u6574\u5408\u5B8C\u6210\u5EA6"
m_Metadata:
m_Items: []
- m_Id: 200000000000000004
m_Localized: "{0} \u5904\u5F02\u5E38\u601D\u7EEA\u4ECD\u5728\u5E72\u6270\u8868\u8FBE"
m_Metadata:
m_Items: []
references:
version: 2
RefIds:
+16
View File
@@ -246,6 +246,22 @@ MonoBehaviour:
m_Localized: "\u8A18\u61B6\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9@VIS"
m_Metadata:
m_Items: []
- m_Id: 200000000000000001
m_Localized: "\u76EE\u6807\uFF1A\u5265\u79BB\u7EA2\u8272\u7684\u5E72\u6270\u8BED\u8A00\uFF0C\u805A\u96C6\u84DD\u8272\u7684\u771F\u5B9E\u8868\u8FBE"
m_Metadata:
m_Items: []
- m_Id: 200000000000000002
m_Localized: "\u8F93\u51FA"
m_Metadata:
m_Items: []
- m_Id: 200000000000000003
m_Localized: "{0}% \u8BED\u8A00\u6574\u5408\u5B8C\u6210\u5EA6"
m_Metadata:
m_Items: []
- m_Id: 200000000000000004
m_Localized: "{0} \u5904\u5F02\u5E38\u601D\u7EEA\u4ECD\u5728\u5E72\u6270\u8868\u8FBE"
m_Metadata:
m_Items: []
references:
version: 2
RefIds: []
@@ -250,6 +250,22 @@ MonoBehaviour:
m_Localized: "\u8BB0\u5FC6\u7D22\u5F15@VIS"
m_Metadata:
m_Items: []
- m_Id: 200000000000000001
m_Localized: "\u76EE\u6807\uFF1A\u5265\u79BB\u7EA2\u8272\u7684\u5E72\u6270\u8BED\u8A00\uFF0C\u805A\u96C6\u84DD\u8272\u7684\u771F\u5B9E\u8868\u8FBE"
m_Metadata:
m_Items: []
- m_Id: 200000000000000002
m_Localized: "\u8F93\u51FA"
m_Metadata:
m_Items: []
- m_Id: 200000000000000003
m_Localized: "{0}% \u8BED\u8A00\u6574\u5408\u5B8C\u6210\u5EA6"
m_Metadata:
m_Items: []
- m_Id: 200000000000000004
m_Localized: "{0} \u5904\u5F02\u5E38\u601D\u7EEA\u4ECD\u5728\u5E72\u6270\u8868\u8FBE"
m_Metadata:
m_Items: []
references:
version: 2
RefIds:
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 48b918d0fbb84d84eb3d3a6469578703
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,454 @@
{ "frames": {
"火山释放log界面 0.aseprite": {
"frame": { "x": 0, "y": 0, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 300
},
"火山释放log界面 1.aseprite": {
"frame": { "x": 384, "y": 0, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 2.aseprite": {
"frame": { "x": 768, "y": 0, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 3.aseprite": {
"frame": { "x": 1152, "y": 0, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 4.aseprite": {
"frame": { "x": 1536, "y": 0, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 5.aseprite": {
"frame": { "x": 1920, "y": 0, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 6.aseprite": {
"frame": { "x": 0, "y": 216, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 7.aseprite": {
"frame": { "x": 384, "y": 216, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 8.aseprite": {
"frame": { "x": 768, "y": 216, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 9.aseprite": {
"frame": { "x": 1152, "y": 216, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 10.aseprite": {
"frame": { "x": 1536, "y": 216, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 11.aseprite": {
"frame": { "x": 1920, "y": 216, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 12.aseprite": {
"frame": { "x": 0, "y": 432, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 13.aseprite": {
"frame": { "x": 384, "y": 432, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 14.aseprite": {
"frame": { "x": 768, "y": 432, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 15.aseprite": {
"frame": { "x": 1152, "y": 432, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 16.aseprite": {
"frame": { "x": 1536, "y": 432, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 50
},
"火山释放log界面 17.aseprite": {
"frame": { "x": 1920, "y": 432, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 50
},
"火山释放log界面 18.aseprite": {
"frame": { "x": 0, "y": 648, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 19.aseprite": {
"frame": { "x": 384, "y": 648, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 20.aseprite": {
"frame": { "x": 768, "y": 648, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 21.aseprite": {
"frame": { "x": 1152, "y": 648, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 50
},
"火山释放log界面 22.aseprite": {
"frame": { "x": 1536, "y": 648, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 23.aseprite": {
"frame": { "x": 1920, "y": 648, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 24.aseprite": {
"frame": { "x": 0, "y": 864, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 25.aseprite": {
"frame": { "x": 384, "y": 864, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 50
},
"火山释放log界面 26.aseprite": {
"frame": { "x": 768, "y": 864, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 27.aseprite": {
"frame": { "x": 1152, "y": 864, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 28.aseprite": {
"frame": { "x": 1536, "y": 864, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 29.aseprite": {
"frame": { "x": 1920, "y": 864, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 300
},
"火山释放log界面 30.aseprite": {
"frame": { "x": 0, "y": 1080, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 31.aseprite": {
"frame": { "x": 384, "y": 1080, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 32.aseprite": {
"frame": { "x": 768, "y": 1080, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 33.aseprite": {
"frame": { "x": 1152, "y": 1080, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 34.aseprite": {
"frame": { "x": 1536, "y": 1080, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 35.aseprite": {
"frame": { "x": 1920, "y": 1080, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 36.aseprite": {
"frame": { "x": 0, "y": 1296, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 37.aseprite": {
"frame": { "x": 384, "y": 1296, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 38.aseprite": {
"frame": { "x": 768, "y": 1296, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 39.aseprite": {
"frame": { "x": 1152, "y": 1296, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 40.aseprite": {
"frame": { "x": 1536, "y": 1296, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 41.aseprite": {
"frame": { "x": 1920, "y": 1296, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 42.aseprite": {
"frame": { "x": 0, "y": 1512, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 43.aseprite": {
"frame": { "x": 384, "y": 1512, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 44.aseprite": {
"frame": { "x": 768, "y": 1512, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 45.aseprite": {
"frame": { "x": 1152, "y": 1512, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 46.aseprite": {
"frame": { "x": 1536, "y": 1512, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 100
},
"火山释放log界面 47.aseprite": {
"frame": { "x": 1920, "y": 1512, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 300
},
"火山释放log界面 48.aseprite": {
"frame": { "x": 0, "y": 1728, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 300
},
"火山释放log界面 49.aseprite": {
"frame": { "x": 384, "y": 1728, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 50
},
"火山释放log界面 50.aseprite": {
"frame": { "x": 768, "y": 1728, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 50
},
"火山释放log界面 51.aseprite": {
"frame": { "x": 1152, "y": 1728, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 50
},
"火山释放log界面 52.aseprite": {
"frame": { "x": 1536, "y": 1728, "w": 384, "h": 216 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 384, "h": 216 },
"sourceSize": { "w": 384, "h": 216 },
"duration": 50
}
},
"meta": {
"app": "https://www.aseprite.org/",
"version": "1.3.17.2-x64",
"image": "火山释放log界面.png",
"format": "RGBA8888",
"size": { "w": 2304, "h": 1944 },
"scale": "1",
"frameTags": [
{ "name": "deep", "from": 0, "to": 14, "direction": "forward", "color": "#000000ff" },
{ "name": "UI flash", "from": 15, "to": 29, "direction": "forward", "color": "#000000ff" },
{ "name": "huan", "from": 30, "to": 40, "direction": "forward", "color": "#000000ff" },
{ "name": "output", "from": 41, "to": 47, "direction": "forward", "color": "#000000ff" },
{ "name": "Floating", "from": 48, "to": 48, "direction": "forward", "color": "#000000ff" },
{ "name": "Click", "from": 49, "to": 52, "direction": "forward", "color": "#000000ff" }
],
"layers": [
{ "name": "Layer", "opacity": 255, "blendMode": "normal" },
{ "name": "图层 3", "opacity": 255, "blendMode": "addition" },
{ "name": "组 2" },
{ "name": "Layer", "group": "组 2", "opacity": 255, "blendMode": "normal" },
{ "name": "图层 1", "group": "组 2", "opacity": 255, "blendMode": "normal" },
{ "name": "output", "opacity": 255, "blendMode": "normal" },
{ "name": "fade in", "opacity": 255, "blendMode": "normal" }
],
"slices": [
]
}
}
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: ea6afc19c414ed845bf5e1e25d87736d
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+78
View File
@@ -15754,6 +15754,7 @@ GameObject:
- component: {fileID: 2138889543}
- component: {fileID: 2138889542}
- component: {fileID: 2138889541}
- component: {fileID: 2138889544}
m_Layer: 0
m_Name: ExpressSystem
m_TagString: Untagged
@@ -15795,6 +15796,7 @@ MonoBehaviour:
particleManager: {fileID: 3669563163941125876}
expressionView: {fileID: 5162511683866016917}
logReleasePresentation: {fileID: 2138889543}
screenPresentation: {fileID: 2138889544}
defaultAnxietyPhrases:
- "\u6211\u597D\u6015"
- "\u600E\u4E48\u529E"
@@ -15808,6 +15810,81 @@ MonoBehaviour:
glitchController: {fileID: 741515695}
screenGlitchMaterial: {fileID: 2100000, guid: 7409d06033d4497a8aff0a45ed262adf, type: 2}
screenStressCap: 0.85
--- !u!114 &2138889544
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2138889538}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5e1287ca2a7d4d2d90c1a668c0f5bb82, type: 3}
m_Name:
m_EditorClassIdentifier:
screenRenderer: {fileID: 3626916397455914676}
frames:
- {fileID: 2475106960429135033, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: -3018686756791756080, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: -7762782562587901372, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: 6625265547078579635, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: 7461434052930814397, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: -1769639259384888604, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: -9105301244200845963, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: 7521657326120150178, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: 4524964375248133060, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: -6917530116420385240, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: -9195277676627031450, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: 7978113386437416697, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: -3088149670310421145, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: 486791643248283349, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: 2569870372170235217, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: 2196588455413707, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: -4168424841396956304, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: -885030471381229662, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: -3177327948065696628, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: -4227968739011731899, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: -44405172868956476, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: -5854386603852539790, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: -1434448706802843238, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: -5097258639152567774, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: -2032677242487706974, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: 3235070887847625388, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: 6687545647259375070, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: 7969674779183715280, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: -8807926922164456437, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: -7960472639975281634, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: -6921053182411625036, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: 3136923306446429545, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: 5852485295143986112, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: 3033208833659572263, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: 3256320520044918563, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: 7492323341267239661, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: 8419774192124790175, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: 6452382506499545570, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: -1171027475308826896, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: 1875163490704458687, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: -1601491336104935719, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: 7005626334382754131, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: -6144116005922943403, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: -8203104523524772058, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: -625480284268031234, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: -3770330309446754423, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: 4360862351641127235, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: 1680188261396841632, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: 263117198173513460, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: 1042739936057972743, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: 3026354965058437897, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: 8353437890852674847, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
- {fileID: -7585816161148619266, guid: 9f16e7c0b1ad4f8ca326cc74d2a7e501, type: 3}
integrationProgressText: {fileID: 4809132844776029470}
interferenceCountText: {fileID: 700187870001090773}
outputButton: {fileID: 686920449707611471}
screenFont: {fileID: 11400000, guid: f242fb3dde1933640859f1c54591c9c8, type: 2}
objectivePosition: {x: -8.18, y: -4.08}
objectiveSize: {x: 7.4, y: 0.95}
objectiveFontSize: 0.28
objectiveColor: {r: 0.78, g: 0.91, b: 1, a: 1}
--- !u!114 &2138889541
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -18055,6 +18132,7 @@ MonoBehaviour:
languageDeepPanel2: {fileID: 2141248582}
focusSequenceButton: {fileID: 686920449707611471}
releaseLogSpriteRenderer: {fileID: 3626916397455914676}
screenPresentation: {fileID: 2138889544}
expressionPanelTimelineName: "\u706B\u5C71\u8868\u8FBE\u6A21\u5757/\u706B\u5C71\u8868\u8FBEpanel"
expressionConfirmTimelineName: "\u706B\u5C71\u8868\u8FBE\u6A21\u5757/\u706B\u5C71\u8868\u8FBE\u786E\u8BA4"
focusZoomScale: 1.6
@@ -32,7 +32,14 @@ namespace AibisDream.FixSystem
// 切换到深度表达相机
yield return CameraKit.Instance.SwitchCamera(CameraEnum.ExpressionDeep);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeOutAsync(0.5f);
if (expressionManager.HasScreenPresentation)
{
yield return expressionManager.PlayScreenDeepAndWait();
}
else
{
yield return TimelineCenter.Instance.PlayTimelineAsync("火山表达模块/火山表达深入");
}
BubbleSlotKit.Instance.LoadBubbles(BubbleSlotEnum.Expression);
}
@@ -16,6 +16,7 @@ namespace AibisDream
[SerializeField] private LanguageParticleManager particleManager;
[SerializeField] private GameObject expressionView;
[SerializeField] private LogReleasePresentationController logReleasePresentation;
[SerializeField] private ExpressionScreenPresentationController screenPresentation;
[Header("默认配置")]
[SerializeField] private List<string> defaultAnxietyPhrases = new List<string>
@@ -111,9 +112,15 @@ namespace AibisDream
logReleasePresentation = GetComponent<LogReleasePresentationController>();
}
if (screenPresentation == null)
{
screenPresentation = GetComponent<ExpressionScreenPresentationController>();
}
if (particleManager != null)
{
particleManager.SetPresentationController(logReleasePresentation);
particleManager.SetScreenPresentationController(screenPresentation);
}
}
@@ -123,6 +130,7 @@ namespace AibisDream
/// </summary>
public void OpenView()
{
screenPresentation?.ResetImmediate();
// 先设置所有初始状态再打开
if (particleManager != null)
{
@@ -230,6 +238,16 @@ namespace AibisDream
yield return particleManager.WaitUntilExpressionFlowReady();
}
internal IEnumerator PlayScreenDeepAndWait()
{
if (screenPresentation == null)
yield break;
yield return screenPresentation.PlayDeepAndWait();
}
internal bool HasScreenPresentation => screenPresentation != null;
/// <summary>
/// 从聚焦保持态触发稳定化(概率递增 → 文字锁定 → 排列)
/// </summary>
@@ -256,6 +274,7 @@ namespace AibisDream
/// </summary>
public void CloseView()
{
screenPresentation?.ResetImmediate();
ResetScreenGlitchState();
ApplyScreenGlitchProperties();
@@ -0,0 +1,404 @@
using System.Collections;
using AibisDream.Utility;
using TMPro;
using UnityEngine;
using UnityEngine.Localization.Components;
using UnityEngine.UI;
namespace AibisDream.MiniGame.Language
{
/// <summary>
/// Drives the full-frame Huoshan expression screen while keeping readable text in TMP.
/// The sprite sheet uses the original 384x216 Aseprite timing and the existing world-space
/// Canvas remains the source of truth for interaction and dynamic language particles.
/// </summary>
public sealed class ExpressionScreenPresentationController : MonoBehaviour
{
public enum ScreenState
{
Reset,
Deep,
Panel,
Output,
Floating,
Click,
FocusHidden
}
private const int DeepFirst = 0;
private const int DeepLast = 14;
private const int UiFlashFirst = 15;
private const int UiFlashLast = 29;
private const int StatusRevealFrame = 21;
private const int RingFirst = 30;
private const int RingLast = 40;
private const int OutputFirst = 41;
private const int OutputLast = 47;
private const int OutputTextRevealFrame = 45;
private const int FloatingFrame = 48;
private const int ClickFirst = 49;
private const int ClickLast = 52;
private const string ObjectiveLocalizationKey = "huoshan_expression_objective";
private const string OutputLocalizationKey = "huoshan_expression_output";
[Header("Frame Animation")]
[SerializeField] private SpriteRenderer screenRenderer;
[SerializeField] private Sprite[] frames = new Sprite[53];
[Header("Existing TMP / Interaction")]
[SerializeField] private TMP_Text integrationProgressText;
[SerializeField] private TMP_Text interferenceCountText;
[SerializeField] private Button outputButton;
[SerializeField] private TMP_FontAsset screenFont;
[Header("Objective TMP (384x216 reference)")]
[SerializeField] private Vector2 objectivePosition = new Vector2(-8.18f, -4.08f);
[SerializeField] private Vector2 objectiveSize = new Vector2(7.4f, 0.95f);
[SerializeField] private float objectiveFontSize = 0.28f;
[SerializeField] private Color objectiveColor = new Color(0.78f, 0.91f, 1f, 1f);
private int playbackGeneration;
private TMP_Text objectiveText;
private TMP_Text outputText;
private LocalizeStringEvent objectiveLocalization;
private LocalizeStringEvent outputLocalization;
private Material objectiveMaterial;
private ScreenState state = ScreenState.Reset;
public ScreenState State => state;
private void Awake()
{
ResolveSceneReferences();
ConfigureExistingUiAsTextOnly();
CreateObjectiveText();
BindStaticLocalization();
ResetImmediate();
}
private void ResolveSceneReferences()
{
if (screenRenderer == null)
{
SpriteRenderer[] renderers = GetComponentsInChildren<SpriteRenderer>(true);
foreach (SpriteRenderer candidate in renderers)
{
if (candidate != null && candidate.gameObject.name == "火山释放log界面")
{
screenRenderer = candidate;
break;
}
}
}
if (outputButton != null)
{
outputText = outputButton.GetComponentInChildren<TMP_Text>(true);
}
}
private void ConfigureExistingUiAsTextOnly()
{
MakeParentImageTransparent(integrationProgressText);
MakeParentImageTransparent(interferenceCountText);
if (integrationProgressText != null)
integrationProgressText.raycastTarget = false;
if (interferenceCountText != null)
interferenceCountText.raycastTarget = false;
if (outputButton != null && outputButton.targetGraphic != null)
{
Color color = outputButton.targetGraphic.color;
color.a = 0f;
outputButton.targetGraphic.color = color;
outputButton.targetGraphic.raycastTarget = true;
}
}
private static void MakeParentImageTransparent(TMP_Text text)
{
if (text == null || text.transform.parent == null)
return;
Image image = text.transform.parent.GetComponent<Image>();
if (image == null)
return;
Color color = image.color;
color.a = 0f;
image.color = color;
image.raycastTarget = false;
}
private void CreateObjectiveText()
{
Canvas canvas = integrationProgressText != null
? integrationProgressText.GetComponentInParent<Canvas>()
: GetComponentInChildren<Canvas>(true);
if (canvas == null)
{
Debug.LogError("[ExpressionScreenPresentation] ExpressView 下未找到 World Space Canvas,任务描述无法创建。");
return;
}
Transform existing = canvas.transform.Find("Expression Objective (TMP)");
if (existing != null)
{
objectiveText = existing.GetComponent<TMP_Text>();
return;
}
var objectiveObject = new GameObject(
"Expression Objective (TMP)",
typeof(RectTransform),
typeof(CanvasRenderer),
typeof(TextMeshProUGUI));
objectiveObject.layer = canvas.gameObject.layer;
RectTransform rect = objectiveObject.GetComponent<RectTransform>();
rect.SetParent(canvas.transform, false);
rect.anchorMin = new Vector2(0.5f, 0.5f);
rect.anchorMax = new Vector2(0.5f, 0.5f);
rect.pivot = new Vector2(0f, 0.5f);
rect.anchoredPosition = objectivePosition;
rect.sizeDelta = objectiveSize;
rect.SetAsFirstSibling();
var text = objectiveObject.GetComponent<TextMeshProUGUI>();
text.font = screenFont;
if (integrationProgressText != null && integrationProgressText.fontSharedMaterial != null)
{
objectiveMaterial = new Material(integrationProgressText.fontSharedMaterial)
{
name = "Huoshan Expression Objective TMP (Runtime)"
};
text.fontSharedMaterial = objectiveMaterial;
}
text.fontSize = objectiveFontSize;
text.fontStyle = FontStyles.Bold;
text.color = objectiveColor;
text.alignment = TextAlignmentOptions.Left;
text.enableWordWrapping = true;
text.overflowMode = TextOverflowModes.Truncate;
text.raycastTarget = false;
objectiveText = text;
}
private void BindStaticLocalization()
{
objectiveLocalization = BindLocalizedText(objectiveText, ObjectiveLocalizationKey);
outputLocalization = BindLocalizedText(outputText, OutputLocalizationKey);
}
private static LocalizeStringEvent BindLocalizedText(TMP_Text text, string entryKey)
{
if (text == null)
return null;
LocalizeStringEvent localize = text.GetComponent<LocalizeStringEvent>();
if (localize == null)
localize = text.gameObject.AddComponent<LocalizeStringEvent>();
localize.StringReference.SetReference(ConstRef.UITextTable, entryKey);
localize.OnUpdateString.RemoveAllListeners();
localize.OnUpdateString.AddListener(value => text.text = value);
localize.StringReference.RefreshString();
return localize;
}
public IEnumerator PlayDeepAndWait()
{
int generation = BeginPlayback();
SetOverlayVisibility(false, false, false);
yield return PlayRangeAndWait(DeepFirst, DeepLast, generation);
if (generation != playbackGeneration)
yield break;
state = ScreenState.Deep;
}
public IEnumerator PlayPanelAndWait()
{
int generation = BeginPlayback();
yield return PlayRangeAndWait(UiFlashFirst, UiFlashLast, generation, StatusRevealFrame, ShowStatusAndObjective);
if (generation != playbackGeneration)
yield break;
yield return PlayRangeAndWait(RingFirst, RingLast, generation);
if (generation != playbackGeneration)
yield break;
ShowStatusAndObjective();
state = ScreenState.Panel;
}
public IEnumerator PlayOutputAndWait()
{
int generation = BeginPlayback();
SetOutputTextVisible(false);
yield return PlayRangeAndWait(
OutputFirst,
OutputLast,
generation,
OutputTextRevealFrame,
() => SetOutputTextVisible(true));
if (generation != playbackGeneration)
yield break;
SetFrame(FloatingFrame);
SetOutputTextVisible(true);
state = ScreenState.Floating;
}
public IEnumerator PlayClickAndWait()
{
int generation = BeginPlayback();
SetOutputTextVisible(true);
yield return PlayRangeAndWait(ClickFirst, ClickLast, generation);
if (generation != playbackGeneration)
yield break;
state = ScreenState.Click;
}
public void PrepareForNewRound()
{
StopPlayback();
SetFrame(DeepFirst);
SetOverlayVisibility(false, false, false);
state = ScreenState.Reset;
}
public void HideOverlayForFocus()
{
SetOverlayVisibility(false, false, false);
state = ScreenState.FocusHidden;
}
public void ResetImmediate()
{
StopPlayback();
SetFrame(DeepFirst);
SetOverlayVisibility(false, false, false);
if (outputButton != null)
{
outputButton.interactable = false;
outputButton.gameObject.SetActive(false);
}
state = ScreenState.Reset;
}
private int BeginPlayback()
{
StopPlayback();
return playbackGeneration;
}
private IEnumerator PlayRangeAndWait(
int firstFrame,
int lastFrame,
int generation,
int revealFrame = -1,
System.Action revealAction = null)
{
for (int frameIndex = firstFrame; frameIndex <= lastFrame; frameIndex++)
{
if (generation != playbackGeneration)
yield break;
SetFrame(frameIndex);
if (frameIndex == revealFrame)
revealAction?.Invoke();
yield return new WaitForSeconds(GetFrameDuration(frameIndex));
}
}
private void SetFrame(int frameIndex)
{
if (screenRenderer == null || frames == null ||
frameIndex < 0 || frameIndex >= frames.Length || frames[frameIndex] == null)
{
return;
}
screenRenderer.gameObject.SetActive(true);
screenRenderer.enabled = true;
screenRenderer.sprite = frames[frameIndex];
}
private static float GetFrameDuration(int frameIndex)
{
switch (frameIndex)
{
case 0:
case 29:
case 47:
case 48:
return 0.3f;
case 16:
case 17:
case 21:
case 25:
case 49:
case 50:
case 51:
case 52:
return 0.05f;
default:
return 0.1f;
}
}
private void ShowStatusAndObjective()
{
SetOverlayVisibility(true, true, false);
}
private void SetOverlayVisibility(bool statusVisible, bool objectiveVisible, bool outputVisible)
{
SetStatusTextVisible(integrationProgressText, statusVisible);
SetStatusTextVisible(interferenceCountText, statusVisible);
if (objectiveText != null)
objectiveText.gameObject.SetActive(objectiveVisible);
SetOutputTextVisible(outputVisible);
}
private static void SetStatusTextVisible(TMP_Text text, bool visible)
{
if (text == null)
return;
if (visible)
{
var canvasGroup = text.GetComponentInParent<CanvasGroup>();
if (canvasGroup != null)
canvasGroup.alpha = 1f;
}
if (text.transform.parent != null)
text.transform.parent.gameObject.SetActive(visible);
text.gameObject.SetActive(visible);
}
private void SetOutputTextVisible(bool visible)
{
if (outputText != null)
outputText.gameObject.SetActive(visible);
}
private void StopPlayback()
{
playbackGeneration++;
}
private void OnDestroy()
{
if (objectiveLocalization != null)
objectiveLocalization.OnUpdateString.RemoveAllListeners();
if (outputLocalization != null)
outputLocalization.OnUpdateString.RemoveAllListeners();
if (objectiveMaterial != null)
Destroy(objectiveMaterial);
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 5e1287ca2a7d4d2d90c1a668c0f5bb82
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -5,7 +5,10 @@ using System.Linq;
using DG.Tweening;
using TMPro;
using UnityEngine.UI;
using UnityEngine.Localization;
using UnityEngine.Localization.Settings;
using AibisDream;
using AibisDream.Utility;
namespace AibisDream.MiniGame.Language
{
@@ -134,6 +137,7 @@ namespace AibisDream.MiniGame.Language
[SerializeField] private Button focusSequenceButton;
[Tooltip("火山释放log界面,触发 focus 时对其 SpriteRenderer 做淡出,重新开始时恢复")]
[SerializeField] private SpriteRenderer releaseLogSpriteRenderer;
[SerializeField] private ExpressionScreenPresentationController screenPresentation;
[Tooltip("开场表达panel Timeline 名称(DirectorName 或 DirectorName/AddressableKey),播完才算表达流程完成")]
[SerializeField] private string expressionPanelTimelineName = "火山表达模块/火山表达panel";
[Tooltip("火山表达确认 Timeline 名称,播完才解锁按钮交互")]
@@ -250,6 +254,11 @@ namespace AibisDream.MiniGame.Language
private float lieEdgeJitter;
private float truthGatherProgress;
private LogReleasePresentationController presentationController;
private const string IntegrationLocalizationKey = "huoshan_expression_integration";
private const string InterferenceLocalizationKey = "huoshan_expression_interference";
private string integrationStatusFormat = "{0}% 语言整合完成度";
private string interferenceStatusFormat = "{0} 处异常思绪仍在干扰表达";
private Coroutine statusLocalizationRoutine;
private const string LieCompressionTweenId = "HuoshanLieEdgeCompression";
private const string TruthGatherTweenId = "HuoshanTruthGather";
private const string FocusInterferenceTweenId = "HuoshanFocusInterference";
@@ -286,9 +295,51 @@ namespace AibisDream.MiniGame.Language
private void Start()
{
ResolveScreenPresentation();
LocalizationSettings.SelectedLocaleChanged += HandleLocaleChanged;
statusLocalizationRoutine = StartCoroutine(RefreshStatusLocalization());
// Start 中不再自动初始化,等待外部调用 InitializeSystem
}
private void ResolveScreenPresentation()
{
if (screenPresentation == null)
screenPresentation = GetComponentInParent<ExpressionScreenPresentationController>(true);
}
private void HandleLocaleChanged(Locale locale)
{
if (!isActiveAndEnabled)
return;
if (statusLocalizationRoutine != null)
StopCoroutine(statusLocalizationRoutine);
statusLocalizationRoutine = StartCoroutine(RefreshStatusLocalization());
}
private IEnumerator RefreshStatusLocalization()
{
yield return LocalizationSettings.InitializationOperation;
var integrationOperation = LocalizationSettings.StringDatabase.GetLocalizedStringAsync(
ConstRef.UITextTable,
IntegrationLocalizationKey);
yield return integrationOperation;
if (!string.IsNullOrEmpty(integrationOperation.Result))
integrationStatusFormat = integrationOperation.Result;
var interferenceOperation = LocalizationSettings.StringDatabase.GetLocalizedStringAsync(
ConstRef.UITextTable,
InterferenceLocalizationKey);
yield return interferenceOperation;
if (!string.IsNullOrEmpty(interferenceOperation.Result))
interferenceStatusFormat = interferenceOperation.Result;
statusLocalizationRoutine = null;
if (isInitialized)
UpdateStatusUI();
}
/// <summary>
/// 初始化系统(可以由外部调用,用于配置游戏参数)
/// </summary>
@@ -373,6 +424,8 @@ namespace AibisDream.MiniGame.Language
if (!isInitialized)
yield break;
ResolveScreenPresentation();
screenPresentation?.PrepareForNewRound();
StopFocusTransitionRoutine();
KillCompletionUiTweens();
resolveTotalDurationOverride = -1f;
@@ -1286,7 +1339,15 @@ namespace AibisDream.MiniGame.Language
private IEnumerator PlayConfirmTimelineAndUnlockButton()
{
if (!string.IsNullOrEmpty(expressionConfirmTimelineName) && TimelineCenter.Instance != null)
ResolveScreenPresentation();
if (screenPresentation != null)
{
yield return screenPresentation.PlayOutputAndWait();
if (screenPresentation == null ||
screenPresentation.State != ExpressionScreenPresentationController.ScreenState.Floating)
yield break;
}
else if (!string.IsNullOrEmpty(expressionConfirmTimelineName) && TimelineCenter.Instance != null)
{
yield return TimelineCenter.Instance.PlayTimelineAsync(expressionConfirmTimelineName);
}
@@ -1303,6 +1364,29 @@ namespace AibisDream.MiniGame.Language
if (completionPhase != CompletionPhase.Completed)
return;
if (focusSequenceButton != null)
focusSequenceButton.interactable = false;
ResolveScreenPresentation();
if (screenPresentation != null)
{
StartCoroutine(PlayClickThenBeginFocus());
return;
}
BeginFocusSequence();
}
private IEnumerator PlayClickThenBeginFocus()
{
yield return screenPresentation.PlayClickAndWait();
if (screenPresentation == null ||
screenPresentation.State != ExpressionScreenPresentationController.ScreenState.Click)
{
yield break;
}
screenPresentation.HideOverlayForFocus();
BeginFocusSequence();
}
@@ -1837,6 +1921,11 @@ namespace AibisDream.MiniGame.Language
presentationController = controller;
}
public void SetScreenPresentationController(ExpressionScreenPresentationController controller)
{
screenPresentation = controller;
}
public void BeginLieEdgeCompression(float duration, float jitterAmount)
{
if (completionPhase != CompletionPhase.FocusHolding)
@@ -3153,7 +3242,20 @@ namespace AibisDream.MiniGame.Language
/// </summary>
private IEnumerator PlayExpressionPanelThenReady()
{
if (!string.IsNullOrEmpty(expressionPanelTimelineName) && TimelineCenter.Instance != null)
ResolveScreenPresentation();
if (screenPresentation != null)
{
if (languageDeepPanel1 != null)
languageDeepPanel1.SetActive(true);
if (languageDeepPanel2 != null)
languageDeepPanel2.SetActive(true);
yield return screenPresentation.PlayPanelAndWait();
if (screenPresentation == null ||
screenPresentation.State != ExpressionScreenPresentationController.ScreenState.Panel)
yield break;
}
else if (!string.IsNullOrEmpty(expressionPanelTimelineName) && TimelineCenter.Instance != null)
{
// 火山表达 panel timeline 驱动 panel1/2,播放前需先激活(若之前被 fade 过,需重置 alpha)
if (languageDeepPanel1 != null)
@@ -3301,13 +3403,13 @@ namespace AibisDream.MiniGame.Language
{
float ratio = CalculateIntegrationRatio();
int percent = Mathf.RoundToInt(ratio * 100f);
integrationProgressText.text = $"{percent}% 语言整合完成度";
integrationProgressText.text = string.Format(integrationStatusFormat, percent);
}
if (interferenceCountText != null)
{
int interferenceCount = CountInterferenceNodes();
interferenceCountText.text = $"{interferenceCount} 处异常思绪仍在干扰表达";
interferenceCountText.text = string.Format(interferenceStatusFormat, interferenceCount);
}
}
@@ -3409,6 +3511,11 @@ namespace AibisDream.MiniGame.Language
}
}
private void OnDestroy()
{
LocalizationSettings.SelectedLocaleChanged -= HandleLocaleChanged;
}
#if UNITY_EDITOR
private void OnDrawGizmosSelected()
{