修复已知功能
1. 添加章节开始 UI 介绍 2. 清理不使用的资源 3. 补充 AIChat 入口 UI 4. 接上所有的正常对话流程
This commit is contained in:
parent
ef68ccc9e9
commit
a1b6b4a823
|
|
@ -1,23 +1,23 @@
|
||||||
# 对话标识表 筛选用数据
|
# 对话标识表 列1 列2 列3 筛选用数据
|
||||||
# Id Title UIMode ChapterId
|
# Id Title UIMode ChapterId
|
||||||
# int string DialogUIMode int
|
# int string DialogUIMode int
|
||||||
# 对话编号 策划备注 对话标识 对话形式 章节编号
|
# 对话编号 策划备注 对话标识 对话形式 章节编号
|
||||||
1001 第一章介绍 Ch1_Time Mask 1.001
|
1001 第一章介绍 无规矩,则屋不立 Mask 1.001
|
||||||
1002 第一章主流程 Ch1_Dia01 BottomBox 1.002
|
1002 第一章主流程 Ch1_Dia01 BottomBox 1.002
|
||||||
1003 Ch1_Dia02 BottomBox 1.003
|
1003 Ch1_Dia02 BottomBox 1.003
|
||||||
1004 Ch1_Dia03 BottomBox 1.004
|
1004 Ch1_Dia03 BottomBox 1.004
|
||||||
1005 Ch1_Dia04 BottomBox 1.005
|
1005 Ch1_Dia04 BottomBox 1.005
|
||||||
2001 Ch2_Time Mask 2.001
|
2001 凡构屋之制,皆以材为祖 Mask 2.001
|
||||||
2002 Ch2_Dia01 BottomBox 2.002
|
2002 Ch2_Dia01 BottomBox 2.002
|
||||||
2003 Ch2_Dia02 BottomBox 2.003
|
2003 Ch2_Dia02 BottomBox 2.003
|
||||||
2004 Ch2_Dia03 BottomBox 2.004
|
2004 Ch2_Dia03 BottomBox 2.004
|
||||||
2005 Ch2_Dia04 BottomBox 2.005
|
2005 Ch2_Dia04 BottomBox 2.005
|
||||||
3001 Ch3_Time Mask 3.001
|
3001 图文并重,以辅文字之不足 Mask 3.001
|
||||||
3002 Ch3_Dia01 BottomBox 3.002
|
3002 Ch3_Dia01 BottomBox 3.002
|
||||||
3003 Ch3_Dia02 BottomBox 3.003
|
3003 Ch3_Dia02 BottomBox 3.003
|
||||||
3004 Ch3_Dia03 BottomBox 3.004
|
3004 Ch3_Dia03 BottomBox 3.004
|
||||||
3005 Ch3_Dia04 BottomBox 3.005
|
3005 Ch3_Dia04 BottomBox 3.005
|
||||||
4001 Ch4_Time Mask 4.001
|
4001 建筑是凝固的历史 Mask 4.001
|
||||||
4002 Ch4_Dia01 BottomBox 4.002
|
4002 Ch4_Dia01 BottomBox 4.002
|
||||||
4003 Ch4_Dia02 BottomBox 4.003
|
4003 Ch4_Dia02 BottomBox 4.003
|
||||||
4004 Ch4_Dia03 BottomBox 4.004
|
4004 Ch4_Dia03 BottomBox 4.004
|
||||||
|
|
|
||||||
|
|
@ -28,18 +28,18 @@
|
||||||
100300016 Player 玩家 0 属下遵命。 None 1.00300016 1003.00016
|
100300016 Player 玩家 0 属下遵命。 None 1.00300016 1003.00016
|
||||||
100300017 Other 旁白 0 你正式踏入将作监,一段以法度正营造的历程,自此开始。 None 1.00300017 1003.00017
|
100300017 Other 旁白 0 你正式踏入将作监,一段以法度正营造的历程,自此开始。 None 1.00300017 1003.00017
|
||||||
100400001 LiJie 李诫 1 这里是库房,存放着营造时用到的所有工具。 None 1.00400001 1004.00001
|
100400001 LiJie 李诫 1 这里是库房,存放着营造时用到的所有工具。 None 1.00400001 1004.00001
|
||||||
100400002 Subtitle 字幕 0 檀木质地,刻度以朱砂标注,一端为方、一端为折,刻有 “材份” 刻度。 None 1.00400002 1004.00002
|
100400002 Subtitle 字幕 0 檀木质地,刻度以朱砂标注,一端为方、一端为折,刻有 “材份” 刻度。 EntityCue 1.00400002 1004.00002
|
||||||
100400003 LiJie 李诫 1 你看,构屋先定 “方”,柱枋是否垂直、斗拱是否方正,全凭这曲尺核验。 None 1.00400003 1004.00003
|
100400003 LiJie 李诫 1 你看,构屋先定 “方”,柱枋是否垂直、斗拱是否方正,全凭这曲尺核验。 None 1.00400003 1004.00003
|
||||||
100400004 LiJie 李诫 1 此前工地偷换木料,若早以曲尺量其形制,便知柳木径寸不足,断断用不得啊。 None 1.00400004 1004.00004
|
100400004 LiJie 李诫 1 此前工地偷换木料,若早以曲尺量其形制,便知柳木径寸不足,断断用不得啊。 EntityCueClose 1.00400004 1004.00004
|
||||||
100400005 LiJie 李诫 1 此乃方斗,也叫墨斗,配绳墨使用。 None 1.00400005 1004.00005
|
100400005 LiJie 李诫 1 此乃方斗,也叫墨斗,配绳墨使用。 EntityCue 1.00400005 1004.00005
|
||||||
100400006 LiJie 李诫 1 绳墨牵直,以墨斗弹线,便知木料是否平直、墙体是否端正。 None 1.00400006 1004.00006
|
100400006 LiJie 李诫 1 绳墨牵直,以墨斗弹线,便知木料是否平直、墙体是否端正。 None 1.00400006 1004.00006
|
||||||
100400007 Subtitle 字幕 0 方斗为楠木所制,斗身刻 “将作监” 款识,墨仓密封,绳墨以生丝浸松烟墨制成,耐磨不褪。 None 1.00400007 1004.00007
|
100400007 Subtitle 字幕 0 方斗为楠木所制,斗身刻 “将作监” 款识,墨仓密封,绳墨以生丝浸松烟墨制成,耐磨不褪。 EntityCueClose 1.00400007 1004.00007
|
||||||
100400008 LiJie 李诫 1 营造之事,“直” 为要。 None 1.00400008 1004.00008
|
100400008 LiJie 李诫 1 营造之事,“直” 为要。 None 1.00400008 1004.00008
|
||||||
100400009 LiJie 李诫 1 工头偷工减料,常以歪木充数,若以绳墨弹线,歪直立现,断无蒙混可能。 None 1.00400009 1004.00009
|
100400009 LiJie 李诫 1 工头偷工减料,常以歪木充数,若以绳墨弹线,歪直立现,断无蒙混可能。 None 1.00400009 1004.00009
|
||||||
100400010 Player 玩家 0 那这是何物? None 1.0040001 1004.0001
|
100400010 Player 玩家 0 那这是何物? EntityCue 1.0040001 1004.0001
|
||||||
100400011 LiJie 李诫 1 这是水准,也名 “水尺”,测地势高低、屋基平正之用。 None 1.00400011 1004.00011
|
100400011 LiJie 李诫 1 这是水准,也名 “水尺”,测地势高低、屋基平正之用。 None 1.00400011 1004.00011
|
||||||
100400012 Subtitle 字幕 0 青铜制的水准器,形制为长槽,内盛水,槽侧刻刻度,槽端有通气孔,是宋代成熟的水准测量工具。 None 1.00400012 1004.00012
|
100400012 Subtitle 字幕 0 青铜制的水准器,形制为长槽,内盛水,槽侧刻刻度,槽端有通气孔,是宋代成熟的水准测量工具。 None 1.00400012 1004.00012
|
||||||
100400013 LiJie 李诫 1 汴京地势多洼,营建房宇先以水准定基址 None 1.00400013 1004.00013
|
100400013 LiJie 李诫 1 汴京地势多洼,营建房宇先以水准定基址 EntityCueClose 1.00400013 1004.00013
|
||||||
100400014 LiJie 李诫 1 若基址倾斜,纵是木料精良,也难逃倾颓之祸。 None 1.00400014 1004.00014
|
100400014 LiJie 李诫 1 若基址倾斜,纵是木料精良,也难逃倾颓之祸。 None 1.00400014 1004.00014
|
||||||
100400015 LiJie 李诫 1 水之性平,这水准便是借水定平。 None 1.00400015 1004.00015
|
100400015 LiJie 李诫 1 水之性平,这水准便是借水定平。 None 1.00400015 1004.00015
|
||||||
100400016 LiJie 李诫 1 除了这些器具,库房更藏有 “料例” 册籍, None 1.00400016 1004.00016
|
100400016 LiJie 李诫 1 除了这些器具,库房更藏有 “料例” 册籍, None 1.00400016 1004.00016
|
||||||
|
|
@ -50,15 +50,15 @@
|
||||||
100400021 LiJie 李诫 1 明日随我去工地,以器验工,看看那些贪弊工头还能藏多少猫腻。 None 1.00400021 1004.00021
|
100400021 LiJie 李诫 1 明日随我去工地,以器验工,看看那些贪弊工头还能藏多少猫腻。 None 1.00400021 1004.00021
|
||||||
100400022 Player 玩家 0 是,李主簿。 None 1.00400022 1004.00022
|
100400022 Player 玩家 0 是,李主簿。 None 1.00400022 1004.00022
|
||||||
100500001 LiJie 李诫 0 这工地是谁负责! None 1.00500001 1005.00001
|
100500001 LiJie 李诫 0 这工地是谁负责! None 1.00500001 1005.00001
|
||||||
100500002 GongTou 工头 0 李主簿,您怎么又来了… None 1.00500002 1005.00002
|
100500002 GongTou 工头 1 李主簿,您怎么又来了… None 1.00500002 1005.00002
|
||||||
100500003 LiJie 李诫 0 我不来,怎知你们又在如何糊弄? None 1.00500003 1005.00003
|
100500003 LiJie 李诫 0 我不来,怎知你们又在如何糊弄? None 1.00500003 1005.00003
|
||||||
100500004 LiJie 李诫 0 今日来便是要验工。 None 1.00500004 1005.00004
|
100500004 LiJie 李诫 0 今日来便是要验工。 None 1.00500004 1005.00004
|
||||||
100500005 LiJie 李诫 0 你且取来昨日库房的曲尺、绳墨、水准,逐一核验梁柱基址。 None 1.00500005 1005.00005
|
100500005 LiJie 李诫 0 你且取来昨日库房的曲尺、绳墨、水准,逐一核验梁柱基址。 None 1.00500005 1005.00005
|
||||||
100500006 Player 玩家 0 是,李主簿。 None 1.00500006 1005.00006
|
100500006 Player 玩家 0 是,李主簿。 None 1.00500006 1005.00006
|
||||||
100500007 Player 玩家 0 李主簿,这根立柱偏斜三分,枋木榫口尺寸不符,根本无法咬合! None 1.00500007 1005.00007
|
100500007 Player 玩家 0 李主簿,这根立柱偏斜三分,枋木榫口尺寸不符,根本无法咬合! None 1.00500007 1005.00007
|
||||||
100500008 GongTou 工头 0 这… None 1.00500008 1005.00008
|
100500008 GongTou 工头 1 这… None 1.00500008 1005.00008
|
||||||
100500009 GongTou 工头 0 … None 1.00500009 1005.00009
|
100500009 GongTou 工头 1 … None 1.00500009 1005.00009
|
||||||
100500010 GongTou 工头 0 这只是小偏差,匠人凭手眼便可调整… None 1.0050001 1005.0001
|
100500010 GongTou 工头 1 这只是小偏差,匠人凭手眼便可调整… None 1.0050001 1005.0001
|
||||||
100500011 LiJie 李诫 0 营造无差毫厘! None 1.00500011 1005.00011
|
100500011 LiJie 李诫 0 营造无差毫厘! None 1.00500011 1005.00011
|
||||||
100500012 LiJie 李诫 0 榫卯不合、梁柱不直,今日可凑活,明日必倾塌! None 1.00500012 1005.00012
|
100500012 LiJie 李诫 0 榫卯不合、梁柱不直,今日可凑活,明日必倾塌! None 1.00500012 1005.00012
|
||||||
100500013 LiJie 李诫 0 你看好 ——屋之牢固,全在榫卯。 None 1.00500013 1005.00013
|
100500013 LiJie 李诫 0 你看好 ——屋之牢固,全在榫卯。 None 1.00500013 1005.00013
|
||||||
|
|
@ -72,8 +72,8 @@
|
||||||
100500021 LiJie 李诫 0 这便是法度之力。 None 1.00500021 1005.00021
|
100500021 LiJie 李诫 0 这便是法度之力。 None 1.00500021 1005.00021
|
||||||
100500022 LiJie 李诫 0 构件按图预制,到工地只需精准拼装,既省工,又让贪弊者无可乘之机。 None 1.00500022 1005.00022
|
100500022 LiJie 李诫 0 构件按图预制,到工地只需精准拼装,既省工,又让贪弊者无可乘之机。 None 1.00500022 1005.00022
|
||||||
100500023 LiJie 李诫 0 往后所有构件,必须先以尺量、以图定、以榫卯合,不合格一律不准上架! None 1.00500023 1005.00023
|
100500023 LiJie 李诫 0 往后所有构件,必须先以尺量、以图定、以榫卯合,不合格一律不准上架! None 1.00500023 1005.00023
|
||||||
100500024 GongTou 工头 0 是… None 1.00500024 1005.00024
|
100500024 GongTou 工头 1 是… None 1.00500024 1005.00024
|
||||||
100500025 GongTou 工头 0 小人遵命… None 1.00500025 1005.00025
|
100500025 GongTou 工头 1 小人遵命… None 1.00500025 1005.00025
|
||||||
100500026 LiJie 李诫 0 这是你第一次亲手完成榫卯拼装,以图正匠,以器验工,以榫卯固屋 None 1.00500026 1005.00026
|
100500026 LiJie 李诫 0 这是你第一次亲手完成榫卯拼装,以图正匠,以器验工,以榫卯固屋 None 1.00500026 1005.00026
|
||||||
100500027 LiJie 李诫 0 这条路,你才刚刚开始啊。 None 1.00500027 1005.00027
|
100500027 LiJie 李诫 0 这条路,你才刚刚开始啊。 None 1.00500027 1005.00027
|
||||||
200100001 Time 时间 0 绍圣四年,北宋汴京。 None 2.00100001 2001.00001
|
200100001 Time 时间 0 绍圣四年,北宋汴京。 None 2.00100001 2001.00001
|
||||||
|
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
# 实体表
|
|
||||||
# Id AssetName
|
|
||||||
# int string
|
|
||||||
# 实体编号 策划备注 资源名称
|
|
||||||
10000 玩家战机 PlayerShip
|
|
||||||
10001 敌人战机 EnemyShip
|
|
||||||
20000 玩家推进器 PlayerEngine
|
|
||||||
20001 敌人推进器 EnemyEngine
|
|
||||||
30000 默认武器 DefaultWeapon
|
|
||||||
40000 默认装甲 DefaultArmor
|
|
||||||
50000 玩家子弹 PlayerBolt
|
|
||||||
50001 敌人子弹 EnemyBolt
|
|
||||||
60000 小行星 Asteroid01
|
|
||||||
60001 小行星 Asteroid02
|
|
||||||
60002 小行星 Asteroid03
|
|
||||||
70000 玩家死亡特效 PlayerExplosion
|
|
||||||
70001 敌人死亡特效 EnemyExplosion
|
|
||||||
70002 小行星死亡特效 AsteroidExplosion
|
|
||||||
101 测试玩家 Player
|
|
||||||
1001 测试敌人 Enemy
|
|
||||||
11 跟随相机 FollowCamera
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
fileFormatVersion: 2
|
|
||||||
guid: cfe53cf384344bd47a8680f8c5f97a7b
|
|
||||||
timeCreated: 1528026124
|
|
||||||
licenseType: Pro
|
|
||||||
TextScriptImporter:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
|
@ -13,3 +13,5 @@
|
||||||
106 Bubble对话UI BubbleDialogForm Dialog True False
|
106 Bubble对话UI BubbleDialogForm Dialog True False
|
||||||
107 游戏场景覆盖UI MainOverlayForm Overlay False False
|
107 游戏场景覆盖UI MainOverlayForm Overlay False False
|
||||||
108 AI对话UI AIChatForm Overlay False False
|
108 AI对话UI AIChatForm Overlay False False
|
||||||
|
109 章节标题UI ChapterTitleForm Overlay False False
|
||||||
|
110 AI入口UI AIChatEntryForm Top False False
|
||||||
|
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
fileFormatVersion: 2
|
|
||||||
guid: 50bb427da72e6164c995404fac1a139c
|
|
||||||
folderAsset: yes
|
|
||||||
timeCreated: 1528026124
|
|
||||||
licenseType: Pro
|
|
||||||
DefaultImporter:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
|
@ -1,122 +0,0 @@
|
||||||
%YAML 1.1
|
|
||||||
%TAG !u! tag:unity3d.com,2011:
|
|
||||||
--- !u!1 &9166462022471897675
|
|
||||||
GameObject:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
serializedVersion: 6
|
|
||||||
m_Component:
|
|
||||||
- component: {fileID: 7683855655592166216}
|
|
||||||
- component: {fileID: 6418687210998749921}
|
|
||||||
- component: {fileID: 4710806460657047075}
|
|
||||||
- component: {fileID: 1932268889601128120}
|
|
||||||
- component: {fileID: 557030043145096197}
|
|
||||||
m_Layer: 7
|
|
||||||
m_Name: Enemy
|
|
||||||
m_TagString: Untagged
|
|
||||||
m_Icon: {fileID: 0}
|
|
||||||
m_NavMeshLayer: 0
|
|
||||||
m_StaticEditorFlags: 0
|
|
||||||
m_IsActive: 1
|
|
||||||
--- !u!4 &7683855655592166216
|
|
||||||
Transform:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 9166462022471897675}
|
|
||||||
serializedVersion: 2
|
|
||||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
|
||||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
|
||||||
m_ConstrainProportionsScale: 0
|
|
||||||
m_Children: []
|
|
||||||
m_Father: {fileID: 0}
|
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
|
||||||
--- !u!33 &6418687210998749921
|
|
||||||
MeshFilter:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 9166462022471897675}
|
|
||||||
m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0}
|
|
||||||
--- !u!23 &4710806460657047075
|
|
||||||
MeshRenderer:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 9166462022471897675}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_CastShadows: 1
|
|
||||||
m_ReceiveShadows: 1
|
|
||||||
m_DynamicOccludee: 1
|
|
||||||
m_StaticShadowCaster: 0
|
|
||||||
m_MotionVectors: 1
|
|
||||||
m_LightProbeUsage: 1
|
|
||||||
m_ReflectionProbeUsage: 1
|
|
||||||
m_RayTracingMode: 2
|
|
||||||
m_RayTraceProcedural: 0
|
|
||||||
m_RenderingLayerMask: 1
|
|
||||||
m_RendererPriority: 0
|
|
||||||
m_Materials:
|
|
||||||
- {fileID: 2100000, guid: 28c42f88cfe56e84e95c0d7545db8c1b, type: 2}
|
|
||||||
m_StaticBatchInfo:
|
|
||||||
firstSubMesh: 0
|
|
||||||
subMeshCount: 0
|
|
||||||
m_StaticBatchRoot: {fileID: 0}
|
|
||||||
m_ProbeAnchor: {fileID: 0}
|
|
||||||
m_LightProbeVolumeOverride: {fileID: 0}
|
|
||||||
m_ScaleInLightmap: 1
|
|
||||||
m_ReceiveGI: 1
|
|
||||||
m_PreserveUVs: 0
|
|
||||||
m_IgnoreNormalsForChartDetection: 0
|
|
||||||
m_ImportantGI: 0
|
|
||||||
m_StitchLightmapSeams: 1
|
|
||||||
m_SelectedEditorRenderState: 3
|
|
||||||
m_MinimumChartSize: 4
|
|
||||||
m_AutoUVMaxDistance: 0.5
|
|
||||||
m_AutoUVMaxAngle: 89
|
|
||||||
m_LightmapParameters: {fileID: 0}
|
|
||||||
m_SortingLayerID: 0
|
|
||||||
m_SortingLayer: 0
|
|
||||||
m_SortingOrder: 0
|
|
||||||
m_AdditionalVertexStreams: {fileID: 0}
|
|
||||||
--- !u!136 &1932268889601128120
|
|
||||||
CapsuleCollider:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 9166462022471897675}
|
|
||||||
m_Material: {fileID: 0}
|
|
||||||
m_IncludeLayers:
|
|
||||||
serializedVersion: 2
|
|
||||||
m_Bits: 0
|
|
||||||
m_ExcludeLayers:
|
|
||||||
serializedVersion: 2
|
|
||||||
m_Bits: 0
|
|
||||||
m_LayerOverridePriority: 0
|
|
||||||
m_IsTrigger: 0
|
|
||||||
m_ProvidesContacts: 0
|
|
||||||
m_Enabled: 1
|
|
||||||
serializedVersion: 2
|
|
||||||
m_Radius: 0.5
|
|
||||||
m_Height: 2
|
|
||||||
m_Direction: 1
|
|
||||||
m_Center: {x: 0, y: 0, z: 0}
|
|
||||||
--- !u!114 &557030043145096197
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 9166462022471897675}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_EditorHideFlags: 0
|
|
||||||
m_Script: {fileID: 11500000, guid: 9baf591df06b9bb44ba5313457ba84b3, type: 3}
|
|
||||||
m_Name:
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
|
|
@ -1,273 +0,0 @@
|
||||||
%YAML 1.1
|
|
||||||
%TAG !u! tag:unity3d.com,2011:
|
|
||||||
--- !u!1 &5383497626468778460
|
|
||||||
GameObject:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
serializedVersion: 6
|
|
||||||
m_Component:
|
|
||||||
- component: {fileID: 5901618247908801032}
|
|
||||||
- component: {fileID: 4064848608618185461}
|
|
||||||
- component: {fileID: 142028612608113928}
|
|
||||||
- component: {fileID: 4294245010031275705}
|
|
||||||
m_Layer: 7
|
|
||||||
m_Name: Camera
|
|
||||||
m_TagString: Untagged
|
|
||||||
m_Icon: {fileID: 0}
|
|
||||||
m_NavMeshLayer: 0
|
|
||||||
m_StaticEditorFlags: 0
|
|
||||||
m_IsActive: 1
|
|
||||||
--- !u!4 &5901618247908801032
|
|
||||||
Transform:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 5383497626468778460}
|
|
||||||
serializedVersion: 2
|
|
||||||
m_LocalRotation: {x: 0.42261827, y: 0, z: 0, w: 0.9063079}
|
|
||||||
m_LocalPosition: {x: 0, y: 10, z: -8}
|
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
|
||||||
m_ConstrainProportionsScale: 0
|
|
||||||
m_Children: []
|
|
||||||
m_Father: {fileID: 9112716898534404901}
|
|
||||||
m_LocalEulerAnglesHint: {x: 50, y: 0, z: 0}
|
|
||||||
--- !u!20 &4064848608618185461
|
|
||||||
Camera:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 5383497626468778460}
|
|
||||||
m_Enabled: 1
|
|
||||||
serializedVersion: 2
|
|
||||||
m_ClearFlags: 1
|
|
||||||
m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1}
|
|
||||||
m_projectionMatrixMode: 1
|
|
||||||
m_GateFitMode: 2
|
|
||||||
m_FOVAxisMode: 0
|
|
||||||
m_Iso: 200
|
|
||||||
m_ShutterSpeed: 0.005
|
|
||||||
m_Aperture: 16
|
|
||||||
m_FocusDistance: 10
|
|
||||||
m_FocalLength: 50
|
|
||||||
m_BladeCount: 5
|
|
||||||
m_Curvature: {x: 2, y: 11}
|
|
||||||
m_BarrelClipping: 0.25
|
|
||||||
m_Anamorphism: 0
|
|
||||||
m_SensorSize: {x: 36, y: 24}
|
|
||||||
m_LensShift: {x: 0, y: 0}
|
|
||||||
m_NormalizedViewPortRect:
|
|
||||||
serializedVersion: 2
|
|
||||||
x: 0
|
|
||||||
y: 0
|
|
||||||
width: 1
|
|
||||||
height: 1
|
|
||||||
near clip plane: 0.3
|
|
||||||
far clip plane: 1000
|
|
||||||
field of view: 60
|
|
||||||
orthographic: 0
|
|
||||||
orthographic size: 5
|
|
||||||
m_Depth: 0
|
|
||||||
m_CullingMask:
|
|
||||||
serializedVersion: 2
|
|
||||||
m_Bits: 4294967295
|
|
||||||
m_RenderingPath: -1
|
|
||||||
m_TargetTexture: {fileID: 0}
|
|
||||||
m_TargetDisplay: 0
|
|
||||||
m_TargetEye: 3
|
|
||||||
m_HDR: 1
|
|
||||||
m_AllowMSAA: 1
|
|
||||||
m_AllowDynamicResolution: 0
|
|
||||||
m_ForceIntoRT: 0
|
|
||||||
m_OcclusionCulling: 1
|
|
||||||
m_StereoConvergence: 10
|
|
||||||
m_StereoSeparation: 0.022
|
|
||||||
--- !u!81 &142028612608113928
|
|
||||||
AudioListener:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 5383497626468778460}
|
|
||||||
m_Enabled: 1
|
|
||||||
--- !u!114 &4294245010031275705
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 5383497626468778460}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_EditorHideFlags: 0
|
|
||||||
m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3}
|
|
||||||
m_Name:
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
m_RenderShadows: 1
|
|
||||||
m_RequiresDepthTextureOption: 2
|
|
||||||
m_RequiresOpaqueTextureOption: 2
|
|
||||||
m_CameraType: 0
|
|
||||||
m_Cameras: []
|
|
||||||
m_RendererIndex: -1
|
|
||||||
m_VolumeLayerMask:
|
|
||||||
serializedVersion: 2
|
|
||||||
m_Bits: 1
|
|
||||||
m_VolumeTrigger: {fileID: 0}
|
|
||||||
m_VolumeFrameworkUpdateModeOption: 2
|
|
||||||
m_RenderPostProcessing: 0
|
|
||||||
m_Antialiasing: 0
|
|
||||||
m_AntialiasingQuality: 2
|
|
||||||
m_StopNaN: 0
|
|
||||||
m_Dithering: 0
|
|
||||||
m_ClearDepth: 1
|
|
||||||
m_AllowXRRendering: 1
|
|
||||||
m_AllowHDROutput: 1
|
|
||||||
m_UseScreenCoordOverride: 0
|
|
||||||
m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
m_RequiresDepthTexture: 0
|
|
||||||
m_RequiresColorTexture: 0
|
|
||||||
m_Version: 2
|
|
||||||
m_TaaSettings:
|
|
||||||
m_Quality: 3
|
|
||||||
m_FrameInfluence: 0.1
|
|
||||||
m_JitterScale: 1
|
|
||||||
m_MipBias: 0
|
|
||||||
m_VarianceClampScale: 0.9
|
|
||||||
m_ContrastAdaptiveSharpening: 0
|
|
||||||
--- !u!1 &8198962528757305497
|
|
||||||
GameObject:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
serializedVersion: 6
|
|
||||||
m_Component:
|
|
||||||
- component: {fileID: 9112716898534404901}
|
|
||||||
- component: {fileID: 6822287017757374257}
|
|
||||||
- component: {fileID: 4750262518011961108}
|
|
||||||
- component: {fileID: 2658714253019925332}
|
|
||||||
- component: {fileID: 8169181699668835961}
|
|
||||||
- component: {fileID: 5456587199021485293}
|
|
||||||
m_Layer: 7
|
|
||||||
m_Name: Player
|
|
||||||
m_TagString: Untagged
|
|
||||||
m_Icon: {fileID: 0}
|
|
||||||
m_NavMeshLayer: 0
|
|
||||||
m_StaticEditorFlags: 0
|
|
||||||
m_IsActive: 1
|
|
||||||
--- !u!4 &9112716898534404901
|
|
||||||
Transform:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 8198962528757305497}
|
|
||||||
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: 5901618247908801032}
|
|
||||||
m_Father: {fileID: 0}
|
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
|
||||||
--- !u!33 &6822287017757374257
|
|
||||||
MeshFilter:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 8198962528757305497}
|
|
||||||
m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0}
|
|
||||||
--- !u!23 &4750262518011961108
|
|
||||||
MeshRenderer:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 8198962528757305497}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_CastShadows: 1
|
|
||||||
m_ReceiveShadows: 1
|
|
||||||
m_DynamicOccludee: 1
|
|
||||||
m_StaticShadowCaster: 0
|
|
||||||
m_MotionVectors: 1
|
|
||||||
m_LightProbeUsage: 1
|
|
||||||
m_ReflectionProbeUsage: 1
|
|
||||||
m_RayTracingMode: 2
|
|
||||||
m_RayTraceProcedural: 0
|
|
||||||
m_RenderingLayerMask: 1
|
|
||||||
m_RendererPriority: 0
|
|
||||||
m_Materials:
|
|
||||||
- {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
|
|
||||||
m_StaticBatchInfo:
|
|
||||||
firstSubMesh: 0
|
|
||||||
subMeshCount: 0
|
|
||||||
m_StaticBatchRoot: {fileID: 0}
|
|
||||||
m_ProbeAnchor: {fileID: 0}
|
|
||||||
m_LightProbeVolumeOverride: {fileID: 0}
|
|
||||||
m_ScaleInLightmap: 1
|
|
||||||
m_ReceiveGI: 1
|
|
||||||
m_PreserveUVs: 0
|
|
||||||
m_IgnoreNormalsForChartDetection: 0
|
|
||||||
m_ImportantGI: 0
|
|
||||||
m_StitchLightmapSeams: 1
|
|
||||||
m_SelectedEditorRenderState: 3
|
|
||||||
m_MinimumChartSize: 4
|
|
||||||
m_AutoUVMaxDistance: 0.5
|
|
||||||
m_AutoUVMaxAngle: 89
|
|
||||||
m_LightmapParameters: {fileID: 0}
|
|
||||||
m_SortingLayerID: 0
|
|
||||||
m_SortingLayer: 0
|
|
||||||
m_SortingOrder: 0
|
|
||||||
m_AdditionalVertexStreams: {fileID: 0}
|
|
||||||
--- !u!136 &2658714253019925332
|
|
||||||
CapsuleCollider:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 8198962528757305497}
|
|
||||||
m_Material: {fileID: 0}
|
|
||||||
m_IncludeLayers:
|
|
||||||
serializedVersion: 2
|
|
||||||
m_Bits: 0
|
|
||||||
m_ExcludeLayers:
|
|
||||||
serializedVersion: 2
|
|
||||||
m_Bits: 0
|
|
||||||
m_LayerOverridePriority: 0
|
|
||||||
m_IsTrigger: 0
|
|
||||||
m_ProvidesContacts: 0
|
|
||||||
m_Enabled: 1
|
|
||||||
serializedVersion: 2
|
|
||||||
m_Radius: 0.5
|
|
||||||
m_Height: 2
|
|
||||||
m_Direction: 1
|
|
||||||
m_Center: {x: 0, y: 0, z: 0}
|
|
||||||
--- !u!114 &8169181699668835961
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 8198962528757305497}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_EditorHideFlags: 0
|
|
||||||
m_Script: {fileID: 11500000, guid: f754cc5f339dcfa4aaec3aa32260c4b8, type: 3}
|
|
||||||
m_Name:
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
--- !u!114 &5456587199021485293
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 8198962528757305497}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_EditorHideFlags: 0
|
|
||||||
m_Script: {fileID: 11500000, guid: 9baf591df06b9bb44ba5313457ba84b3, type: 3}
|
|
||||||
m_Name:
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,5 +1,5 @@
|
||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: f04cfd53e22bdc14b808906f4d98571b
|
guid: a84959718d612514583680c96ee8271a
|
||||||
NativeFormatImporter:
|
NativeFormatImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
mainObjectFileID: 11400000
|
mainObjectFileID: 11400000
|
||||||
|
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
fileFormatVersion: 2
|
|
||||||
guid: cbbffe476d7482a40a31a236538e23b9
|
|
||||||
folderAsset: yes
|
|
||||||
timeCreated: 1528026129
|
|
||||||
licenseType: Pro
|
|
||||||
DefaultImporter:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
|
@ -1,136 +0,0 @@
|
||||||
%YAML 1.1
|
|
||||||
%TAG !u! tag:unity3d.com,2011:
|
|
||||||
--- !u!21 &2100000
|
|
||||||
Material:
|
|
||||||
serializedVersion: 8
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_Name: Red
|
|
||||||
m_Shader: {fileID: 4800000, guid: f17bc7e2694233349a8b22e96c5c43de, type: 3}
|
|
||||||
m_Parent: {fileID: 0}
|
|
||||||
m_ModifiedSerializedProperties: 0
|
|
||||||
m_ValidKeywords: []
|
|
||||||
m_InvalidKeywords: []
|
|
||||||
m_LightmapFlags: 4
|
|
||||||
m_EnableInstancingVariants: 1
|
|
||||||
m_DoubleSidedGI: 0
|
|
||||||
m_CustomRenderQueue: -1
|
|
||||||
stringTagMap: {}
|
|
||||||
disabledShaderPasses: []
|
|
||||||
m_LockedProperties:
|
|
||||||
m_SavedProperties:
|
|
||||||
serializedVersion: 3
|
|
||||||
m_TexEnvs:
|
|
||||||
- _BaseMap:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
- _BumpMap:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
- _DetailAlbedoMap:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
- _DetailMask:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
- _DetailNormalMap:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
- _EmissionMap:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
- _MainTex:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
- _MetallicGlossMap:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
- _OcclusionMap:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
- _ParallaxMap:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
- _SpecGlossMap:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
- unity_Lightmaps:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
- unity_LightmapsInd:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
- unity_ShadowMasks:
|
|
||||||
m_Texture: {fileID: 0}
|
|
||||||
m_Scale: {x: 1, y: 1}
|
|
||||||
m_Offset: {x: 0, y: 0}
|
|
||||||
m_Ints: []
|
|
||||||
m_Floats:
|
|
||||||
- _AlphaClip: 0
|
|
||||||
- _AlphaToMask: 0
|
|
||||||
- _Blend: 0
|
|
||||||
- _BlendModePreserveSpecular: 1
|
|
||||||
- _BlendOp: 0
|
|
||||||
- _BumpScale: 1
|
|
||||||
- _ClearCoatMask: 0
|
|
||||||
- _ClearCoatSmoothness: 0
|
|
||||||
- _Cull: 2
|
|
||||||
- _Cutoff: 0.5
|
|
||||||
- _DetailAlbedoMapScale: 1
|
|
||||||
- _DetailNormalMapScale: 1
|
|
||||||
- _DstBlend: 0
|
|
||||||
- _DstBlendAlpha: 0
|
|
||||||
- _EnvironmentReflections: 1
|
|
||||||
- _FlashAmount: 0
|
|
||||||
- _GlossMapScale: 0
|
|
||||||
- _Glossiness: 0
|
|
||||||
- _GlossyReflections: 0
|
|
||||||
- _Metallic: 0
|
|
||||||
- _OcclusionStrength: 1
|
|
||||||
- _Parallax: 0.005
|
|
||||||
- _QueueOffset: 0
|
|
||||||
- _ReceiveShadows: 1
|
|
||||||
- _SampleGI: 0
|
|
||||||
- _Smoothness: 0.5
|
|
||||||
- _SmoothnessTextureChannel: 0
|
|
||||||
- _SpecularHighlights: 1
|
|
||||||
- _SrcBlend: 1
|
|
||||||
- _SrcBlendAlpha: 1
|
|
||||||
- _Surface: 0
|
|
||||||
- _WorkflowMode: 1
|
|
||||||
- _ZWrite: 1
|
|
||||||
m_Colors:
|
|
||||||
- _BaseColor: {r: 1, g: 0.2924527, b: 0.2924527, a: 1}
|
|
||||||
- _Color: {r: 1, g: 0.29245266, b: 0.29245266, a: 1}
|
|
||||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
|
||||||
- _FlashColor: {r: 1, g: 1, b: 1, a: 1}
|
|
||||||
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
|
||||||
m_BuildTextureStacks: []
|
|
||||||
--- !u!114 &4582237545370899445
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 11
|
|
||||||
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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
|
||||||
m_Name:
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
version: 7
|
|
||||||
|
|
@ -1,91 +0,0 @@
|
||||||
Shader "Custom/SimpleInstancedFlash"
|
|
||||||
{
|
|
||||||
Properties
|
|
||||||
{
|
|
||||||
_BaseColor ("Base Color", Color) = (1,1,1,1)
|
|
||||||
_FlashColor ("Flash Color", Color) = (1,1,1,1) // 闪白颜色
|
|
||||||
_FlashAmount ("Flash Amount", Range(0, 1)) = 0 // 0=不闪, 1=全闪
|
|
||||||
}
|
|
||||||
|
|
||||||
SubShader
|
|
||||||
{
|
|
||||||
Tags { "RenderType"="Opaque" "RenderPipeline"="UniversalPipeline" "Queue"="Geometry+10" }
|
|
||||||
LOD 100
|
|
||||||
|
|
||||||
Pass
|
|
||||||
{
|
|
||||||
Name "ForwardLit"
|
|
||||||
Tags { "LightMode"="UniversalForward" }
|
|
||||||
|
|
||||||
HLSLPROGRAM
|
|
||||||
#pragma vertex vert
|
|
||||||
#pragma fragment frag
|
|
||||||
|
|
||||||
// 开启 GPU Instancing 必须的宏
|
|
||||||
#pragma multi_compile_instancing
|
|
||||||
|
|
||||||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
|
||||||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
|
|
||||||
|
|
||||||
struct Attributes
|
|
||||||
{
|
|
||||||
float4 positionOS : POSITION;
|
|
||||||
float3 normalOS : NORMAL;
|
|
||||||
UNITY_VERTEX_INPUT_INSTANCE_ID // 1. 输入结构体必须包含 Instance ID
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Varyings
|
|
||||||
{
|
|
||||||
float4 positionCS : SV_POSITION;
|
|
||||||
float3 normalWS : TEXCOORD0;
|
|
||||||
UNITY_VERTEX_INPUT_INSTANCE_ID // 2. 输出结构体必须包含 Instance ID
|
|
||||||
};
|
|
||||||
|
|
||||||
// 3. 定义 Instancing 缓冲区 (这里定义的数据每个物体都可以不同)
|
|
||||||
UNITY_INSTANCING_BUFFER_START(Props)
|
|
||||||
UNITY_DEFINE_INSTANCED_PROP(float4, _BaseColor)
|
|
||||||
UNITY_DEFINE_INSTANCED_PROP(float4, _FlashColor)
|
|
||||||
UNITY_DEFINE_INSTANCED_PROP(float, _FlashAmount)
|
|
||||||
UNITY_INSTANCING_BUFFER_END(Props)
|
|
||||||
|
|
||||||
Varyings vert(Attributes input)
|
|
||||||
{
|
|
||||||
Varyings output;
|
|
||||||
|
|
||||||
// 4. 设置 Instance ID
|
|
||||||
UNITY_SETUP_INSTANCE_ID(input);
|
|
||||||
UNITY_TRANSFER_INSTANCE_ID(input, output);
|
|
||||||
|
|
||||||
VertexPositionInputs vertexInput = GetVertexPositionInputs(input.positionOS.xyz);
|
|
||||||
output.positionCS = vertexInput.positionCS;
|
|
||||||
|
|
||||||
VertexNormalInputs normalInput = GetVertexNormalInputs(input.normalOS, float4(0,0,0,0));
|
|
||||||
output.normalWS = normalInput.normalWS;
|
|
||||||
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
half4 frag(Varyings input) : SV_Target
|
|
||||||
{
|
|
||||||
// 5. 片元着色器也要 Setup Instance ID
|
|
||||||
UNITY_SETUP_INSTANCE_ID(input);
|
|
||||||
|
|
||||||
// 6. 使用宏读取属性 (代替直接写 _BaseColor)
|
|
||||||
float4 baseColor = UNITY_ACCESS_INSTANCED_PROP(Props, _BaseColor);
|
|
||||||
float4 flashColor = UNITY_ACCESS_INSTANCED_PROP(Props, _FlashColor);
|
|
||||||
float flashAmount = UNITY_ACCESS_INSTANCED_PROP(Props, _FlashAmount);
|
|
||||||
|
|
||||||
// 简单光照计算 (Lambert)
|
|
||||||
Light mainLight = GetMainLight();
|
|
||||||
float NdotL = saturate(dot(input.normalWS, mainLight.direction));
|
|
||||||
float3 lighting = baseColor.rgb * (mainLight.color * NdotL + unity_AmbientSky.rgb); // 加上环境光防止背光全黑
|
|
||||||
|
|
||||||
// 混合闪白效果
|
|
||||||
float3 finalColor = lerp(lighting, flashColor.rgb, flashAmount);
|
|
||||||
|
|
||||||
return float4(finalColor, baseColor.a);
|
|
||||||
}
|
|
||||||
ENDHLSL
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
fileFormatVersion: 2
|
|
||||||
guid: f17bc7e2694233349a8b22e96c5c43de
|
|
||||||
ShaderImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
defaultTextures: []
|
|
||||||
nonModifiableTextures: []
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
fileFormatVersion: 2
|
|
||||||
guid: 8d68657bbcaf3164a9868d3041485557
|
|
||||||
folderAsset: yes
|
|
||||||
timeCreated: 1528026132
|
|
||||||
licenseType: Pro
|
|
||||||
DefaultImporter:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
|
@ -1,356 +0,0 @@
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// <auto-generated>
|
|
||||||
// This code was auto-generated by com.unity.inputsystem:InputActionCodeGenerator
|
|
||||||
// version 1.14.2
|
|
||||||
// from Assets/PlayerInputActions.inputactions
|
|
||||||
//
|
|
||||||
// Changes to this file may cause incorrect behavior and will be lost if
|
|
||||||
// the code is regenerated.
|
|
||||||
// </auto-generated>
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using UnityEngine.InputSystem;
|
|
||||||
using UnityEngine.InputSystem.Utilities;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Provides programmatic access to <see cref="InputActionAsset" />, <see cref="InputActionMap" />, <see cref="InputAction" /> and <see cref="InputControlScheme" /> instances defined in asset "Assets/PlayerInputActions.inputactions".
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>
|
|
||||||
/// This class is source generated and any manual edits will be discarded if the associated asset is reimported or modified.
|
|
||||||
/// </remarks>
|
|
||||||
/// <example>
|
|
||||||
/// <code>
|
|
||||||
/// using namespace UnityEngine;
|
|
||||||
/// using UnityEngine.InputSystem;
|
|
||||||
///
|
|
||||||
/// // Example of using an InputActionMap named "Player" from a UnityEngine.MonoBehaviour implementing callback interface.
|
|
||||||
/// public class Example : MonoBehaviour, MyActions.IPlayerActions
|
|
||||||
/// {
|
|
||||||
/// private MyActions_Actions m_Actions; // Source code representation of asset.
|
|
||||||
/// private MyActions_Actions.PlayerActions m_Player; // Source code representation of action map.
|
|
||||||
///
|
|
||||||
/// void Awake()
|
|
||||||
/// {
|
|
||||||
/// m_Actions = new MyActions_Actions(); // Create asset object.
|
|
||||||
/// m_Player = m_Actions.Player; // Extract action map object.
|
|
||||||
/// m_Player.AddCallbacks(this); // Register callback interface IPlayerActions.
|
|
||||||
/// }
|
|
||||||
///
|
|
||||||
/// void OnDestroy()
|
|
||||||
/// {
|
|
||||||
/// m_Actions.Dispose(); // Destroy asset object.
|
|
||||||
/// }
|
|
||||||
///
|
|
||||||
/// void OnEnable()
|
|
||||||
/// {
|
|
||||||
/// m_Player.Enable(); // Enable all actions within map.
|
|
||||||
/// }
|
|
||||||
///
|
|
||||||
/// void OnDisable()
|
|
||||||
/// {
|
|
||||||
/// m_Player.Disable(); // Disable all actions within map.
|
|
||||||
/// }
|
|
||||||
///
|
|
||||||
/// #region Interface implementation of MyActions.IPlayerActions
|
|
||||||
///
|
|
||||||
/// // Invoked when "Move" action is either started, performed or canceled.
|
|
||||||
/// public void OnMove(InputAction.CallbackContext context)
|
|
||||||
/// {
|
|
||||||
/// Debug.Log($"OnMove: {context.ReadValue<Vector2>()}");
|
|
||||||
/// }
|
|
||||||
///
|
|
||||||
/// // Invoked when "Attack" action is either started, performed or canceled.
|
|
||||||
/// public void OnAttack(InputAction.CallbackContext context)
|
|
||||||
/// {
|
|
||||||
/// Debug.Log($"OnAttack: {context.ReadValue<float>()}");
|
|
||||||
/// }
|
|
||||||
///
|
|
||||||
/// #endregion
|
|
||||||
/// }
|
|
||||||
/// </code>
|
|
||||||
/// </example>
|
|
||||||
public partial class @PlayerInputActions: IInputActionCollection2, IDisposable
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Provides access to the underlying asset instance.
|
|
||||||
/// </summary>
|
|
||||||
public InputActionAsset asset { get; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Constructs a new instance.
|
|
||||||
/// </summary>
|
|
||||||
public @PlayerInputActions()
|
|
||||||
{
|
|
||||||
asset = InputActionAsset.FromJson(@"{
|
|
||||||
""version"": 1,
|
|
||||||
""name"": ""PlayerInputActions"",
|
|
||||||
""maps"": [
|
|
||||||
{
|
|
||||||
""name"": ""Game"",
|
|
||||||
""id"": ""c320222a-39c4-47d5-bb95-1702176bdb69"",
|
|
||||||
""actions"": [
|
|
||||||
{
|
|
||||||
""name"": ""Move"",
|
|
||||||
""type"": ""Value"",
|
|
||||||
""id"": ""4875d1e6-7f0e-490d-88f4-b97f322ce0dd"",
|
|
||||||
""expectedControlType"": ""Vector2"",
|
|
||||||
""processors"": """",
|
|
||||||
""interactions"": """",
|
|
||||||
""initialStateCheck"": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
""bindings"": [
|
|
||||||
{
|
|
||||||
""name"": ""2D Vector"",
|
|
||||||
""id"": ""c2c107da-b6b9-4daf-be56-c0fc0a06b4d9"",
|
|
||||||
""path"": ""2DVector"",
|
|
||||||
""interactions"": """",
|
|
||||||
""processors"": """",
|
|
||||||
""groups"": """",
|
|
||||||
""action"": ""Move"",
|
|
||||||
""isComposite"": true,
|
|
||||||
""isPartOfComposite"": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
""name"": ""up"",
|
|
||||||
""id"": ""a3b11b4d-c157-417a-a38a-d89a034da71b"",
|
|
||||||
""path"": ""<Keyboard>/w"",
|
|
||||||
""interactions"": """",
|
|
||||||
""processors"": """",
|
|
||||||
""groups"": """",
|
|
||||||
""action"": ""Move"",
|
|
||||||
""isComposite"": false,
|
|
||||||
""isPartOfComposite"": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
""name"": ""down"",
|
|
||||||
""id"": ""0a0a8e30-3cf7-4889-aeb1-e8ddebcd944b"",
|
|
||||||
""path"": ""<Keyboard>/s"",
|
|
||||||
""interactions"": """",
|
|
||||||
""processors"": """",
|
|
||||||
""groups"": """",
|
|
||||||
""action"": ""Move"",
|
|
||||||
""isComposite"": false,
|
|
||||||
""isPartOfComposite"": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
""name"": ""left"",
|
|
||||||
""id"": ""2eeac222-1829-4c5b-9829-5e36b3fe989e"",
|
|
||||||
""path"": ""<Keyboard>/a"",
|
|
||||||
""interactions"": """",
|
|
||||||
""processors"": """",
|
|
||||||
""groups"": """",
|
|
||||||
""action"": ""Move"",
|
|
||||||
""isComposite"": false,
|
|
||||||
""isPartOfComposite"": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
""name"": ""right"",
|
|
||||||
""id"": ""89d5e951-0db5-4f1e-806b-f29f84507a34"",
|
|
||||||
""path"": ""<Keyboard>/d"",
|
|
||||||
""interactions"": """",
|
|
||||||
""processors"": """",
|
|
||||||
""groups"": """",
|
|
||||||
""action"": ""Move"",
|
|
||||||
""isComposite"": false,
|
|
||||||
""isPartOfComposite"": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
""controlSchemes"": []
|
|
||||||
}");
|
|
||||||
// Game
|
|
||||||
m_Game = asset.FindActionMap("Game", throwIfNotFound: true);
|
|
||||||
m_Game_Move = m_Game.FindAction("Move", throwIfNotFound: true);
|
|
||||||
}
|
|
||||||
|
|
||||||
~@PlayerInputActions()
|
|
||||||
{
|
|
||||||
UnityEngine.Debug.Assert(!m_Game.enabled, "This will cause a leak and performance issues, PlayerInputActions.Game.Disable() has not been called.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Destroys this asset and all associated <see cref="InputAction"/> instances.
|
|
||||||
/// </summary>
|
|
||||||
public void Dispose()
|
|
||||||
{
|
|
||||||
UnityEngine.Object.Destroy(asset);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc cref="UnityEngine.InputSystem.InputActionAsset.bindingMask" />
|
|
||||||
public InputBinding? bindingMask
|
|
||||||
{
|
|
||||||
get => asset.bindingMask;
|
|
||||||
set => asset.bindingMask = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc cref="UnityEngine.InputSystem.InputActionAsset.devices" />
|
|
||||||
public ReadOnlyArray<InputDevice>? devices
|
|
||||||
{
|
|
||||||
get => asset.devices;
|
|
||||||
set => asset.devices = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc cref="UnityEngine.InputSystem.InputActionAsset.controlSchemes" />
|
|
||||||
public ReadOnlyArray<InputControlScheme> controlSchemes => asset.controlSchemes;
|
|
||||||
|
|
||||||
/// <inheritdoc cref="UnityEngine.InputSystem.InputActionAsset.Contains(InputAction)" />
|
|
||||||
public bool Contains(InputAction action)
|
|
||||||
{
|
|
||||||
return asset.Contains(action);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc cref="UnityEngine.InputSystem.InputActionAsset.GetEnumerator()" />
|
|
||||||
public IEnumerator<InputAction> GetEnumerator()
|
|
||||||
{
|
|
||||||
return asset.GetEnumerator();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc cref="IEnumerable.GetEnumerator()" />
|
|
||||||
IEnumerator IEnumerable.GetEnumerator()
|
|
||||||
{
|
|
||||||
return GetEnumerator();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc cref="UnityEngine.InputSystem.InputActionAsset.Enable()" />
|
|
||||||
public void Enable()
|
|
||||||
{
|
|
||||||
asset.Enable();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc cref="UnityEngine.InputSystem.InputActionAsset.Disable()" />
|
|
||||||
public void Disable()
|
|
||||||
{
|
|
||||||
asset.Disable();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc cref="UnityEngine.InputSystem.InputActionAsset.bindings" />
|
|
||||||
public IEnumerable<InputBinding> bindings => asset.bindings;
|
|
||||||
|
|
||||||
/// <inheritdoc cref="UnityEngine.InputSystem.InputActionAsset.FindAction(string, bool)" />
|
|
||||||
public InputAction FindAction(string actionNameOrId, bool throwIfNotFound = false)
|
|
||||||
{
|
|
||||||
return asset.FindAction(actionNameOrId, throwIfNotFound);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc cref="UnityEngine.InputSystem.InputActionAsset.FindBinding(InputBinding, out InputAction)" />
|
|
||||||
public int FindBinding(InputBinding bindingMask, out InputAction action)
|
|
||||||
{
|
|
||||||
return asset.FindBinding(bindingMask, out action);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Game
|
|
||||||
private readonly InputActionMap m_Game;
|
|
||||||
private List<IGameActions> m_GameActionsCallbackInterfaces = new List<IGameActions>();
|
|
||||||
private readonly InputAction m_Game_Move;
|
|
||||||
/// <summary>
|
|
||||||
/// Provides access to input actions defined in input action map "Game".
|
|
||||||
/// </summary>
|
|
||||||
public struct GameActions
|
|
||||||
{
|
|
||||||
private @PlayerInputActions m_Wrapper;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Construct a new instance of the input action map wrapper class.
|
|
||||||
/// </summary>
|
|
||||||
public GameActions(@PlayerInputActions wrapper) { m_Wrapper = wrapper; }
|
|
||||||
/// <summary>
|
|
||||||
/// Provides access to the underlying input action "Game/Move".
|
|
||||||
/// </summary>
|
|
||||||
public InputAction @Move => m_Wrapper.m_Game_Move;
|
|
||||||
/// <summary>
|
|
||||||
/// Provides access to the underlying input action map instance.
|
|
||||||
/// </summary>
|
|
||||||
public InputActionMap Get() { return m_Wrapper.m_Game; }
|
|
||||||
/// <inheritdoc cref="UnityEngine.InputSystem.InputActionMap.Enable()" />
|
|
||||||
public void Enable() { Get().Enable(); }
|
|
||||||
/// <inheritdoc cref="UnityEngine.InputSystem.InputActionMap.Disable()" />
|
|
||||||
public void Disable() { Get().Disable(); }
|
|
||||||
/// <inheritdoc cref="UnityEngine.InputSystem.InputActionMap.enabled" />
|
|
||||||
public bool enabled => Get().enabled;
|
|
||||||
/// <summary>
|
|
||||||
/// Implicitly converts an <see ref="GameActions" /> to an <see ref="InputActionMap" /> instance.
|
|
||||||
/// </summary>
|
|
||||||
public static implicit operator InputActionMap(GameActions set) { return set.Get(); }
|
|
||||||
/// <summary>
|
|
||||||
/// Adds <see cref="InputAction.started"/>, <see cref="InputAction.performed"/> and <see cref="InputAction.canceled"/> callbacks provided via <param cref="instance" /> on all input actions contained in this map.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="instance">Callback instance.</param>
|
|
||||||
/// <remarks>
|
|
||||||
/// If <paramref name="instance" /> is <c>null</c> or <paramref name="instance"/> have already been added this method does nothing.
|
|
||||||
/// </remarks>
|
|
||||||
/// <seealso cref="GameActions" />
|
|
||||||
public void AddCallbacks(IGameActions instance)
|
|
||||||
{
|
|
||||||
if (instance == null || m_Wrapper.m_GameActionsCallbackInterfaces.Contains(instance)) return;
|
|
||||||
m_Wrapper.m_GameActionsCallbackInterfaces.Add(instance);
|
|
||||||
@Move.started += instance.OnMove;
|
|
||||||
@Move.performed += instance.OnMove;
|
|
||||||
@Move.canceled += instance.OnMove;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Removes <see cref="InputAction.started"/>, <see cref="InputAction.performed"/> and <see cref="InputAction.canceled"/> callbacks provided via <param cref="instance" /> on all input actions contained in this map.
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>
|
|
||||||
/// Calling this method when <paramref name="instance" /> have not previously been registered has no side-effects.
|
|
||||||
/// </remarks>
|
|
||||||
/// <seealso cref="GameActions" />
|
|
||||||
private void UnregisterCallbacks(IGameActions instance)
|
|
||||||
{
|
|
||||||
@Move.started -= instance.OnMove;
|
|
||||||
@Move.performed -= instance.OnMove;
|
|
||||||
@Move.canceled -= instance.OnMove;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Unregisters <param cref="instance" /> and unregisters all input action callbacks via <see cref="GameActions.UnregisterCallbacks(IGameActions)" />.
|
|
||||||
/// </summary>
|
|
||||||
/// <seealso cref="GameActions.UnregisterCallbacks(IGameActions)" />
|
|
||||||
public void RemoveCallbacks(IGameActions instance)
|
|
||||||
{
|
|
||||||
if (m_Wrapper.m_GameActionsCallbackInterfaces.Remove(instance))
|
|
||||||
UnregisterCallbacks(instance);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Replaces all existing callback instances and previously registered input action callbacks associated with them with callbacks provided via <param cref="instance" />.
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>
|
|
||||||
/// If <paramref name="instance" /> is <c>null</c>, calling this method will only unregister all existing callbacks but not register any new callbacks.
|
|
||||||
/// </remarks>
|
|
||||||
/// <seealso cref="GameActions.AddCallbacks(IGameActions)" />
|
|
||||||
/// <seealso cref="GameActions.RemoveCallbacks(IGameActions)" />
|
|
||||||
/// <seealso cref="GameActions.UnregisterCallbacks(IGameActions)" />
|
|
||||||
public void SetCallbacks(IGameActions instance)
|
|
||||||
{
|
|
||||||
foreach (var item in m_Wrapper.m_GameActionsCallbackInterfaces)
|
|
||||||
UnregisterCallbacks(item);
|
|
||||||
m_Wrapper.m_GameActionsCallbackInterfaces.Clear();
|
|
||||||
AddCallbacks(instance);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
/// Provides a new <see cref="GameActions" /> instance referencing this action map.
|
|
||||||
/// </summary>
|
|
||||||
public GameActions @Game => new GameActions(this);
|
|
||||||
/// <summary>
|
|
||||||
/// Interface to implement callback methods for all input action callbacks associated with input actions defined by "Game" which allows adding and removing callbacks.
|
|
||||||
/// </summary>
|
|
||||||
/// <seealso cref="GameActions.AddCallbacks(IGameActions)" />
|
|
||||||
/// <seealso cref="GameActions.RemoveCallbacks(IGameActions)" />
|
|
||||||
public interface IGameActions
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Method invoked when associated input action "Move" is either <see cref="UnityEngine.InputSystem.InputAction.started" />, <see cref="UnityEngine.InputSystem.InputAction.performed" /> or <see cref="UnityEngine.InputSystem.InputAction.canceled" />.
|
|
||||||
/// </summary>
|
|
||||||
/// <seealso cref="UnityEngine.InputSystem.InputAction.started" />
|
|
||||||
/// <seealso cref="UnityEngine.InputSystem.InputAction.performed" />
|
|
||||||
/// <seealso cref="UnityEngine.InputSystem.InputAction.canceled" />
|
|
||||||
void OnMove(InputAction.CallbackContext context);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
fileFormatVersion: 2
|
|
||||||
guid: 92c0635be6ba6c74797e5145587b1f4a
|
|
||||||
folderAsset: yes
|
|
||||||
DefaultImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
|
@ -122,7 +122,92 @@ NavMeshSettings:
|
||||||
debug:
|
debug:
|
||||||
m_Flags: 0
|
m_Flags: 0
|
||||||
m_NavMeshData: {fileID: 0}
|
m_NavMeshData: {fileID: 0}
|
||||||
|
--- !u!1 &2105673978
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 2105673979}
|
||||||
|
- component: {fileID: 2105673980}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: GameObject
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!4 &2105673979
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2105673978}
|
||||||
|
serializedVersion: 2
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 5000, y: 5000, z: 5000}
|
||||||
|
m_ConstrainProportionsScale: 1
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 0}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
--- !u!212 &2105673980
|
||||||
|
SpriteRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2105673978}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_CastShadows: 0
|
||||||
|
m_ReceiveShadows: 0
|
||||||
|
m_DynamicOccludee: 1
|
||||||
|
m_StaticShadowCaster: 0
|
||||||
|
m_MotionVectors: 1
|
||||||
|
m_LightProbeUsage: 1
|
||||||
|
m_ReflectionProbeUsage: 1
|
||||||
|
m_RayTracingMode: 0
|
||||||
|
m_RayTraceProcedural: 0
|
||||||
|
m_RenderingLayerMask: 1
|
||||||
|
m_RendererPriority: 0
|
||||||
|
m_Materials:
|
||||||
|
- {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
|
||||||
|
m_StaticBatchInfo:
|
||||||
|
firstSubMesh: 0
|
||||||
|
subMeshCount: 0
|
||||||
|
m_StaticBatchRoot: {fileID: 0}
|
||||||
|
m_ProbeAnchor: {fileID: 0}
|
||||||
|
m_LightProbeVolumeOverride: {fileID: 0}
|
||||||
|
m_ScaleInLightmap: 1
|
||||||
|
m_ReceiveGI: 1
|
||||||
|
m_PreserveUVs: 0
|
||||||
|
m_IgnoreNormalsForChartDetection: 0
|
||||||
|
m_ImportantGI: 0
|
||||||
|
m_StitchLightmapSeams: 1
|
||||||
|
m_SelectedEditorRenderState: 0
|
||||||
|
m_MinimumChartSize: 4
|
||||||
|
m_AutoUVMaxDistance: 0.5
|
||||||
|
m_AutoUVMaxAngle: 89
|
||||||
|
m_LightmapParameters: {fileID: 0}
|
||||||
|
m_SortingLayerID: 0
|
||||||
|
m_SortingLayer: 0
|
||||||
|
m_SortingOrder: 0
|
||||||
|
m_Sprite: {fileID: 21300000, guid: ab45c3f613f388d43bbf43ec05eb92e2, type: 3}
|
||||||
|
m_Color: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
m_FlipX: 0
|
||||||
|
m_FlipY: 0
|
||||||
|
m_DrawMode: 0
|
||||||
|
m_Size: {x: 8, y: 8}
|
||||||
|
m_AdaptiveModeThreshold: 0.5
|
||||||
|
m_SpriteTileMode: 0
|
||||||
|
m_WasSpriteAssigned: 1
|
||||||
|
m_MaskInteraction: 0
|
||||||
|
m_SpriteSortPoint: 0
|
||||||
--- !u!1660057539 &9223372036854775807
|
--- !u!1660057539 &9223372036854775807
|
||||||
SceneRoots:
|
SceneRoots:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
m_Roots: []
|
m_Roots:
|
||||||
|
- {fileID: 2105673979}
|
||||||
|
|
|
||||||
|
|
@ -1,104 +0,0 @@
|
||||||
%YAML 1.1
|
|
||||||
%TAG !u! tag:unity3d.com,2011:
|
|
||||||
--- !u!114 &-32820517437979890
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 3
|
|
||||||
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: 0b2db86121404754db890f4c8dfe81b2, type: 3}
|
|
||||||
m_Name: Bloom
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
active: 1
|
|
||||||
skipIterations:
|
|
||||||
m_OverrideState: 0
|
|
||||||
m_Value: 1
|
|
||||||
threshold:
|
|
||||||
m_OverrideState: 0
|
|
||||||
m_Value: 0.9
|
|
||||||
intensity:
|
|
||||||
m_OverrideState: 1
|
|
||||||
m_Value: 1
|
|
||||||
scatter:
|
|
||||||
m_OverrideState: 0
|
|
||||||
m_Value: 0.7
|
|
||||||
clamp:
|
|
||||||
m_OverrideState: 0
|
|
||||||
m_Value: 65472
|
|
||||||
tint:
|
|
||||||
m_OverrideState: 0
|
|
||||||
m_Value: {r: 1, g: 1, b: 1, a: 1}
|
|
||||||
highQualityFiltering:
|
|
||||||
m_OverrideState: 0
|
|
||||||
m_Value: 0
|
|
||||||
downscale:
|
|
||||||
m_OverrideState: 0
|
|
||||||
m_Value: 0
|
|
||||||
maxIterations:
|
|
||||||
m_OverrideState: 0
|
|
||||||
m_Value: 6
|
|
||||||
dirtTexture:
|
|
||||||
m_OverrideState: 0
|
|
||||||
m_Value: {fileID: 0}
|
|
||||||
dimension: 1
|
|
||||||
dirtIntensity:
|
|
||||||
m_OverrideState: 0
|
|
||||||
m_Value: 0
|
|
||||||
--- !u!114 &11400000
|
|
||||||
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: d7fd9488000d3734a9e00ee676215985, type: 3}
|
|
||||||
m_Name: GlobalVolumeProfile
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
components:
|
|
||||||
- {fileID: 1881579288749618558}
|
|
||||||
- {fileID: -32820517437979890}
|
|
||||||
--- !u!114 &1881579288749618558
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 3
|
|
||||||
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: 97c23e3b12dc18c42a140437e53d3951, type: 3}
|
|
||||||
m_Name: Tonemapping
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
active: 1
|
|
||||||
mode:
|
|
||||||
m_OverrideState: 1
|
|
||||||
m_Value: 1
|
|
||||||
neutralHDRRangeReductionMode:
|
|
||||||
m_OverrideState: 0
|
|
||||||
m_Value: 2
|
|
||||||
acesPreset:
|
|
||||||
m_OverrideState: 0
|
|
||||||
m_Value: 3
|
|
||||||
hueShiftAmount:
|
|
||||||
m_OverrideState: 0
|
|
||||||
m_Value: 0
|
|
||||||
detectPaperWhite:
|
|
||||||
m_OverrideState: 0
|
|
||||||
m_Value: 0
|
|
||||||
paperWhite:
|
|
||||||
m_OverrideState: 0
|
|
||||||
m_Value: 300
|
|
||||||
detectBrightnessLimits:
|
|
||||||
m_OverrideState: 0
|
|
||||||
m_Value: 1
|
|
||||||
minNits:
|
|
||||||
m_OverrideState: 0
|
|
||||||
m_Value: 0.005
|
|
||||||
maxNits:
|
|
||||||
m_OverrideState: 0
|
|
||||||
m_Value: 1000
|
|
||||||
|
|
@ -197,173 +197,6 @@ CanvasRenderer:
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 70728207}
|
m_GameObject: {fileID: 70728207}
|
||||||
m_CullTransparentMesh: 1
|
m_CullTransparentMesh: 1
|
||||||
--- !u!1 &203844586
|
|
||||||
GameObject:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
serializedVersion: 6
|
|
||||||
m_Component:
|
|
||||||
- component: {fileID: 203844589}
|
|
||||||
- component: {fileID: 203844588}
|
|
||||||
- component: {fileID: 203844587}
|
|
||||||
m_Layer: 0
|
|
||||||
m_Name: Directional Light
|
|
||||||
m_TagString: Untagged
|
|
||||||
m_Icon: {fileID: 0}
|
|
||||||
m_NavMeshLayer: 0
|
|
||||||
m_StaticEditorFlags: 0
|
|
||||||
m_IsActive: 1
|
|
||||||
--- !u!114 &203844587
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 203844586}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_EditorHideFlags: 0
|
|
||||||
m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3}
|
|
||||||
m_Name:
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
m_Version: 3
|
|
||||||
m_UsePipelineSettings: 1
|
|
||||||
m_AdditionalLightsShadowResolutionTier: 2
|
|
||||||
m_LightLayerMask: 1
|
|
||||||
m_RenderingLayers: 1
|
|
||||||
m_CustomShadowLayers: 0
|
|
||||||
m_ShadowLayerMask: 1
|
|
||||||
m_ShadowRenderingLayers: 1
|
|
||||||
m_LightCookieSize: {x: 1, y: 1}
|
|
||||||
m_LightCookieOffset: {x: 0, y: 0}
|
|
||||||
m_SoftShadowQuality: 1
|
|
||||||
--- !u!108 &203844588
|
|
||||||
Light:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 203844586}
|
|
||||||
m_Enabled: 1
|
|
||||||
serializedVersion: 10
|
|
||||||
m_Type: 1
|
|
||||||
m_Shape: 0
|
|
||||||
m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
|
|
||||||
m_Intensity: 1
|
|
||||||
m_Range: 10
|
|
||||||
m_SpotAngle: 30
|
|
||||||
m_InnerSpotAngle: 21.80208
|
|
||||||
m_CookieSize: 10
|
|
||||||
m_Shadows:
|
|
||||||
m_Type: 2
|
|
||||||
m_Resolution: -1
|
|
||||||
m_CustomResolution: -1
|
|
||||||
m_Strength: 1
|
|
||||||
m_Bias: 0.05
|
|
||||||
m_NormalBias: 0.4
|
|
||||||
m_NearPlane: 0.2
|
|
||||||
m_CullingMatrixOverride:
|
|
||||||
e00: 1
|
|
||||||
e01: 0
|
|
||||||
e02: 0
|
|
||||||
e03: 0
|
|
||||||
e10: 0
|
|
||||||
e11: 1
|
|
||||||
e12: 0
|
|
||||||
e13: 0
|
|
||||||
e20: 0
|
|
||||||
e21: 0
|
|
||||||
e22: 1
|
|
||||||
e23: 0
|
|
||||||
e30: 0
|
|
||||||
e31: 0
|
|
||||||
e32: 0
|
|
||||||
e33: 1
|
|
||||||
m_UseCullingMatrixOverride: 0
|
|
||||||
m_Cookie: {fileID: 0}
|
|
||||||
m_DrawHalo: 0
|
|
||||||
m_Flare: {fileID: 0}
|
|
||||||
m_RenderMode: 0
|
|
||||||
m_CullingMask:
|
|
||||||
serializedVersion: 2
|
|
||||||
m_Bits: 4294967295
|
|
||||||
m_RenderingLayerMask: 1
|
|
||||||
m_Lightmapping: 4
|
|
||||||
m_LightShadowCasterMode: 0
|
|
||||||
m_AreaSize: {x: 1, y: 1}
|
|
||||||
m_BounceIntensity: 1
|
|
||||||
m_ColorTemperature: 6570
|
|
||||||
m_UseColorTemperature: 0
|
|
||||||
m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
m_UseBoundingSphereOverride: 0
|
|
||||||
m_UseViewFrustumForShadowCasterCull: 1
|
|
||||||
m_ShadowRadius: 0
|
|
||||||
m_ShadowAngle: 0
|
|
||||||
--- !u!4 &203844589
|
|
||||||
Transform:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 203844586}
|
|
||||||
serializedVersion: 2
|
|
||||||
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
|
|
||||||
m_LocalPosition: {x: 0, y: 3, z: 0}
|
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
|
||||||
m_ConstrainProportionsScale: 0
|
|
||||||
m_Children: []
|
|
||||||
m_Father: {fileID: 0}
|
|
||||||
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
|
|
||||||
--- !u!1 &1160234425
|
|
||||||
GameObject:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
serializedVersion: 6
|
|
||||||
m_Component:
|
|
||||||
- component: {fileID: 1160234427}
|
|
||||||
- component: {fileID: 1160234426}
|
|
||||||
m_Layer: 0
|
|
||||||
m_Name: Global Volume
|
|
||||||
m_TagString: Untagged
|
|
||||||
m_Icon: {fileID: 0}
|
|
||||||
m_NavMeshLayer: 0
|
|
||||||
m_StaticEditorFlags: 0
|
|
||||||
m_IsActive: 1
|
|
||||||
--- !u!114 &1160234426
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 1160234425}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_EditorHideFlags: 0
|
|
||||||
m_Script: {fileID: 11500000, guid: 172515602e62fb746b5d573b38a5fe58, type: 3}
|
|
||||||
m_Name:
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
m_IsGlobal: 1
|
|
||||||
priority: 0
|
|
||||||
blendDistance: 0
|
|
||||||
weight: 1
|
|
||||||
sharedProfile: {fileID: 11400000, guid: dde468eff36cc784fa023279ae4d4d33, type: 2}
|
|
||||||
--- !u!4 &1160234427
|
|
||||||
Transform:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 1160234425}
|
|
||||||
serializedVersion: 2
|
|
||||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
|
||||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
|
||||||
m_ConstrainProportionsScale: 0
|
|
||||||
m_Children: []
|
|
||||||
m_Father: {fileID: 0}
|
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
|
||||||
--- !u!1 &1779441773
|
--- !u!1 &1779441773
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|
@ -470,6 +303,4 @@ RectTransform:
|
||||||
SceneRoots:
|
SceneRoots:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
m_Roots:
|
m_Roots:
|
||||||
- {fileID: 203844589}
|
|
||||||
- {fileID: 1160234427}
|
|
||||||
- {fileID: 1779441777}
|
- {fileID: 1779441777}
|
||||||
|
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
fileFormatVersion: 2
|
|
||||||
guid: 20cdfc6b68f9f074a88435387f8f30a3
|
|
||||||
folderAsset: yes
|
|
||||||
DefaultImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
|
@ -1,51 +0,0 @@
|
||||||
using UnityEngine;
|
|
||||||
|
|
||||||
namespace Components
|
|
||||||
{
|
|
||||||
public class InputComponent : MonoBehaviour
|
|
||||||
{
|
|
||||||
private PlayerInputActions _inputActions;
|
|
||||||
private bool _isListening = false;
|
|
||||||
|
|
||||||
private Vector3 _direction = Vector3.zero;
|
|
||||||
public Vector3 Direction => _direction;
|
|
||||||
|
|
||||||
public void OnInit()
|
|
||||||
{
|
|
||||||
_inputActions = new();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void OnUpdate(float elapseSeconds, float realElapseSeconds)
|
|
||||||
{
|
|
||||||
if (_isListening && _inputActions != null)
|
|
||||||
{
|
|
||||||
ReadInput();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void OnReset()
|
|
||||||
{
|
|
||||||
_inputActions = null;
|
|
||||||
_isListening = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ReadInput()
|
|
||||||
{
|
|
||||||
Vector2 rawDir = _inputActions.Game.Move.ReadValue<Vector2>();
|
|
||||||
_direction = new Vector3(rawDir.x, 0, rawDir.y);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetListening(bool isListening)
|
|
||||||
{
|
|
||||||
_isListening = isListening;
|
|
||||||
if (_isListening)
|
|
||||||
{
|
|
||||||
_inputActions.Enable();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_inputActions.Disable();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
||||||
using UnityEngine;
|
|
||||||
|
|
||||||
namespace Components
|
|
||||||
{
|
|
||||||
public class MovementComponent : MonoBehaviour
|
|
||||||
{
|
|
||||||
private bool _isMoving = false;
|
|
||||||
private Vector3 _direction = Vector3.forward;
|
|
||||||
private float _speed = 0;
|
|
||||||
private Transform _cachedTransform;
|
|
||||||
|
|
||||||
public void OnInit(float speed, Transform transform)
|
|
||||||
{
|
|
||||||
_speed = speed;
|
|
||||||
_cachedTransform = transform;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void OnUpdate(float elapseSeconds, float realElapseSeconds)
|
|
||||||
{
|
|
||||||
if (_isMoving && _cachedTransform != null)
|
|
||||||
{
|
|
||||||
Move(elapseSeconds);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void OnReset()
|
|
||||||
{
|
|
||||||
_speed = 0;
|
|
||||||
_cachedTransform = null;
|
|
||||||
_isMoving = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Move(float deltaTime = 0)
|
|
||||||
{
|
|
||||||
_cachedTransform.Translate(_direction * _speed * deltaTime);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetMove(bool isMoving) => _isMoving = isMoving;
|
|
||||||
public void SetDirection(Vector3 direction) => _direction = direction;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using DataTable;
|
using DataTable;
|
||||||
using Definition;
|
using Definition;
|
||||||
|
|
@ -14,22 +15,45 @@ namespace CustomComponent
|
||||||
[DisallowMultipleComponent]
|
[DisallowMultipleComponent]
|
||||||
public class DialogComponent : GameFrameworkComponent
|
public class DialogComponent : GameFrameworkComponent
|
||||||
{
|
{
|
||||||
|
[Serializable]
|
||||||
|
private sealed class SpeakerPortraitBinding
|
||||||
|
{
|
||||||
|
[SerializeField] private string _speakerId = string.Empty;
|
||||||
|
[SerializeField] private List<Sprite> _portraits = new List<Sprite>();
|
||||||
|
|
||||||
|
public string SpeakerId => _speakerId;
|
||||||
|
public List<Sprite> Portraits => _portraits;
|
||||||
|
}
|
||||||
|
|
||||||
#region Property
|
#region Property
|
||||||
|
|
||||||
private const int DialogChapterDivisor = 1000;
|
private const int DialogChapterDivisor = 1000;
|
||||||
private const int LineChapterDivisor = 100000000;
|
private const int LineChapterDivisor = 100000000;
|
||||||
private const int LineDialogDivisor = 100000;
|
private const int LineDialogDivisor = 100000;
|
||||||
|
|
||||||
|
[Header("角色立绘配置(拖拽 Sprite)")]
|
||||||
|
[SerializeField] private List<SpeakerPortraitBinding> _speakerPortraitBindings = new List<SpeakerPortraitBinding>();
|
||||||
|
|
||||||
private readonly Dictionary<int, DRDialog> _dialogMap = new();
|
private readonly Dictionary<int, DRDialog> _dialogMap = new();
|
||||||
|
|
||||||
private readonly Dictionary<int, List<DRDialogLine>> _dialogLinesMap = new();
|
private readonly Dictionary<int, List<DRDialogLine>> _dialogLinesMap = new();
|
||||||
|
|
||||||
private readonly Dictionary<int, int> _dialogFirstLineIdMap = new();
|
private readonly Dictionary<int, int> _dialogFirstLineIdMap = new();
|
||||||
|
private static readonly HashSet<string> NonPortraitSpeakerIds = new(System.StringComparer.OrdinalIgnoreCase)
|
||||||
|
{
|
||||||
|
"Other",
|
||||||
|
"Subtitle",
|
||||||
|
"Time"
|
||||||
|
};
|
||||||
|
|
||||||
private IDataTable<DRDialog> _dtDialog;
|
private IDataTable<DRDialog> _dtDialog;
|
||||||
private IDataTable<DRDialogLine> _dtDialogLine;
|
private IDataTable<DRDialogLine> _dtDialogLine;
|
||||||
private DialogFormController _formController;
|
private DialogFormController _formController;
|
||||||
private DialogFormContext _formContext;
|
private DialogFormContext _formContext;
|
||||||
|
private int _pendingStartDialogId;
|
||||||
|
private int _activeChapterTitleRequestId;
|
||||||
|
private int _nextChapterTitleRequestId = 1;
|
||||||
|
private bool _chapterTitleShownAfterInit;
|
||||||
|
|
||||||
private int _currentChapterId;
|
private int _currentChapterId;
|
||||||
private int _currentLineIndex = -1;
|
private int _currentLineIndex = -1;
|
||||||
|
|
@ -46,6 +70,31 @@ namespace CustomComponent
|
||||||
|
|
||||||
public int CurrentLineId => _formContext != null ? _formContext.CurrentLineId : 0;
|
public int CurrentLineId => _formContext != null ? _formContext.CurrentLineId : 0;
|
||||||
|
|
||||||
|
public int GetSpeakerPortraitCount(string speakerId)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(speakerId))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
SpeakerPortraitBinding binding = FindSpeakerPortraitBinding(speakerId);
|
||||||
|
if (binding == null || binding.Portraits == null)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int validCount = 0;
|
||||||
|
for (int i = 0; i < binding.Portraits.Count; i++)
|
||||||
|
{
|
||||||
|
if (binding.Portraits[i] != null)
|
||||||
|
{
|
||||||
|
validCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return validCount;
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -54,6 +103,7 @@ namespace CustomComponent
|
||||||
GameEntry.Event.Subscribe(DialogNextLineRequestEventArgs.EventId, OnDialogNextLineRequest);
|
GameEntry.Event.Subscribe(DialogNextLineRequestEventArgs.EventId, OnDialogNextLineRequest);
|
||||||
GameEntry.Event.Subscribe(DialogSkipRequestEventArgs.EventId, OnDialogSkipRequest);
|
GameEntry.Event.Subscribe(DialogSkipRequestEventArgs.EventId, OnDialogSkipRequest);
|
||||||
GameEntry.Event.Subscribe(DialogStopRequestEventArgs.EventId, OnDialogStopRequest);
|
GameEntry.Event.Subscribe(DialogStopRequestEventArgs.EventId, OnDialogStopRequest);
|
||||||
|
GameEntry.Event.Subscribe(ChapterTitleCompletedEventArgs.EventId, OnChapterTitleCompleted);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDestroy()
|
private void OnDestroy()
|
||||||
|
|
@ -61,6 +111,7 @@ namespace CustomComponent
|
||||||
GameEntry.Event.Unsubscribe(DialogNextLineRequestEventArgs.EventId, OnDialogNextLineRequest);
|
GameEntry.Event.Unsubscribe(DialogNextLineRequestEventArgs.EventId, OnDialogNextLineRequest);
|
||||||
GameEntry.Event.Unsubscribe(DialogSkipRequestEventArgs.EventId, OnDialogSkipRequest);
|
GameEntry.Event.Unsubscribe(DialogSkipRequestEventArgs.EventId, OnDialogSkipRequest);
|
||||||
GameEntry.Event.Unsubscribe(DialogStopRequestEventArgs.EventId, OnDialogStopRequest);
|
GameEntry.Event.Unsubscribe(DialogStopRequestEventArgs.EventId, OnDialogStopRequest);
|
||||||
|
GameEntry.Event.Unsubscribe(ChapterTitleCompletedEventArgs.EventId, OnChapterTitleCompleted);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Init(int chapterId)
|
public bool Init(int chapterId)
|
||||||
|
|
@ -159,10 +210,14 @@ namespace CustomComponent
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PreloadChapterPortraitSprites();
|
||||||
EnsureFormController();
|
EnsureFormController();
|
||||||
_formContext = null;
|
_formContext = null;
|
||||||
_currentChapterId = chapterId;
|
_currentChapterId = chapterId;
|
||||||
_currentLineIndex = -1;
|
_currentLineIndex = -1;
|
||||||
|
_pendingStartDialogId = 0;
|
||||||
|
_activeChapterTitleRequestId = 0;
|
||||||
|
_chapterTitleShownAfterInit = false;
|
||||||
_isInitialized = true;
|
_isInitialized = true;
|
||||||
_isPlaying = false;
|
_isPlaying = false;
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -196,6 +251,24 @@ namespace CustomComponent
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_activeChapterTitleRequestId > 0)
|
||||||
|
{
|
||||||
|
_pendingStartDialogId = dialogId;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_chapterTitleShownAfterInit)
|
||||||
|
{
|
||||||
|
_chapterTitleShownAfterInit = true;
|
||||||
|
_pendingStartDialogId = dialogId;
|
||||||
|
if (TryOpenChapterTitle(dialogRow))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
_pendingStartDialogId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (_isPlaying)
|
if (_isPlaying)
|
||||||
{
|
{
|
||||||
StopDialog();
|
StopDialog();
|
||||||
|
|
@ -267,6 +340,21 @@ namespace CustomComponent
|
||||||
|
|
||||||
public void StopDialog()
|
public void StopDialog()
|
||||||
{
|
{
|
||||||
|
_pendingStartDialogId = 0;
|
||||||
|
|
||||||
|
if (_activeChapterTitleRequestId > 0)
|
||||||
|
{
|
||||||
|
_activeChapterTitleRequestId = 0;
|
||||||
|
if (GameEntry.UI != null)
|
||||||
|
{
|
||||||
|
UGuiForm chapterTitleForm = GameEntry.UI.GetUIForm(UIFormId.ChapterTitleForm);
|
||||||
|
if (chapterTitleForm != null)
|
||||||
|
{
|
||||||
|
GameEntry.UI.CloseUIForm(chapterTitleForm.UIForm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!_isPlaying)
|
if (!_isPlaying)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
|
|
@ -286,6 +374,9 @@ namespace CustomComponent
|
||||||
_formContext = null;
|
_formContext = null;
|
||||||
_currentChapterId = 0;
|
_currentChapterId = 0;
|
||||||
_currentLineIndex = -1;
|
_currentLineIndex = -1;
|
||||||
|
_pendingStartDialogId = 0;
|
||||||
|
_activeChapterTitleRequestId = 0;
|
||||||
|
_chapterTitleShownAfterInit = false;
|
||||||
_isInitialized = false;
|
_isInitialized = false;
|
||||||
_isPlaying = false;
|
_isPlaying = false;
|
||||||
}
|
}
|
||||||
|
|
@ -368,6 +459,138 @@ namespace CustomComponent
|
||||||
_formContext.IsLastLine = lineIndex >= totalLines - 1;
|
_formContext.IsLastLine = lineIndex >= totalLines - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void PreloadChapterPortraitSprites()
|
||||||
|
{
|
||||||
|
if (GameEntry.SpriteCache == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
HashSet<string> speakerIds = new HashSet<string>(System.StringComparer.OrdinalIgnoreCase);
|
||||||
|
foreach (KeyValuePair<int, List<DRDialogLine>> pair in _dialogLinesMap)
|
||||||
|
{
|
||||||
|
List<DRDialogLine> lines = pair.Value;
|
||||||
|
if (lines == null)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < lines.Count; i++)
|
||||||
|
{
|
||||||
|
DRDialogLine line = lines[i];
|
||||||
|
if (line == null || !IsHumanSpeakerId(line.SpeakerId))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
speakerIds.Add(line.SpeakerId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (speakerIds.Count == 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (string speakerId in speakerIds)
|
||||||
|
{
|
||||||
|
RegisterSpeakerPortraitsToCache(speakerId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RegisterSpeakerPortraitsToCache(string speakerId)
|
||||||
|
{
|
||||||
|
SpeakerPortraitBinding binding = FindSpeakerPortraitBinding(speakerId);
|
||||||
|
if (binding == null || binding.Portraits == null || binding.Portraits.Count == 0)
|
||||||
|
{
|
||||||
|
Log.Warning("Portrait preload skipped. Missing speaker portrait binding. speakerId='{0}'.", speakerId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int portraitIndex = 1;
|
||||||
|
for (int i = 0; i < binding.Portraits.Count; i++)
|
||||||
|
{
|
||||||
|
Sprite portrait = binding.Portraits[i];
|
||||||
|
if (portrait == null)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
string cacheKey = $"Characters/{speakerId}-{portraitIndex}.png";
|
||||||
|
GameEntry.SpriteCache.RegisterSprite(cacheKey, portrait, true);
|
||||||
|
portraitIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private SpeakerPortraitBinding FindSpeakerPortraitBinding(string speakerId)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(speakerId) || _speakerPortraitBindings == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < _speakerPortraitBindings.Count; i++)
|
||||||
|
{
|
||||||
|
SpeakerPortraitBinding binding = _speakerPortraitBindings[i];
|
||||||
|
if (binding == null || string.IsNullOrWhiteSpace(binding.SpeakerId))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.Equals(binding.SpeakerId.Trim(), speakerId.Trim(), StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
return binding;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool IsHumanSpeakerId(string speakerId)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(speakerId))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return !NonPortraitSpeakerIds.Contains(speakerId);
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool TryOpenChapterTitle(DRDialog dialogRow)
|
||||||
|
{
|
||||||
|
if (GameEntry.UI == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int requestId = _nextChapterTitleRequestId++;
|
||||||
|
string subtitle = dialogRow == null || string.IsNullOrWhiteSpace(dialogRow.Title)
|
||||||
|
? string.Empty
|
||||||
|
: dialogRow.Title.Trim();
|
||||||
|
ChapterTitleFormContext context = new ChapterTitleFormContext
|
||||||
|
{
|
||||||
|
ChapterId = _currentChapterId,
|
||||||
|
RequestId = requestId,
|
||||||
|
Title = BuildChapterTitle(_currentChapterId),
|
||||||
|
Subtitle = subtitle
|
||||||
|
};
|
||||||
|
|
||||||
|
int? formSerialId = GameEntry.UI.OpenUIForm(UIFormId.ChapterTitleForm, context);
|
||||||
|
if (!formSerialId.HasValue)
|
||||||
|
{
|
||||||
|
Log.Warning("Open chapter title form failed. chapterId='{0}'.", _currentChapterId.ToString());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
_activeChapterTitleRequestId = requestId;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string BuildChapterTitle(int chapterId)
|
||||||
|
{
|
||||||
|
return chapterId > 0 ? $"第{chapterId}章" : string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
private static int ParseChapterIdFromDialogId(int dialogId)
|
private static int ParseChapterIdFromDialogId(int dialogId)
|
||||||
{
|
{
|
||||||
return dialogId / DialogChapterDivisor;
|
return dialogId / DialogChapterDivisor;
|
||||||
|
|
@ -415,6 +638,29 @@ namespace CustomComponent
|
||||||
StopDialog();
|
StopDialog();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnChapterTitleCompleted(object sender, GameEventArgs e)
|
||||||
|
{
|
||||||
|
if (!(e is ChapterTitleCompletedEventArgs args))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args.RequestId <= 0 || args.RequestId != _activeChapterTitleRequestId)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_activeChapterTitleRequestId = 0;
|
||||||
|
int pendingDialogId = _pendingStartDialogId;
|
||||||
|
_pendingStartDialogId = 0;
|
||||||
|
if (pendingDialogId <= 0 || !_isInitialized)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
StartDialog(pendingDialogId);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,23 +14,119 @@ namespace CustomComponent
|
||||||
[SerializeField] private Vector2 _defaultPivot = new(0.5f, 0.5f);
|
[SerializeField] private Vector2 _defaultPivot = new(0.5f, 0.5f);
|
||||||
|
|
||||||
private Dictionary<string, Sprite> _spriteCache;
|
private Dictionary<string, Sprite> _spriteCache;
|
||||||
|
private Dictionary<string, List<Action<Sprite>>> _pendingCallbacks;
|
||||||
|
private HashSet<string> _loadingSpriteAssets;
|
||||||
private ResourceComponent _resource;
|
private ResourceComponent _resource;
|
||||||
|
|
||||||
void Start()
|
void Start()
|
||||||
{
|
{
|
||||||
_spriteCache = new Dictionary<string, Sprite>();
|
EnsureRuntimeCaches();
|
||||||
_resource = GameEntry.Resource;
|
}
|
||||||
|
|
||||||
|
private void EnsureRuntimeCaches()
|
||||||
|
{
|
||||||
|
_spriteCache ??= new Dictionary<string, Sprite>();
|
||||||
|
_pendingCallbacks ??= new Dictionary<string, List<Action<Sprite>>>();
|
||||||
|
_loadingSpriteAssets ??= new HashSet<string>();
|
||||||
|
_resource ??= GameEntry.Resource;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool TryGetCachedSprite(string assetName, out Sprite sprite)
|
||||||
|
{
|
||||||
|
EnsureRuntimeCaches();
|
||||||
|
if (string.IsNullOrWhiteSpace(assetName))
|
||||||
|
{
|
||||||
|
sprite = null;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return _spriteCache.TryGetValue(assetName, out sprite);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void GetSprite(string assetName, Action<Sprite> callback)
|
public void GetSprite(string assetName, Action<Sprite> callback)
|
||||||
{
|
{
|
||||||
|
EnsureRuntimeCaches();
|
||||||
|
if (string.IsNullOrWhiteSpace(assetName))
|
||||||
|
{
|
||||||
|
callback?.Invoke(null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (_spriteCache.TryGetValue(assetName, out var sprite))
|
if (_spriteCache.TryGetValue(assetName, out var sprite))
|
||||||
{
|
{
|
||||||
callback?.Invoke(sprite);
|
callback?.Invoke(sprite);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if (callback != null)
|
||||||
{
|
{
|
||||||
|
AddPendingCallback(assetName, callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_loadingSpriteAssets.Contains(assetName))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_loadingSpriteAssets.Add(assetName);
|
||||||
|
StartLoadSprite(assetName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void PreloadSprite(string assetName)
|
||||||
|
{
|
||||||
|
EnsureRuntimeCaches();
|
||||||
|
if (string.IsNullOrWhiteSpace(assetName) || _spriteCache.ContainsKey(assetName) ||
|
||||||
|
_loadingSpriteAssets.Contains(assetName))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_loadingSpriteAssets.Add(assetName);
|
||||||
|
StartLoadSprite(assetName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void PreloadSprites(IEnumerable<string> assetNames)
|
||||||
|
{
|
||||||
|
EnsureRuntimeCaches();
|
||||||
|
if (assetNames == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (string assetName in assetNames)
|
||||||
|
{
|
||||||
|
PreloadSprite(assetName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RegisterSprite(string assetName, Sprite sprite, bool overwrite = true)
|
||||||
|
{
|
||||||
|
EnsureRuntimeCaches();
|
||||||
|
if (string.IsNullOrWhiteSpace(assetName) || sprite == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!overwrite && _spriteCache.ContainsKey(assetName))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_spriteCache[assetName] = sprite;
|
||||||
|
InvokeAndClearPendingCallbacks(assetName, sprite);
|
||||||
|
_loadingSpriteAssets.Remove(assetName);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void StartLoadSprite(string assetName)
|
||||||
|
{
|
||||||
|
EnsureRuntimeCaches();
|
||||||
|
if (_resource == null)
|
||||||
|
{
|
||||||
|
InvokeAndClearPendingCallbacks(assetName, null);
|
||||||
|
_loadingSpriteAssets.Remove(assetName);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_resource.LoadAsset
|
_resource.LoadAsset
|
||||||
(
|
(
|
||||||
AssetUtility.GetUISpriteAsset(assetName),
|
AssetUtility.GetUISpriteAsset(assetName),
|
||||||
|
|
@ -38,18 +134,25 @@ namespace CustomComponent
|
||||||
new LoadAssetCallbacks(
|
new LoadAssetCallbacks(
|
||||||
(resourcePath, asset, duration, userData) =>
|
(resourcePath, asset, duration, userData) =>
|
||||||
{
|
{
|
||||||
Log.Debug(resourcePath);
|
|
||||||
Texture2D texture = asset as Texture2D;
|
Texture2D texture = asset as Texture2D;
|
||||||
|
Sprite loadedSprite = null;
|
||||||
if (texture != null)
|
if (texture != null)
|
||||||
{
|
{
|
||||||
Sprite newSprite = Sprite.Create(
|
loadedSprite = Sprite.Create(
|
||||||
texture,
|
texture,
|
||||||
new Rect(0, 0, texture.width, texture.height),
|
new Rect(0, 0, texture.width, texture.height),
|
||||||
_defaultPivot,
|
_defaultPivot,
|
||||||
_pixelsPerUnit);
|
_pixelsPerUnit);
|
||||||
_spriteCache.Add(assetName, newSprite);
|
_spriteCache[assetName] = loadedSprite;
|
||||||
callback?.Invoke(newSprite);
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Log.Warning("Load sprite succeeded but asset is not Texture2D. AssetName='{0}', Path='{1}'.",
|
||||||
|
assetName, resourcePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
InvokeAndClearPendingCallbacks(assetName, loadedSprite);
|
||||||
|
_loadingSpriteAssets.Remove(assetName);
|
||||||
},
|
},
|
||||||
(resourcePath, status, errorMessage, userData) =>
|
(resourcePath, status, errorMessage, userData) =>
|
||||||
{
|
{
|
||||||
|
|
@ -57,15 +160,45 @@ namespace CustomComponent
|
||||||
assetName,
|
assetName,
|
||||||
resourcePath,
|
resourcePath,
|
||||||
errorMessage);
|
errorMessage);
|
||||||
|
InvokeAndClearPendingCallbacks(assetName, null);
|
||||||
|
_loadingSpriteAssets.Remove(assetName);
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void AddPendingCallback(string assetName, Action<Sprite> callback)
|
||||||
|
{
|
||||||
|
EnsureRuntimeCaches();
|
||||||
|
if (!_pendingCallbacks.TryGetValue(assetName, out List<Action<Sprite>> callbackList))
|
||||||
|
{
|
||||||
|
callbackList = new List<Action<Sprite>>();
|
||||||
|
_pendingCallbacks.Add(assetName, callbackList);
|
||||||
|
}
|
||||||
|
|
||||||
|
callbackList.Add(callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void InvokeAndClearPendingCallbacks(string assetName, Sprite sprite)
|
||||||
|
{
|
||||||
|
EnsureRuntimeCaches();
|
||||||
|
if (!_pendingCallbacks.TryGetValue(assetName, out List<Action<Sprite>> callbackList))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_pendingCallbacks.Remove(assetName);
|
||||||
|
for (int i = 0; i < callbackList.Count; i++)
|
||||||
|
{
|
||||||
|
callbackList[i]?.Invoke(sprite);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDestroy()
|
private void OnDestroy()
|
||||||
{
|
{
|
||||||
_spriteCache.Clear();
|
_spriteCache?.Clear();
|
||||||
|
_pendingCallbacks?.Clear();
|
||||||
|
_loadingSpriteAssets?.Clear();
|
||||||
_resource = null;
|
_resource = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,5 +9,7 @@ namespace Definition.Enum
|
||||||
None,
|
None,
|
||||||
Shake,
|
Shake,
|
||||||
Blink,
|
Blink,
|
||||||
|
EntityCue,
|
||||||
|
EntityCueClose,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,14 +0,0 @@
|
||||||
using System.Collections;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using UnityEngine;
|
|
||||||
|
|
||||||
namespace Definition.Enum
|
|
||||||
{
|
|
||||||
public enum ExpressionType
|
|
||||||
{
|
|
||||||
None,
|
|
||||||
Normal,
|
|
||||||
Shock,
|
|
||||||
Angry,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -59,5 +59,9 @@ namespace UI
|
||||||
MainOverlayForm = 107,
|
MainOverlayForm = 107,
|
||||||
|
|
||||||
AIChatForm = 108,
|
AIChatForm = 108,
|
||||||
|
|
||||||
|
ChapterTitleForm = 109,
|
||||||
|
|
||||||
|
AIChatEntryForm = 110,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
fileFormatVersion: 2
|
|
||||||
guid: f7c4b051e63f0c2418a55e8817bf4ba9
|
|
||||||
folderAsset: yes
|
|
||||||
timeCreated: 1528026151
|
|
||||||
licenseType: Pro
|
|
||||||
DefaultImporter:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
fileFormatVersion: 2
|
|
||||||
guid: 58efe0589d7e90f498c8bcbbf94c6be4
|
|
||||||
folderAsset: yes
|
|
||||||
timeCreated: 1528026151
|
|
||||||
licenseType: Pro
|
|
||||||
DefaultImporter:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
|
@ -1,62 +0,0 @@
|
||||||
//------------------------------------------------------------
|
|
||||||
// Game Framework
|
|
||||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
|
||||||
// Homepage: https://gameframework.cn/
|
|
||||||
// Feedback: mailto:ellan@gameframework.cn
|
|
||||||
//------------------------------------------------------------
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using UnityEngine;
|
|
||||||
|
|
||||||
namespace Entity.EntityData
|
|
||||||
{
|
|
||||||
[Serializable]
|
|
||||||
public abstract class EntityDataBase
|
|
||||||
{
|
|
||||||
[SerializeField]
|
|
||||||
private int m_Id = 0;
|
|
||||||
|
|
||||||
[SerializeField]
|
|
||||||
private int m_TypeId = 0;
|
|
||||||
|
|
||||||
[SerializeField]
|
|
||||||
private Vector3 m_Position = Vector3.zero;
|
|
||||||
|
|
||||||
[SerializeField]
|
|
||||||
private Quaternion m_Rotation = Quaternion.identity;
|
|
||||||
|
|
||||||
public EntityDataBase(int entityId, int typeId)
|
|
||||||
{
|
|
||||||
m_Id = entityId;
|
|
||||||
m_TypeId = typeId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 实体编号。
|
|
||||||
/// </summary>
|
|
||||||
public int Id => m_Id;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 实体类型编号。
|
|
||||||
/// </summary>
|
|
||||||
public int TypeId => m_TypeId;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 实体位置。
|
|
||||||
/// </summary>
|
|
||||||
public Vector3 Position
|
|
||||||
{
|
|
||||||
get => m_Position;
|
|
||||||
set => m_Position = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 实体朝向。
|
|
||||||
/// </summary>
|
|
||||||
public Quaternion Rotation
|
|
||||||
{
|
|
||||||
get => m_Rotation;
|
|
||||||
set => m_Rotation = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
fileFormatVersion: 2
|
|
||||||
guid: afb91fe3ed8105e4a96b7bd5917ecc2b
|
|
||||||
timeCreated: 1528026152
|
|
||||||
licenseType: Pro
|
|
||||||
MonoImporter:
|
|
||||||
serializedVersion: 2
|
|
||||||
defaultReferences: []
|
|
||||||
executionOrder: 0
|
|
||||||
icon: {instanceID: 0}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
|
@ -1,70 +0,0 @@
|
||||||
//------------------------------------------------------------
|
|
||||||
// Game Framework
|
|
||||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
|
||||||
// Homepage: https://gameframework.cn/
|
|
||||||
// Feedback: mailto:ellan@gameframework.cn
|
|
||||||
//------------------------------------------------------------
|
|
||||||
|
|
||||||
using GameFramework.DataTable;
|
|
||||||
using System;
|
|
||||||
using CustomUtility;
|
|
||||||
using DataTable;
|
|
||||||
using Entity;
|
|
||||||
using Entity.EntityData;
|
|
||||||
using UnityGameFramework.Runtime;
|
|
||||||
|
|
||||||
namespace StarForce
|
|
||||||
{
|
|
||||||
public static class EntityExtension
|
|
||||||
{
|
|
||||||
private static int s_SerialId = 0;
|
|
||||||
|
|
||||||
public static EntityBase GetGameEntity(this EntityComponent entityComponent, int entityId)
|
|
||||||
{
|
|
||||||
UnityGameFramework.Runtime.Entity entity = entityComponent.GetEntity(entityId);
|
|
||||||
if (entity == null)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (EntityBase)entity.Logic;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void HideEntity(this EntityComponent entityComponent, EntityBase entity)
|
|
||||||
{
|
|
||||||
entityComponent.HideEntity(entity.Entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void AttachEntity(this EntityComponent entityComponent, EntityBase entityBase, int ownerId,
|
|
||||||
string parentTransformPath = null, object userData = null)
|
|
||||||
{
|
|
||||||
entityComponent.AttachEntity(entityBase.Entity, ownerId, parentTransformPath, userData);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void ShowEntity(this EntityComponent entityComponent, Type logicType, string entityGroup,
|
|
||||||
int priority, EntityDataBase data)
|
|
||||||
{
|
|
||||||
if (data == null)
|
|
||||||
{
|
|
||||||
Log.Warning("Data is invalid.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
IDataTable<DREntity> dtEntity = GameEntry.DataTable.GetDataTable<DREntity>();
|
|
||||||
DREntity drEntity = dtEntity.GetDataRow(data.TypeId);
|
|
||||||
if (drEntity == null)
|
|
||||||
{
|
|
||||||
Log.Warning("Can not load entity id '{0}' from data table.", data.TypeId.ToString());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
entityComponent.ShowEntity(data.Id, logicType, AssetUtility.GetEntityAsset(drEntity.AssetName), entityGroup,
|
|
||||||
priority, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int GenerateSerialId(this EntityComponent entityComponent)
|
|
||||||
{
|
|
||||||
return --s_SerialId;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
fileFormatVersion: 2
|
|
||||||
guid: 626632079980ad34595c3b43a062a664
|
|
||||||
timeCreated: 1528026153
|
|
||||||
licenseType: Pro
|
|
||||||
MonoImporter:
|
|
||||||
serializedVersion: 2
|
|
||||||
defaultReferences: []
|
|
||||||
executionOrder: 0
|
|
||||||
icon: {instanceID: 0}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
fileFormatVersion: 2
|
|
||||||
guid: 74fbdf043ed3bc141a0a0b09756bc7d2
|
|
||||||
folderAsset: yes
|
|
||||||
timeCreated: 1528026153
|
|
||||||
licenseType: Pro
|
|
||||||
DefaultImporter:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
|
@ -1,122 +0,0 @@
|
||||||
//------------------------------------------------------------
|
|
||||||
// Game Framework
|
|
||||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
|
||||||
// Homepage: https://gameframework.cn/
|
|
||||||
// Feedback: mailto:ellan@gameframework.cn
|
|
||||||
//------------------------------------------------------------
|
|
||||||
|
|
||||||
using Entity.EntityData;
|
|
||||||
using GameFramework;
|
|
||||||
using StarForce;
|
|
||||||
using UnityEngine;
|
|
||||||
using UnityGameFramework.Runtime;
|
|
||||||
|
|
||||||
namespace Entity
|
|
||||||
{
|
|
||||||
public abstract class EntityBase : EntityLogic
|
|
||||||
{
|
|
||||||
[SerializeField] private EntityDataBase _entityData = null;
|
|
||||||
|
|
||||||
public int Id => Entity.Id;
|
|
||||||
|
|
||||||
public Animation CachedAnimation
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
private set;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if UNITY_2017_3_OR_NEWER
|
|
||||||
protected override void OnInit(object userData)
|
|
||||||
#else
|
|
||||||
protected internal override void OnInit(object userData)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
base.OnInit(userData);
|
|
||||||
CachedAnimation = GetComponent<Animation>();
|
|
||||||
}
|
|
||||||
|
|
||||||
#if UNITY_2017_3_OR_NEWER
|
|
||||||
protected override void OnRecycle()
|
|
||||||
#else
|
|
||||||
protected internal override void OnRecycle()
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
base.OnRecycle();
|
|
||||||
}
|
|
||||||
|
|
||||||
#if UNITY_2017_3_OR_NEWER
|
|
||||||
protected override void OnShow(object userData)
|
|
||||||
#else
|
|
||||||
protected internal override void OnShow(object userData)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
base.OnShow(userData);
|
|
||||||
|
|
||||||
_entityData = userData as EntityDataBase;
|
|
||||||
if (_entityData == null)
|
|
||||||
{
|
|
||||||
Log.Error("Entity data is invalid.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Name = Utility.Text.Format("[Entity {0}]", Id);
|
|
||||||
CachedTransform.localPosition = _entityData.Position;
|
|
||||||
CachedTransform.localRotation = _entityData.Rotation;
|
|
||||||
CachedTransform.localScale = Vector3.one;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if UNITY_2017_3_OR_NEWER
|
|
||||||
protected override void OnHide(bool isShutdown, object userData)
|
|
||||||
#else
|
|
||||||
protected internal override void OnHide(bool isShutdown, object userData)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
base.OnHide(isShutdown, userData);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if UNITY_2017_3_OR_NEWER
|
|
||||||
protected override void OnAttached(EntityLogic childEntity, Transform parentTransform, object userData)
|
|
||||||
#else
|
|
||||||
protected internal override void OnAttached(EntityLogic childEntity, Transform parentTransform, object userData)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
base.OnAttached(childEntity, parentTransform, userData);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if UNITY_2017_3_OR_NEWER
|
|
||||||
protected override void OnDetached(EntityLogic childEntity, object userData)
|
|
||||||
#else
|
|
||||||
protected internal override void OnDetached(EntityLogic childEntity, object userData)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
base.OnDetached(childEntity, userData);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if UNITY_2017_3_OR_NEWER
|
|
||||||
protected override void OnAttachTo(EntityLogic parentEntity, Transform parentTransform, object userData)
|
|
||||||
#else
|
|
||||||
protected internal override void OnAttachTo(EntityLogic parentEntity, Transform parentTransform, object userData)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
base.OnAttachTo(parentEntity, parentTransform, userData);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if UNITY_2017_3_OR_NEWER
|
|
||||||
protected override void OnDetachFrom(EntityLogic parentEntity, object userData)
|
|
||||||
#else
|
|
||||||
protected internal override void OnDetachFrom(EntityLogic parentEntity, object userData)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
base.OnDetachFrom(parentEntity, userData);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if UNITY_2017_3_OR_NEWER
|
|
||||||
protected override void OnUpdate(float elapseSeconds, float realElapseSeconds)
|
|
||||||
#else
|
|
||||||
protected internal override void OnUpdate(float elapseSeconds, float realElapseSeconds)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
base.OnUpdate(elapseSeconds, realElapseSeconds);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
fileFormatVersion: 2
|
|
||||||
guid: 878fbbe82b4bde944812bcb7c964cff8
|
|
||||||
timeCreated: 1528026154
|
|
||||||
licenseType: Pro
|
|
||||||
MonoImporter:
|
|
||||||
serializedVersion: 2
|
|
||||||
defaultReferences: []
|
|
||||||
executionOrder: 0
|
|
||||||
icon: {instanceID: 0}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
using GameFramework;
|
||||||
|
using GameFramework.Event;
|
||||||
|
|
||||||
|
namespace Event
|
||||||
|
{
|
||||||
|
public class ChapterTitleCompletedEventArgs : GameEventArgs
|
||||||
|
{
|
||||||
|
public static readonly int EventId = typeof(ChapterTitleCompletedEventArgs).GetHashCode();
|
||||||
|
|
||||||
|
public override int Id => EventId;
|
||||||
|
|
||||||
|
public int ChapterId { get; private set; }
|
||||||
|
public int RequestId { get; private set; }
|
||||||
|
|
||||||
|
public ChapterTitleCompletedEventArgs()
|
||||||
|
{
|
||||||
|
ChapterId = 0;
|
||||||
|
RequestId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ChapterTitleCompletedEventArgs Create(int chapterId, int requestId)
|
||||||
|
{
|
||||||
|
ChapterTitleCompletedEventArgs args = ReferencePool.Acquire<ChapterTitleCompletedEventArgs>();
|
||||||
|
args.ChapterId = chapterId;
|
||||||
|
args.RequestId = requestId;
|
||||||
|
return args;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Clear()
|
||||||
|
{
|
||||||
|
ChapterId = 0;
|
||||||
|
RequestId = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: 729ec3f897dd27948a735906cd0c185a
|
guid: 2de1f87831fa4a81ad93a2f5277cfaa2
|
||||||
MonoImporter:
|
MonoImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
|
|
@ -23,7 +23,6 @@ namespace Procedure
|
||||||
{
|
{
|
||||||
public static readonly string[] DataTableNames = new string[]
|
public static readonly string[] DataTableNames = new string[]
|
||||||
{
|
{
|
||||||
"Entity",
|
|
||||||
"BGM",
|
"BGM",
|
||||||
"Scene",
|
"Scene",
|
||||||
"UIForm",
|
"UIForm",
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ namespace Procedure
|
||||||
protected override void OnEnter(ProcedureOwner procedureOwner)
|
protected override void OnEnter(ProcedureOwner procedureOwner)
|
||||||
{
|
{
|
||||||
base.OnEnter(procedureOwner);
|
base.OnEnter(procedureOwner);
|
||||||
|
AIChatEntryRuntime.EnsureOpen();
|
||||||
|
|
||||||
GameEntry.Dialog.Init(1);
|
GameEntry.Dialog.Init(1);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||||
using GameFramework.Fsm;
|
using GameFramework.Fsm;
|
||||||
using GameFramework.Procedure;
|
using GameFramework.Procedure;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using UI;
|
||||||
|
|
||||||
namespace Procedure
|
namespace Procedure
|
||||||
{
|
{
|
||||||
|
|
@ -13,6 +14,7 @@ namespace Procedure
|
||||||
protected override void OnEnter(IFsm<IProcedureManager> procedureOwner)
|
protected override void OnEnter(IFsm<IProcedureManager> procedureOwner)
|
||||||
{
|
{
|
||||||
base.OnEnter(procedureOwner);
|
base.OnEnter(procedureOwner);
|
||||||
|
AIChatEntryRuntime.EnsureOpen();
|
||||||
|
|
||||||
GameEntry.Dialog.Init(1);
|
GameEntry.Dialog.Init(1);
|
||||||
GameEntry.Dialog.StartDialog(1001);
|
GameEntry.Dialog.StartDialog(1001);
|
||||||
|
|
|
||||||
|
|
@ -61,6 +61,7 @@ namespace Procedure
|
||||||
protected override void OnEnter(IFsm<IProcedureManager> procedureOwner)
|
protected override void OnEnter(IFsm<IProcedureManager> procedureOwner)
|
||||||
{
|
{
|
||||||
base.OnEnter(procedureOwner);
|
base.OnEnter(procedureOwner);
|
||||||
|
AIChatEntryRuntime.EnsureOpen();
|
||||||
|
|
||||||
var e = GameEntry.Event;
|
var e = GameEntry.Event;
|
||||||
e.Subscribe(MenuStartEventArgs.EventId, MenuStart);
|
e.Subscribe(MenuStartEventArgs.EventId, MenuStart);
|
||||||
|
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
fileFormatVersion: 2
|
|
||||||
guid: 2ff69ece58f4d3f4e8cf9a40f813e745
|
|
||||||
folderAsset: yes
|
|
||||||
timeCreated: 1528026159
|
|
||||||
licenseType: Pro
|
|
||||||
DefaultImporter:
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
||||||
//------------------------------------------------------------
|
|
||||||
// Game Framework
|
|
||||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
|
||||||
// Homepage: https://gameframework.cn/
|
|
||||||
// Feedback: mailto:ellan@gameframework.cn
|
|
||||||
//------------------------------------------------------------
|
|
||||||
|
|
||||||
using Entity;
|
|
||||||
using UnityEngine;
|
|
||||||
using UnityGameFramework.Runtime;
|
|
||||||
|
|
||||||
namespace StarForce
|
|
||||||
{
|
|
||||||
public class HideByBoundary : MonoBehaviour
|
|
||||||
{
|
|
||||||
private void OnTriggerExit(Collider other)
|
|
||||||
{
|
|
||||||
GameObject go = other.gameObject;
|
|
||||||
EntityBase entity = go.GetComponent<EntityBase>();
|
|
||||||
if (entity == null)
|
|
||||||
{
|
|
||||||
Log.Warning("Unknown GameObject '{0}', you must use entity only.", go.name);
|
|
||||||
Destroy(go);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
GameEntry.Entity.HideEntity(entity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
fileFormatVersion: 2
|
|
||||||
guid: 649621152579e224a955822793b63aca
|
|
||||||
timeCreated: 1528026159
|
|
||||||
licenseType: Pro
|
|
||||||
MonoImporter:
|
|
||||||
serializedVersion: 2
|
|
||||||
defaultReferences: []
|
|
||||||
executionOrder: 0
|
|
||||||
icon: {instanceID: 0}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
using CustomUtility;
|
using CustomUtility;
|
||||||
using DataTable;
|
using DataTable;
|
||||||
using Definition;
|
using Definition;
|
||||||
using Entity;
|
|
||||||
using GameFramework.DataTable;
|
using GameFramework.DataTable;
|
||||||
using GameFramework.Sound;
|
using GameFramework.Sound;
|
||||||
using UnityGameFramework.Runtime;
|
using UnityGameFramework.Runtime;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
namespace UI
|
||||||
|
{
|
||||||
|
public static class AIChatEntryRuntime
|
||||||
|
{
|
||||||
|
private static AIChatEntryFormController s_entryController;
|
||||||
|
private static AIChatEntryFormContext s_entryContext;
|
||||||
|
|
||||||
|
public static void EnsureOpen()
|
||||||
|
{
|
||||||
|
if (GameEntry.UI == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (s_entryController == null)
|
||||||
|
{
|
||||||
|
s_entryController = new AIChatEntryFormController();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (s_entryContext == null)
|
||||||
|
{
|
||||||
|
s_entryContext = new AIChatEntryFormContext();
|
||||||
|
}
|
||||||
|
|
||||||
|
s_entryController.OpenUI(s_entryContext);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: f754cc5f339dcfa4aaec3aa32260c4b8
|
guid: 8f5f8c4efc7e47a8b0354c7f89fef0b9
|
||||||
MonoImporter:
|
MonoImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
namespace UI
|
||||||
|
{
|
||||||
|
public sealed class AIChatEntryFormContext : UIContext
|
||||||
|
{
|
||||||
|
public AIChatEntryFormController Controller;
|
||||||
|
public bool IsChatOpened;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: 9baf591df06b9bb44ba5313457ba84b3
|
guid: 0b5fd3ce4a3e4e7a8ed2ab9f9472e0a1
|
||||||
MonoImporter:
|
MonoImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
namespace UI
|
||||||
|
{
|
||||||
|
public class ChapterTitleFormContext : UIContext
|
||||||
|
{
|
||||||
|
public int ChapterId = 0;
|
||||||
|
public int RequestId = 0;
|
||||||
|
public string Title = string.Empty;
|
||||||
|
public string Subtitle = string.Empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: 174e046d822a14d49843dc415067f13c
|
guid: d2f2414b0ec34d2cb7a64c46c18cb48c
|
||||||
MonoImporter:
|
MonoImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
|
|
@ -0,0 +1,188 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using GameFramework.Event;
|
||||||
|
using UnityGameFramework.Runtime;
|
||||||
|
|
||||||
|
namespace UI
|
||||||
|
{
|
||||||
|
public sealed class AIChatEntryFormController : IFormController<AIChatEntryFormContext>
|
||||||
|
{
|
||||||
|
private AIChatEntryFormContext _entryContext;
|
||||||
|
private AIChatEntryForm _entryForm;
|
||||||
|
private int? _entryFormSerialId;
|
||||||
|
private bool _pendingEntryRefresh;
|
||||||
|
|
||||||
|
private AIChatFormController _chatFormController;
|
||||||
|
private AIChatFormContext _chatContext;
|
||||||
|
|
||||||
|
public AIChatEntryFormController()
|
||||||
|
{
|
||||||
|
GameEntry.Event.Subscribe(OpenUIFormSuccessEventArgs.EventId, OnOpenUIFormSuccess);
|
||||||
|
GameEntry.Event.Subscribe(CloseUIFormCompleteEventArgs.EventId, OnCloseUIFormComplete);
|
||||||
|
}
|
||||||
|
|
||||||
|
~AIChatEntryFormController()
|
||||||
|
{
|
||||||
|
GameEntry.Event.Unsubscribe(OpenUIFormSuccessEventArgs.EventId, OnOpenUIFormSuccess);
|
||||||
|
GameEntry.Event.Unsubscribe(CloseUIFormCompleteEventArgs.EventId, OnCloseUIFormComplete);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int? OpenUI(AIChatEntryFormContext context)
|
||||||
|
{
|
||||||
|
if (context == null)
|
||||||
|
{
|
||||||
|
Log.Warning("AIChatEntryFormController open failed. context is null.");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
context.Controller = this;
|
||||||
|
_entryContext = context;
|
||||||
|
SyncEntryContextState();
|
||||||
|
|
||||||
|
if (_entryForm != null)
|
||||||
|
{
|
||||||
|
_entryForm.RefreshUI(_entryContext);
|
||||||
|
return _entryFormSerialId;
|
||||||
|
}
|
||||||
|
|
||||||
|
UGuiForm openedForm = GameEntry.UI.GetUIForm(UIFormId.AIChatEntryForm);
|
||||||
|
if (openedForm is AIChatEntryForm existingForm)
|
||||||
|
{
|
||||||
|
_entryForm = existingForm;
|
||||||
|
_entryFormSerialId = existingForm.UIForm.SerialId;
|
||||||
|
_entryForm.RefreshUI(_entryContext);
|
||||||
|
return _entryFormSerialId;
|
||||||
|
}
|
||||||
|
|
||||||
|
_pendingEntryRefresh = true;
|
||||||
|
_entryFormSerialId = GameEntry.UI.OpenUIForm(UIFormId.AIChatEntryForm, _entryContext);
|
||||||
|
return _entryFormSerialId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CloseUI()
|
||||||
|
{
|
||||||
|
_pendingEntryRefresh = false;
|
||||||
|
|
||||||
|
if (_entryFormSerialId.HasValue)
|
||||||
|
{
|
||||||
|
GameEntry.UI.CloseUIForm(_entryFormSerialId.Value);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_entryForm != null)
|
||||||
|
{
|
||||||
|
_entryForm.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ToggleAIChatForm()
|
||||||
|
{
|
||||||
|
UGuiForm openedChatForm = GameEntry.UI.GetUIForm(UIFormId.AIChatForm);
|
||||||
|
if (openedChatForm != null)
|
||||||
|
{
|
||||||
|
if (_chatFormController != null)
|
||||||
|
{
|
||||||
|
_chatFormController.CloseUI();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GameEntry.UI.CloseUIForm(openedChatForm.UIForm);
|
||||||
|
}
|
||||||
|
|
||||||
|
RefreshEntryState();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
EnsureChatContext();
|
||||||
|
_chatContext.Controller = _chatFormController;
|
||||||
|
_chatFormController.OpenUI(_chatContext);
|
||||||
|
RefreshEntryState();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void EnsureChatContext()
|
||||||
|
{
|
||||||
|
if (_chatFormController == null)
|
||||||
|
{
|
||||||
|
_chatFormController = new AIChatFormController();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_chatContext == null)
|
||||||
|
{
|
||||||
|
_chatContext = new AIChatFormContext
|
||||||
|
{
|
||||||
|
ClearHistoryOnOpen = false,
|
||||||
|
LanguageMode = 0,
|
||||||
|
Messages = new List<AIChatMessageContext>()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
_chatContext.Controller = _chatFormController;
|
||||||
|
_chatContext.Messages ??= new List<AIChatMessageContext>();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SyncEntryContextState()
|
||||||
|
{
|
||||||
|
if (_entryContext == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_entryContext.IsChatOpened = GameEntry.UI.GetUIForm(UIFormId.AIChatForm) != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RefreshEntryState()
|
||||||
|
{
|
||||||
|
SyncEntryContextState();
|
||||||
|
|
||||||
|
if (_entryForm == null || _entryContext == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_entryForm.SetChatOpened(_entryContext.IsChatOpened);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnOpenUIFormSuccess(object sender, GameEventArgs e)
|
||||||
|
{
|
||||||
|
if (!(e is OpenUIFormSuccessEventArgs args))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_entryFormSerialId.HasValue &&
|
||||||
|
args.UIForm != null &&
|
||||||
|
args.UIForm.SerialId == _entryFormSerialId.Value &&
|
||||||
|
args.UserData == _entryContext)
|
||||||
|
{
|
||||||
|
_entryForm = args.UIForm.Logic as AIChatEntryForm;
|
||||||
|
if (_entryForm == null)
|
||||||
|
{
|
||||||
|
Log.Warning("AIChatEntryFormController open success but form logic is invalid.");
|
||||||
|
}
|
||||||
|
else if (_pendingEntryRefresh)
|
||||||
|
{
|
||||||
|
_entryForm.RefreshUI(_entryContext);
|
||||||
|
_pendingEntryRefresh = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RefreshEntryState();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnCloseUIFormComplete(object sender, GameEventArgs e)
|
||||||
|
{
|
||||||
|
if (!(e is CloseUIFormCompleteEventArgs args))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args.SerialId == _entryFormSerialId)
|
||||||
|
{
|
||||||
|
_entryForm = null;
|
||||||
|
_entryFormSerialId = null;
|
||||||
|
_pendingEntryRefresh = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
RefreshEntryState();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 2f9ad5dc60834e1cb1aa5d0f04d2756c
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
|
@ -17,6 +17,7 @@ namespace UI
|
||||||
private static TMP_FontAsset _mainTMPFont = null;
|
private static TMP_FontAsset _mainTMPFont = null;
|
||||||
private Canvas _cachedCanvas = null;
|
private Canvas _cachedCanvas = null;
|
||||||
private CanvasGroup _canvasGroup = null;
|
private CanvasGroup _canvasGroup = null;
|
||||||
|
private Coroutine _canvasFadeCoroutine = null;
|
||||||
private List<Canvas> _cachedCanvasContainer = new List<Canvas>();
|
private List<Canvas> _cachedCanvasContainer = new List<Canvas>();
|
||||||
|
|
||||||
public int OriginalDepth { get; private set; }
|
public int OriginalDepth { get; private set; }
|
||||||
|
|
@ -30,7 +31,7 @@ namespace UI
|
||||||
|
|
||||||
public void Close(bool ignoreFade)
|
public void Close(bool ignoreFade)
|
||||||
{
|
{
|
||||||
StopAllCoroutines();
|
StopCanvasFadeCoroutine();
|
||||||
|
|
||||||
if (ignoreFade)
|
if (ignoreFade)
|
||||||
{
|
{
|
||||||
|
|
@ -38,7 +39,7 @@ namespace UI
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
StartCoroutine(CloseCo(FadeTime));
|
_canvasFadeCoroutine = StartCoroutine(CloseCo(FadeTime));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -136,8 +137,7 @@ namespace UI
|
||||||
base.OnOpen(userData);
|
base.OnOpen(userData);
|
||||||
|
|
||||||
_canvasGroup.alpha = 0f;
|
_canvasGroup.alpha = 0f;
|
||||||
StopAllCoroutines();
|
PlayCanvasFade(1f, FadeTime);
|
||||||
StartCoroutine(_canvasGroup.FadeToAlpha(1f, FadeTime));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if UNITY_2017_3_OR_NEWER
|
#if UNITY_2017_3_OR_NEWER
|
||||||
|
|
@ -146,6 +146,7 @@ namespace UI
|
||||||
protected internal override void OnClose(bool isShutdown, object userData)
|
protected internal override void OnClose(bool isShutdown, object userData)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
StopCanvasFadeCoroutine();
|
||||||
base.OnClose(isShutdown, userData);
|
base.OnClose(isShutdown, userData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -167,8 +168,7 @@ namespace UI
|
||||||
base.OnResume();
|
base.OnResume();
|
||||||
|
|
||||||
_canvasGroup.alpha = 0f;
|
_canvasGroup.alpha = 0f;
|
||||||
StopAllCoroutines();
|
PlayCanvasFade(1f, FadeTime);
|
||||||
StartCoroutine(_canvasGroup.FadeToAlpha(1f, FadeTime));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if UNITY_2017_3_OR_NEWER
|
#if UNITY_2017_3_OR_NEWER
|
||||||
|
|
@ -229,7 +229,31 @@ namespace UI
|
||||||
private IEnumerator CloseCo(float duration)
|
private IEnumerator CloseCo(float duration)
|
||||||
{
|
{
|
||||||
yield return _canvasGroup.FadeToAlpha(0f, duration);
|
yield return _canvasGroup.FadeToAlpha(0f, duration);
|
||||||
|
_canvasFadeCoroutine = null;
|
||||||
GameEntry.UI.CloseUIForm(this);
|
GameEntry.UI.CloseUIForm(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void PlayCanvasFade(float alpha, float duration)
|
||||||
|
{
|
||||||
|
StopCanvasFadeCoroutine();
|
||||||
|
_canvasFadeCoroutine = StartCoroutine(FadeCanvasCo(alpha, duration));
|
||||||
|
}
|
||||||
|
|
||||||
|
private IEnumerator FadeCanvasCo(float alpha, float duration)
|
||||||
|
{
|
||||||
|
yield return _canvasGroup.FadeToAlpha(alpha, duration);
|
||||||
|
_canvasFadeCoroutine = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void StopCanvasFadeCoroutine()
|
||||||
|
{
|
||||||
|
if (_canvasFadeCoroutine == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
StopCoroutine(_canvasFadeCoroutine);
|
||||||
|
_canvasFadeCoroutine = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,86 @@
|
||||||
|
using TMPro;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
using UnityGameFramework.Runtime;
|
||||||
|
|
||||||
|
namespace UI
|
||||||
|
{
|
||||||
|
public sealed class AIChatEntryForm : UGuiForm
|
||||||
|
{
|
||||||
|
[SerializeField] private Button _entryButton;
|
||||||
|
[SerializeField] private TMP_Text _entryLabel;
|
||||||
|
[SerializeField] private string _openLabel = "问 AI";
|
||||||
|
[SerializeField] private string _closeLabel = "关闭 AI";
|
||||||
|
|
||||||
|
private AIChatEntryFormController _controller;
|
||||||
|
|
||||||
|
protected override void OnOpen(object userData)
|
||||||
|
{
|
||||||
|
base.OnOpen(userData);
|
||||||
|
BindEntryButton();
|
||||||
|
|
||||||
|
if (!(userData is AIChatEntryFormContext context))
|
||||||
|
{
|
||||||
|
Log.Error("AIChatEntryFormContext is invalid.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RefreshUI(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnClose(bool isShutdown, object userData)
|
||||||
|
{
|
||||||
|
UnbindEntryButton();
|
||||||
|
_controller = null;
|
||||||
|
base.OnClose(isShutdown, userData);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RefreshUI(AIChatEntryFormContext context)
|
||||||
|
{
|
||||||
|
if (context == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_controller = context.Controller;
|
||||||
|
SetChatOpened(context.IsChatOpened);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetChatOpened(bool isChatOpened)
|
||||||
|
{
|
||||||
|
if (_entryLabel == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_entryLabel.text = isChatOpened ? _closeLabel : _openLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnEntryButtonClick()
|
||||||
|
{
|
||||||
|
_controller?.ToggleAIChatForm();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void BindEntryButton()
|
||||||
|
{
|
||||||
|
if (_entryButton == null)
|
||||||
|
{
|
||||||
|
Log.Warning("AIChatEntryForm entry button is not assigned.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_entryButton.onClick.RemoveListener(OnEntryButtonClick);
|
||||||
|
_entryButton.onClick.AddListener(OnEntryButtonClick);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UnbindEntryButton()
|
||||||
|
{
|
||||||
|
if (_entryButton == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_entryButton.onClick.RemoveListener(OnEntryButtonClick);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 17d9f89cf8b5472e8f167d90f9d2621c
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
|
@ -57,6 +57,7 @@ namespace UI
|
||||||
}
|
}
|
||||||
|
|
||||||
int requestId = context.TransitionRequestId;
|
int requestId = context.TransitionRequestId;
|
||||||
|
bool shouldFadeTransition = _currentSprite != null;
|
||||||
|
|
||||||
if (context.Sprite != null)
|
if (context.Sprite != null)
|
||||||
{
|
{
|
||||||
|
|
@ -87,7 +88,7 @@ namespace UI
|
||||||
}
|
}
|
||||||
|
|
||||||
int version = ++_refreshVersion;
|
int version = ++_refreshVersion;
|
||||||
FadeToBlack(() =>
|
TweenCallback loadAndApplySprite = () =>
|
||||||
{
|
{
|
||||||
if (version != _refreshVersion)
|
if (version != _refreshVersion)
|
||||||
{
|
{
|
||||||
|
|
@ -115,9 +116,25 @@ namespace UI
|
||||||
Log.Warning("BgForm refresh failed. Can not load sprite '{0}'.", targetAssetName);
|
Log.Warning("BgForm refresh failed. Can not load sprite '{0}'.", targetAssetName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (shouldFadeTransition)
|
||||||
|
{
|
||||||
FadeFromBlack(() => { PublishTransitionCompleted(requestId); });
|
FadeFromBlack(() => { PublishTransitionCompleted(requestId); });
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PublishTransitionCompleted(requestId);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
};
|
||||||
|
|
||||||
|
if (shouldFadeTransition)
|
||||||
|
{
|
||||||
|
FadeToBlack(loadAndApplySprite);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
loadAndApplySprite.Invoke();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RefreshWithSprite(Sprite sprite, string backgroundAssetName, int requestId)
|
private void RefreshWithSprite(Sprite sprite, string backgroundAssetName, int requestId)
|
||||||
|
|
@ -137,8 +154,9 @@ namespace UI
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool shouldFadeTransition = _currentSprite != null;
|
||||||
int version = ++_refreshVersion;
|
int version = ++_refreshVersion;
|
||||||
FadeToBlack(() =>
|
TweenCallback applySprite = () =>
|
||||||
{
|
{
|
||||||
if (version != _refreshVersion)
|
if (version != _refreshVersion)
|
||||||
{
|
{
|
||||||
|
|
@ -153,8 +171,25 @@ namespace UI
|
||||||
{
|
{
|
||||||
_bgImage.sprite = sprite;
|
_bgImage.sprite = sprite;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (shouldFadeTransition)
|
||||||
|
{
|
||||||
FadeFromBlack(() => { PublishTransitionCompleted(requestId); });
|
FadeFromBlack(() => { PublishTransitionCompleted(requestId); });
|
||||||
});
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PublishTransitionCompleted(requestId);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if (shouldFadeTransition)
|
||||||
|
{
|
||||||
|
FadeToBlack(applySprite);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
applySprite.Invoke();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void FadeToBlack(TweenCallback onComplete)
|
private void FadeToBlack(TweenCallback onComplete)
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ using DG.Tweening;
|
||||||
using Definition.Enum;
|
using Definition.Enum;
|
||||||
using TMPro;
|
using TMPro;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using UnityEngine.Serialization;
|
||||||
using UnityEngine.UI;
|
using UnityEngine.UI;
|
||||||
using UnityGameFramework.Runtime;
|
using UnityGameFramework.Runtime;
|
||||||
|
|
||||||
|
|
@ -19,9 +20,9 @@ namespace UI
|
||||||
|
|
||||||
[SerializeField] private TMP_Text _contentText;
|
[SerializeField] private TMP_Text _contentText;
|
||||||
|
|
||||||
[SerializeField] private Image _leftSprite;
|
[FormerlySerializedAs("_leftSprite")] [SerializeField] private Image _leftImage;
|
||||||
|
|
||||||
[SerializeField] private Image _rightSprite;
|
[FormerlySerializedAs("_rightSprite")] [SerializeField] private Image _rightImage;
|
||||||
|
|
||||||
[SerializeField] private int _leftSpritePosition = 450;
|
[SerializeField] private int _leftSpritePosition = 450;
|
||||||
|
|
||||||
|
|
@ -35,8 +36,6 @@ namespace UI
|
||||||
|
|
||||||
[SerializeField] private GameObject _speakerNameArea;
|
[SerializeField] private GameObject _speakerNameArea;
|
||||||
|
|
||||||
private readonly int _singleSpeakerCenterPosition = Screen.width / 2;
|
|
||||||
|
|
||||||
private string _leftSpeakerToken = string.Empty;
|
private string _leftSpeakerToken = string.Empty;
|
||||||
private string _rightSpeakerToken = string.Empty;
|
private string _rightSpeakerToken = string.Empty;
|
||||||
private Sequence _layoutSequence;
|
private Sequence _layoutSequence;
|
||||||
|
|
@ -95,6 +94,7 @@ namespace UI
|
||||||
}
|
}
|
||||||
|
|
||||||
string speakerName = _context.SpeakerName;
|
string speakerName = _context.SpeakerName;
|
||||||
|
bool isHumanSpeaker = IsHumanSpeaker(_context.SpeakerId);
|
||||||
|
|
||||||
if (_speakerArea != null)
|
if (_speakerArea != null)
|
||||||
{
|
{
|
||||||
|
|
@ -103,7 +103,7 @@ namespace UI
|
||||||
|
|
||||||
if (_speakerNameArea != null)
|
if (_speakerNameArea != null)
|
||||||
{
|
{
|
||||||
_speakerNameArea.SetActive(!string.IsNullOrEmpty(speakerName) && IsHumanSpeaker(_context.SpeakerId));
|
_speakerNameArea.SetActive(!string.IsNullOrEmpty(speakerName) && isHumanSpeaker);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_speakerNameText != null)
|
if (_speakerNameText != null)
|
||||||
|
|
@ -112,6 +112,7 @@ namespace UI
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayTypewriter(_contentText, _context.Text, _currentPlayingSpeed);
|
PlayTypewriter(_contentText, _context.Text, _currentPlayingSpeed);
|
||||||
|
MainOverlayForm.DispatchCue(_context.Emphasis);
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(speakerName))
|
if (string.IsNullOrEmpty(speakerName))
|
||||||
{
|
{
|
||||||
|
|
@ -120,6 +121,13 @@ namespace UI
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!isHumanSpeaker)
|
||||||
|
{
|
||||||
|
ClearSpeakerState();
|
||||||
|
ApplySpeakerLayout(false, false, true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
bool isRightSpeaker = context.Direction > 0;
|
bool isRightSpeaker = context.Direction > 0;
|
||||||
if (isRightSpeaker)
|
if (isRightSpeaker)
|
||||||
{
|
{
|
||||||
|
|
@ -133,21 +141,35 @@ namespace UI
|
||||||
bool hasLeftSpeaker = !string.IsNullOrEmpty(_leftSpeakerToken);
|
bool hasLeftSpeaker = !string.IsNullOrEmpty(_leftSpeakerToken);
|
||||||
bool hasRightSpeaker = !string.IsNullOrEmpty(_rightSpeakerToken);
|
bool hasRightSpeaker = !string.IsNullOrEmpty(_rightSpeakerToken);
|
||||||
|
|
||||||
UpdateSpeakerPortrait(isRightSpeaker ? _rightSprite : _leftSprite, _context.SpeakerId,
|
UpdateSpeakerPortrait(isRightSpeaker ? _rightImage : _leftImage, _context.SpeakerId,
|
||||||
_context.CurrentLineId, isRightSpeaker);
|
_context.CurrentLineId, isRightSpeaker);
|
||||||
ApplySpeakerLayout(hasLeftSpeaker, hasRightSpeaker, false);
|
ApplySpeakerLayout(hasLeftSpeaker, hasRightSpeaker, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override void OnOpen(object userData)
|
||||||
|
{
|
||||||
|
ResetSpeakerVisualState();
|
||||||
|
base.OnOpen(userData);
|
||||||
|
}
|
||||||
|
|
||||||
protected override void OnClose(bool isShutdown, object userData)
|
protected override void OnClose(bool isShutdown, object userData)
|
||||||
{
|
{
|
||||||
ClearSpeakerState();
|
ResetSpeakerVisualState();
|
||||||
KillLayoutTween();
|
|
||||||
ApplySpeakerLayout(false, false, true);
|
|
||||||
base.OnClose(isShutdown, userData);
|
base.OnClose(isShutdown, userData);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ClearSpeakerState()
|
private void ClearSpeakerState()
|
||||||
{
|
{
|
||||||
|
if (_leftImage != null)
|
||||||
|
{
|
||||||
|
_leftImage.sprite = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_rightImage != null)
|
||||||
|
{
|
||||||
|
_rightImage.sprite = null;
|
||||||
|
}
|
||||||
|
|
||||||
_leftSpeakerToken = string.Empty;
|
_leftSpeakerToken = string.Empty;
|
||||||
_rightSpeakerToken = string.Empty;
|
_rightSpeakerToken = string.Empty;
|
||||||
_leftPortraitRequestVersion++;
|
_leftPortraitRequestVersion++;
|
||||||
|
|
@ -161,17 +183,27 @@ namespace UI
|
||||||
_layoutSequence.Kill();
|
_layoutSequence.Kill();
|
||||||
_layoutSequence = null;
|
_layoutSequence = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_leftImage != null && _leftImage.rectTransform != null)
|
||||||
|
{
|
||||||
|
_leftImage.rectTransform.DOKill();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_rightImage != null && _rightImage.rectTransform != null)
|
||||||
|
{
|
||||||
|
_rightImage.rectTransform.DOKill();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ApplySpeakerLayout(bool hasLeftSpeaker, bool hasRightSpeaker, bool instant)
|
private void ApplySpeakerLayout(bool hasLeftSpeaker, bool hasRightSpeaker, bool instant)
|
||||||
{
|
{
|
||||||
if (_leftSprite == null || _rightSprite == null)
|
if (_leftImage == null || _rightImage == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool leftCurrentlyVisible = _leftSprite.gameObject.activeSelf;
|
bool leftCurrentlyVisible = _leftImage.gameObject.activeSelf;
|
||||||
bool rightCurrentlyVisible = _rightSprite.gameObject.activeSelf;
|
bool rightCurrentlyVisible = _rightImage.gameObject.activeSelf;
|
||||||
|
|
||||||
bool leftTargetVisible = hasLeftSpeaker;
|
bool leftTargetVisible = hasLeftSpeaker;
|
||||||
bool rightTargetVisible = hasRightSpeaker;
|
bool rightTargetVisible = hasRightSpeaker;
|
||||||
|
|
@ -191,22 +223,22 @@ namespace UI
|
||||||
|
|
||||||
if (instant || _moveDuration <= 0f)
|
if (instant || _moveDuration <= 0f)
|
||||||
{
|
{
|
||||||
SetSpritePosition(_leftSprite.rectTransform, leftTargetX);
|
SetSpritePosition(_leftImage.rectTransform, leftTargetX);
|
||||||
SetSpritePosition(_rightSprite.rectTransform, rightTargetX);
|
SetSpritePosition(_rightImage.rectTransform, rightTargetX);
|
||||||
SetSpriteVisible(_leftSprite, leftTargetVisible);
|
SetSpriteVisible(_leftImage, leftTargetVisible);
|
||||||
SetSpriteVisible(_rightSprite, rightTargetVisible);
|
SetSpriteVisible(_rightImage, rightTargetVisible);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_layoutSequence = DOTween.Sequence();
|
_layoutSequence = DOTween.Sequence();
|
||||||
|
|
||||||
Tween leftTween = CreateMoveTween(_leftSprite.rectTransform, leftTargetX);
|
Tween leftTween = CreateMoveTween(_leftImage.rectTransform, leftTargetX);
|
||||||
if (leftTween != null)
|
if (leftTween != null)
|
||||||
{
|
{
|
||||||
_layoutSequence.Join(leftTween);
|
_layoutSequence.Join(leftTween);
|
||||||
}
|
}
|
||||||
|
|
||||||
Tween rightTween = CreateMoveTween(_rightSprite.rectTransform, rightTargetX);
|
Tween rightTween = CreateMoveTween(_rightImage.rectTransform, rightTargetX);
|
||||||
if (rightTween != null)
|
if (rightTween != null)
|
||||||
{
|
{
|
||||||
_layoutSequence.Join(rightTween);
|
_layoutSequence.Join(rightTween);
|
||||||
|
|
@ -216,17 +248,17 @@ namespace UI
|
||||||
{
|
{
|
||||||
_layoutSequence.OnComplete(() =>
|
_layoutSequence.OnComplete(() =>
|
||||||
{
|
{
|
||||||
SetSpriteVisible(_leftSprite, leftTargetVisible);
|
SetSpriteVisible(_leftImage, leftTargetVisible);
|
||||||
SetSpriteVisible(_rightSprite, rightTargetVisible);
|
SetSpriteVisible(_rightImage, rightTargetVisible);
|
||||||
_layoutSequence = null;
|
_layoutSequence = null;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SetSpritePosition(_leftSprite.rectTransform, leftTargetX);
|
SetSpritePosition(_leftImage.rectTransform, leftTargetX);
|
||||||
SetSpritePosition(_rightSprite.rectTransform, rightTargetX);
|
SetSpritePosition(_rightImage.rectTransform, rightTargetX);
|
||||||
SetSpriteVisible(_leftSprite, leftTargetVisible);
|
SetSpriteVisible(_leftImage, leftTargetVisible);
|
||||||
SetSpriteVisible(_rightSprite, rightTargetVisible);
|
SetSpriteVisible(_rightImage, rightTargetVisible);
|
||||||
_layoutSequence.Kill();
|
_layoutSequence.Kill();
|
||||||
_layoutSequence = null;
|
_layoutSequence = null;
|
||||||
}
|
}
|
||||||
|
|
@ -243,25 +275,25 @@ namespace UI
|
||||||
if (leftTargetVisible && !leftCurrentlyVisible)
|
if (leftTargetVisible && !leftCurrentlyVisible)
|
||||||
{
|
{
|
||||||
float leftStartX = GetAppearStartX(true, rightCurrentlyVisible, hasLeftSpeaker, hasRightSpeaker);
|
float leftStartX = GetAppearStartX(true, rightCurrentlyVisible, hasLeftSpeaker, hasRightSpeaker);
|
||||||
SetSpritePosition(_leftSprite.rectTransform, leftStartX);
|
SetSpritePosition(_leftImage.rectTransform, leftStartX);
|
||||||
SetSpriteVisible(_leftSprite, true);
|
SetSpriteVisible(_leftImage, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rightTargetVisible && !rightCurrentlyVisible)
|
if (rightTargetVisible && !rightCurrentlyVisible)
|
||||||
{
|
{
|
||||||
float rightStartX = GetAppearStartX(false, leftCurrentlyVisible, hasLeftSpeaker, hasRightSpeaker);
|
float rightStartX = GetAppearStartX(false, leftCurrentlyVisible, hasLeftSpeaker, hasRightSpeaker);
|
||||||
SetSpritePosition(_rightSprite.rectTransform, rightStartX);
|
SetSpritePosition(_rightImage.rectTransform, rightStartX);
|
||||||
SetSpriteVisible(_rightSprite, true);
|
SetSpriteVisible(_rightImage, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (leftCurrentlyVisible && !leftTargetVisible)
|
if (leftCurrentlyVisible && !leftTargetVisible)
|
||||||
{
|
{
|
||||||
SetSpriteVisible(_leftSprite, true);
|
SetSpriteVisible(_leftImage, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rightCurrentlyVisible && !rightTargetVisible)
|
if (rightCurrentlyVisible && !rightTargetVisible)
|
||||||
{
|
{
|
||||||
SetSpriteVisible(_rightSprite, true);
|
SetSpriteVisible(_rightImage, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -273,7 +305,7 @@ namespace UI
|
||||||
// single -> multi: hidden side starts from center, then both move to side positions.
|
// single -> multi: hidden side starts from center, then both move to side positions.
|
||||||
if (otherCurrentlyVisible)
|
if (otherCurrentlyVisible)
|
||||||
{
|
{
|
||||||
return _singleSpeakerCenterPosition;
|
return GetSingleSpeakerCenterPosition(isLeft);
|
||||||
}
|
}
|
||||||
|
|
||||||
return isLeft ? _leftSpritePosition : _rightSpritePosition;
|
return isLeft ? _leftSpritePosition : _rightSpritePosition;
|
||||||
|
|
@ -293,7 +325,7 @@ namespace UI
|
||||||
if (hasLeftSpeaker || hasRightSpeaker)
|
if (hasLeftSpeaker || hasRightSpeaker)
|
||||||
{
|
{
|
||||||
// multi -> single: both move to center first, then inactive side hides.
|
// multi -> single: both move to center first, then inactive side hides.
|
||||||
return _singleSpeakerCenterPosition;
|
return GetSingleSpeakerCenterPosition(isLeft);
|
||||||
}
|
}
|
||||||
|
|
||||||
return isLeft ? _leftSpritePosition : _rightSpritePosition;
|
return isLeft ? _leftSpritePosition : _rightSpritePosition;
|
||||||
|
|
@ -350,7 +382,8 @@ namespace UI
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
string portraitAssetName = $"Characters/{speakerId}-{ResolvePortraitIndex(speakerId, lineId)}.png";
|
int portraitCount = ResolveAvailablePortraitCount(speakerId);
|
||||||
|
string portraitAssetName = $"Characters/{speakerId}-{ResolvePortraitIndex(speakerId, lineId, portraitCount)}.png";
|
||||||
if (GameEntry.SpriteCache == null)
|
if (GameEntry.SpriteCache == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
|
|
@ -360,32 +393,33 @@ namespace UI
|
||||||
{
|
{
|
||||||
if (isRightSpeaker)
|
if (isRightSpeaker)
|
||||||
{
|
{
|
||||||
if (requestVersion != _rightPortraitRequestVersion || _rightSprite == null)
|
if (requestVersion != _rightPortraitRequestVersion || _rightImage == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sprite != null)
|
if (sprite != null)
|
||||||
{
|
{
|
||||||
_rightSprite.sprite = sprite;
|
_rightImage.sprite = sprite;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (requestVersion != _leftPortraitRequestVersion || _leftSprite == null)
|
if (requestVersion != _leftPortraitRequestVersion || _leftImage == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sprite != null)
|
if (sprite != null)
|
||||||
{
|
{
|
||||||
_leftSprite.sprite = sprite;
|
_leftImage.sprite = sprite;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int ResolvePortraitIndex(string speakerId, int lineId)
|
private static int ResolvePortraitIndex(string speakerId, int lineId, int portraitCount)
|
||||||
{
|
{
|
||||||
|
int safePortraitCount = portraitCount > 0 ? portraitCount : 3;
|
||||||
unchecked
|
unchecked
|
||||||
{
|
{
|
||||||
int hash = 17;
|
int hash = 17;
|
||||||
|
|
@ -393,16 +427,26 @@ namespace UI
|
||||||
hash = hash * 31 + (string.IsNullOrEmpty(speakerId)
|
hash = hash * 31 + (string.IsNullOrEmpty(speakerId)
|
||||||
? 0
|
? 0
|
||||||
: System.StringComparer.OrdinalIgnoreCase.GetHashCode(speakerId));
|
: System.StringComparer.OrdinalIgnoreCase.GetHashCode(speakerId));
|
||||||
int mod = hash % 3;
|
int mod = hash % safePortraitCount;
|
||||||
if (mod < 0)
|
if (mod < 0)
|
||||||
{
|
{
|
||||||
mod += 3;
|
mod += safePortraitCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
return mod + 1;
|
return mod + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static int ResolveAvailablePortraitCount(string speakerId)
|
||||||
|
{
|
||||||
|
if (GameEntry.Dialog == null)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return GameEntry.Dialog.GetSpeakerPortraitCount(speakerId);
|
||||||
|
}
|
||||||
|
|
||||||
private static bool IsHumanSpeaker(string speakerId)
|
private static bool IsHumanSpeaker(string speakerId)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(speakerId))
|
if (string.IsNullOrWhiteSpace(speakerId))
|
||||||
|
|
@ -412,5 +456,37 @@ namespace UI
|
||||||
|
|
||||||
return !NonPortraitSpeakerIds.Contains(speakerId);
|
return !NonPortraitSpeakerIds.Contains(speakerId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ResetSpeakerVisualState()
|
||||||
|
{
|
||||||
|
KillLayoutTween();
|
||||||
|
ClearSpeakerState();
|
||||||
|
ApplySpeakerLayout(false, false, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private float GetSingleSpeakerCenterPosition(bool isLeft)
|
||||||
|
{
|
||||||
|
RectTransform rectTransform = isLeft
|
||||||
|
? _leftImage != null ? _leftImage.rectTransform : null
|
||||||
|
: _rightImage != null ? _rightImage.rectTransform : null;
|
||||||
|
return GetCenterAnchoredX(rectTransform);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static float GetCenterAnchoredX(RectTransform rectTransform)
|
||||||
|
{
|
||||||
|
if (rectTransform == null)
|
||||||
|
{
|
||||||
|
return 0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(rectTransform.parent is RectTransform parent))
|
||||||
|
{
|
||||||
|
return 0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
float anchorX = rectTransform.anchorMin.x;
|
||||||
|
return (0.5f - anchorX) * parent.rect.width;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,286 @@
|
||||||
|
using System.Collections;
|
||||||
|
using Event;
|
||||||
|
using TMPro;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
using UnityGameFramework.Runtime;
|
||||||
|
|
||||||
|
namespace UI
|
||||||
|
{
|
||||||
|
public class ChapterTitleForm : UGuiForm
|
||||||
|
{
|
||||||
|
[SerializeField] private CanvasGroup _contentGroup;
|
||||||
|
[SerializeField] private Image _dimImage;
|
||||||
|
[SerializeField] private TMP_Text _titleText;
|
||||||
|
[SerializeField] private TMP_Text _subtitleText;
|
||||||
|
[SerializeField] private float _fadeInDuration = 0.3f;
|
||||||
|
[SerializeField] private float _holdDuration = 1.2f;
|
||||||
|
[SerializeField] private float _fadeOutDuration = 0.3f;
|
||||||
|
|
||||||
|
private Coroutine _playCoroutine;
|
||||||
|
private int _requestId;
|
||||||
|
private int _chapterId;
|
||||||
|
private bool _hasPublishedCompletion;
|
||||||
|
|
||||||
|
protected override void OnOpen(object userData)
|
||||||
|
{
|
||||||
|
base.OnOpen(userData);
|
||||||
|
EnsureView();
|
||||||
|
ApplyContext(userData as ChapterTitleFormContext);
|
||||||
|
StartPlay();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnClose(bool isShutdown, object userData)
|
||||||
|
{
|
||||||
|
StopPlay();
|
||||||
|
SetContentAlpha(0f);
|
||||||
|
if (!isShutdown)
|
||||||
|
{
|
||||||
|
PublishCompletionIfNeeded();
|
||||||
|
}
|
||||||
|
|
||||||
|
base.OnClose(isShutdown, userData);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void EnsureView()
|
||||||
|
{
|
||||||
|
RectTransform rootRect = transform as RectTransform;
|
||||||
|
if (rootRect == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_contentGroup == null)
|
||||||
|
{
|
||||||
|
_contentGroup = CreateContentGroup(rootRect);
|
||||||
|
}
|
||||||
|
|
||||||
|
RectTransform contentRect = _contentGroup != null && _contentGroup.transform is RectTransform contentTransform
|
||||||
|
? contentTransform
|
||||||
|
: rootRect;
|
||||||
|
|
||||||
|
if (_dimImage == null)
|
||||||
|
{
|
||||||
|
_dimImage = CreateImage("Dim", contentRect, new Color(0f, 0f, 0f, 0.72f), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_titleText == null)
|
||||||
|
{
|
||||||
|
_titleText = CreateText("Title", contentRect, 108f, FontStyles.Bold, TextAlignmentOptions.Center);
|
||||||
|
RectTransform titleRect = _titleText.rectTransform;
|
||||||
|
titleRect.anchorMin = new Vector2(0.5f, 0.5f);
|
||||||
|
titleRect.anchorMax = new Vector2(0.5f, 0.5f);
|
||||||
|
titleRect.pivot = new Vector2(0.5f, 0.5f);
|
||||||
|
titleRect.sizeDelta = new Vector2(2200f, 220f);
|
||||||
|
titleRect.anchoredPosition = new Vector2(0f, 40f);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_subtitleText == null)
|
||||||
|
{
|
||||||
|
_subtitleText = CreateText("Subtitle", contentRect, 42f, FontStyles.Normal, TextAlignmentOptions.Center);
|
||||||
|
RectTransform subtitleRect = _subtitleText.rectTransform;
|
||||||
|
subtitleRect.anchorMin = new Vector2(0.5f, 0.5f);
|
||||||
|
subtitleRect.anchorMax = new Vector2(0.5f, 0.5f);
|
||||||
|
subtitleRect.pivot = new Vector2(0.5f, 0.5f);
|
||||||
|
subtitleRect.sizeDelta = new Vector2(2200f, 120f);
|
||||||
|
subtitleRect.anchoredPosition = new Vector2(0f, -60f);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_dimImage != null)
|
||||||
|
{
|
||||||
|
_dimImage.transform.SetAsFirstSibling();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_subtitleText != null)
|
||||||
|
{
|
||||||
|
_subtitleText.transform.SetAsLastSibling();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_titleText != null)
|
||||||
|
{
|
||||||
|
_titleText.transform.SetAsLastSibling();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ApplyContext(ChapterTitleFormContext context)
|
||||||
|
{
|
||||||
|
_hasPublishedCompletion = false;
|
||||||
|
|
||||||
|
if (context == null)
|
||||||
|
{
|
||||||
|
_requestId = 0;
|
||||||
|
_chapterId = 0;
|
||||||
|
SetTitleText(string.Empty, string.Empty);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_requestId = context.RequestId;
|
||||||
|
_chapterId = context.ChapterId;
|
||||||
|
|
||||||
|
string title = string.IsNullOrWhiteSpace(context.Title)
|
||||||
|
? BuildDefaultChapterTitle(_chapterId)
|
||||||
|
: context.Title.Trim();
|
||||||
|
string subtitle = string.IsNullOrWhiteSpace(context.Subtitle) ? string.Empty : context.Subtitle.Trim();
|
||||||
|
SetTitleText(title, subtitle);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetTitleText(string title, string subtitle)
|
||||||
|
{
|
||||||
|
if (_titleText != null)
|
||||||
|
{
|
||||||
|
_titleText.text = title;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_subtitleText != null)
|
||||||
|
{
|
||||||
|
_subtitleText.text = subtitle;
|
||||||
|
_subtitleText.gameObject.SetActive(!string.IsNullOrEmpty(subtitle));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void StartPlay()
|
||||||
|
{
|
||||||
|
StopPlay();
|
||||||
|
_playCoroutine = StartCoroutine(PlayRoutine());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void StopPlay()
|
||||||
|
{
|
||||||
|
if (_playCoroutine == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
StopCoroutine(_playCoroutine);
|
||||||
|
_playCoroutine = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private IEnumerator PlayRoutine()
|
||||||
|
{
|
||||||
|
SetContentAlpha(0f);
|
||||||
|
yield return FadeAlpha(0f, 1f, _fadeInDuration);
|
||||||
|
yield return WaitUnscaled(_holdDuration);
|
||||||
|
yield return FadeAlpha(1f, 0f, _fadeOutDuration);
|
||||||
|
_playCoroutine = null;
|
||||||
|
|
||||||
|
PublishCompletionIfNeeded();
|
||||||
|
if (GameEntry.UI != null && UIForm != null)
|
||||||
|
{
|
||||||
|
GameEntry.UI.CloseUIForm(UIForm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private IEnumerator FadeAlpha(float from, float to, float duration)
|
||||||
|
{
|
||||||
|
float safeDuration = Mathf.Max(0f, duration);
|
||||||
|
if (safeDuration <= 0f)
|
||||||
|
{
|
||||||
|
SetContentAlpha(to);
|
||||||
|
yield break;
|
||||||
|
}
|
||||||
|
|
||||||
|
float elapsed = 0f;
|
||||||
|
while (elapsed < safeDuration)
|
||||||
|
{
|
||||||
|
elapsed += Time.unscaledDeltaTime;
|
||||||
|
float t = Mathf.Clamp01(elapsed / safeDuration);
|
||||||
|
SetContentAlpha(Mathf.Lerp(from, to, t));
|
||||||
|
yield return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
SetContentAlpha(to);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IEnumerator WaitUnscaled(float duration)
|
||||||
|
{
|
||||||
|
float safeDuration = Mathf.Max(0f, duration);
|
||||||
|
if (safeDuration <= 0f)
|
||||||
|
{
|
||||||
|
yield break;
|
||||||
|
}
|
||||||
|
|
||||||
|
float elapsed = 0f;
|
||||||
|
while (elapsed < safeDuration)
|
||||||
|
{
|
||||||
|
elapsed += Time.unscaledDeltaTime;
|
||||||
|
yield return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetContentAlpha(float alpha)
|
||||||
|
{
|
||||||
|
if (_contentGroup == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_contentGroup.alpha = Mathf.Clamp01(alpha);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void PublishCompletionIfNeeded()
|
||||||
|
{
|
||||||
|
if (_hasPublishedCompletion || _requestId <= 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_hasPublishedCompletion = true;
|
||||||
|
GameEntry.Event.Fire(this, ChapterTitleCompletedEventArgs.Create(_chapterId, _requestId));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string BuildDefaultChapterTitle(int chapterId)
|
||||||
|
{
|
||||||
|
return chapterId > 0 ? $"第{chapterId}章" : string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static CanvasGroup CreateContentGroup(RectTransform parent)
|
||||||
|
{
|
||||||
|
GameObject go = new GameObject("ContentRoot", typeof(RectTransform), typeof(CanvasGroup));
|
||||||
|
RectTransform rect = go.GetComponent<RectTransform>();
|
||||||
|
rect.SetParent(parent, false);
|
||||||
|
rect.anchorMin = Vector2.zero;
|
||||||
|
rect.anchorMax = Vector2.one;
|
||||||
|
rect.offsetMin = Vector2.zero;
|
||||||
|
rect.offsetMax = Vector2.zero;
|
||||||
|
return go.GetComponent<CanvasGroup>();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Image CreateImage(string name, RectTransform parent, Color color, bool raycastTarget)
|
||||||
|
{
|
||||||
|
GameObject go = new GameObject(name, typeof(RectTransform), typeof(CanvasRenderer), typeof(Image));
|
||||||
|
RectTransform rect = go.GetComponent<RectTransform>();
|
||||||
|
rect.SetParent(parent, false);
|
||||||
|
rect.anchorMin = Vector2.zero;
|
||||||
|
rect.anchorMax = Vector2.one;
|
||||||
|
rect.offsetMin = Vector2.zero;
|
||||||
|
rect.offsetMax = Vector2.zero;
|
||||||
|
|
||||||
|
Image image = go.GetComponent<Image>();
|
||||||
|
image.color = color;
|
||||||
|
image.raycastTarget = raycastTarget;
|
||||||
|
return image;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static TMP_Text CreateText(string name, RectTransform parent, float fontSize, FontStyles style,
|
||||||
|
TextAlignmentOptions alignment)
|
||||||
|
{
|
||||||
|
GameObject go = new GameObject(name, typeof(RectTransform), typeof(CanvasRenderer), typeof(TextMeshProUGUI));
|
||||||
|
RectTransform rect = go.GetComponent<RectTransform>();
|
||||||
|
rect.SetParent(parent, false);
|
||||||
|
|
||||||
|
TextMeshProUGUI text = go.GetComponent<TextMeshProUGUI>();
|
||||||
|
if (TMP_Settings.defaultFontAsset != null)
|
||||||
|
{
|
||||||
|
text.font = TMP_Settings.defaultFontAsset;
|
||||||
|
}
|
||||||
|
|
||||||
|
text.text = string.Empty;
|
||||||
|
text.fontSize = fontSize;
|
||||||
|
text.fontStyle = style;
|
||||||
|
text.alignment = alignment;
|
||||||
|
text.color = new Color(0.96f, 0.94f, 0.88f, 1f);
|
||||||
|
text.raycastTarget = false;
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 6bb48f2d6a2e4df6a8360f0f84c1f58a
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
|
@ -0,0 +1,268 @@
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Definition.Enum;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
using UnityGameFramework.Runtime;
|
||||||
|
|
||||||
|
namespace UI
|
||||||
|
{
|
||||||
|
public class MainOverlayForm : UGuiForm
|
||||||
|
{
|
||||||
|
[SerializeField] private Image _cueImage;
|
||||||
|
[SerializeField] private List<Sprite> _cueBindings = new List<Sprite>();
|
||||||
|
[SerializeField] private float _showDuration = 0.2f;
|
||||||
|
[SerializeField] private float _hideDuration = 0.2f;
|
||||||
|
|
||||||
|
private static int _dispatchCount;
|
||||||
|
private Coroutine _transitionCoroutine;
|
||||||
|
private bool _isClosingByCue;
|
||||||
|
private Vector3 _baseScale = Vector3.one;
|
||||||
|
private bool _baseScaleInitialized;
|
||||||
|
|
||||||
|
public static void DispatchCue(EmphasisType emphasis)
|
||||||
|
{
|
||||||
|
if (GameEntry.UI == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
UGuiForm existingForm = GameEntry.UI.GetUIForm(UIFormId.MainOverlayForm);
|
||||||
|
if (emphasis == EmphasisType.EntityCueClose)
|
||||||
|
{
|
||||||
|
if (existingForm is MainOverlayForm overlay)
|
||||||
|
{
|
||||||
|
overlay.PlayHideAndClose();
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (emphasis != EmphasisType.EntityCue)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (existingForm is MainOverlayForm overlayForm)
|
||||||
|
{
|
||||||
|
overlayForm.ShowNextCue();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int? formSerialId = GameEntry.UI.OpenUIForm(UIFormId.MainOverlayForm);
|
||||||
|
if (!formSerialId.HasValue)
|
||||||
|
{
|
||||||
|
Log.Warning("MainOverlayForm open failed. Check UIForm.txt config and prefab asset.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnOpen(object userData)
|
||||||
|
{
|
||||||
|
base.OnOpen(userData);
|
||||||
|
EnsureBaseScaleInitialized();
|
||||||
|
ShowNextCue();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnClose(bool isShutdown, object userData)
|
||||||
|
{
|
||||||
|
StopTransition();
|
||||||
|
HideCueImage(clearSprite: true);
|
||||||
|
base.OnClose(isShutdown, userData);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ShowNextCue()
|
||||||
|
{
|
||||||
|
if (_cueImage == null)
|
||||||
|
{
|
||||||
|
Log.Warning("MainOverlayForm cue image is missing.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_cueBindings == null || _cueBindings.Count == 0)
|
||||||
|
{
|
||||||
|
HideCueImage(clearSprite: false);
|
||||||
|
Log.Warning("MainOverlayForm cue bindings are empty.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int index = _dispatchCount % _cueBindings.Count;
|
||||||
|
_dispatchCount++;
|
||||||
|
|
||||||
|
Sprite sprite = _cueBindings[index];
|
||||||
|
if (sprite == null)
|
||||||
|
{
|
||||||
|
HideCueImage(clearSprite: false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
EnsureBaseScaleInitialized();
|
||||||
|
StopTransition();
|
||||||
|
_transitionCoroutine = StartCoroutine(PlayShowRoutine(sprite));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void PlayHideAndClose()
|
||||||
|
{
|
||||||
|
if (_isClosingByCue)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_cueImage == null)
|
||||||
|
{
|
||||||
|
if (GameEntry.UI != null && UIForm != null)
|
||||||
|
{
|
||||||
|
GameEntry.UI.CloseUIForm(UIForm);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
StopTransition();
|
||||||
|
_transitionCoroutine = StartCoroutine(PlayHideAndCloseRoutine());
|
||||||
|
}
|
||||||
|
|
||||||
|
private IEnumerator PlayShowRoutine(Sprite sprite)
|
||||||
|
{
|
||||||
|
_cueImage.sprite = sprite;
|
||||||
|
_cueImage.SetNativeSize();
|
||||||
|
_cueImage.gameObject.SetActive(true);
|
||||||
|
|
||||||
|
SetCueVisual(0f, 0f);
|
||||||
|
yield return PlayLerp(0f, 1f, 0f, 0.6f, _showDuration);
|
||||||
|
_transitionCoroutine = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private IEnumerator PlayHideAndCloseRoutine()
|
||||||
|
{
|
||||||
|
_isClosingByCue = true;
|
||||||
|
float fromAlpha = _cueImage.color.a;
|
||||||
|
float fromScale = GetCurrentScale01();
|
||||||
|
yield return PlayLerp(fromAlpha, 0f, fromScale, 0f, _hideDuration);
|
||||||
|
HideCueImage(clearSprite: true);
|
||||||
|
_isClosingByCue = false;
|
||||||
|
_transitionCoroutine = null;
|
||||||
|
|
||||||
|
if (GameEntry.UI != null && UIForm != null)
|
||||||
|
{
|
||||||
|
GameEntry.UI.CloseUIForm(UIForm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private IEnumerator PlayLerp(float fromAlpha, float toAlpha, float fromScale, float toScale, float duration)
|
||||||
|
{
|
||||||
|
if (_cueImage == null)
|
||||||
|
{
|
||||||
|
yield break;
|
||||||
|
}
|
||||||
|
|
||||||
|
float safeDuration = Mathf.Max(0f, duration);
|
||||||
|
if (safeDuration <= 0f)
|
||||||
|
{
|
||||||
|
SetCueVisual(toAlpha, toScale);
|
||||||
|
yield break;
|
||||||
|
}
|
||||||
|
|
||||||
|
float elapsed = 0f;
|
||||||
|
while (elapsed < safeDuration)
|
||||||
|
{
|
||||||
|
elapsed += Time.unscaledDeltaTime;
|
||||||
|
float t = Mathf.Clamp01(elapsed / safeDuration);
|
||||||
|
float alpha = Mathf.Lerp(fromAlpha, toAlpha, t);
|
||||||
|
float scale = Mathf.Lerp(fromScale, toScale, t);
|
||||||
|
SetCueVisual(alpha, scale);
|
||||||
|
yield return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
SetCueVisual(toAlpha, toScale);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetCueVisual(float alpha, float scale01)
|
||||||
|
{
|
||||||
|
if (_cueImage == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Color color = _cueImage.color;
|
||||||
|
color.a = Mathf.Clamp01(alpha);
|
||||||
|
_cueImage.color = color;
|
||||||
|
|
||||||
|
RectTransform rectTransform = _cueImage.rectTransform;
|
||||||
|
if (rectTransform == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
float safeScale = Mathf.Clamp01(scale01);
|
||||||
|
rectTransform.localScale = _baseScale * safeScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
private float GetCurrentScale01()
|
||||||
|
{
|
||||||
|
if (_cueImage == null)
|
||||||
|
{
|
||||||
|
return 1f;
|
||||||
|
}
|
||||||
|
|
||||||
|
EnsureBaseScaleInitialized();
|
||||||
|
RectTransform rectTransform = _cueImage.rectTransform;
|
||||||
|
if (rectTransform == null)
|
||||||
|
{
|
||||||
|
return 1f;
|
||||||
|
}
|
||||||
|
|
||||||
|
float ratioX = Mathf.Abs(_baseScale.x) > 0.0001f ? rectTransform.localScale.x / _baseScale.x : 1f;
|
||||||
|
float ratioY = Mathf.Abs(_baseScale.y) > 0.0001f ? rectTransform.localScale.y / _baseScale.y : 1f;
|
||||||
|
return Mathf.Clamp01((ratioX + ratioY) * 0.5f);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void EnsureBaseScaleInitialized()
|
||||||
|
{
|
||||||
|
if (_baseScaleInitialized)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_cueImage == null || _cueImage.rectTransform == null)
|
||||||
|
{
|
||||||
|
_baseScale = Vector3.one;
|
||||||
|
_baseScaleInitialized = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_baseScale = _cueImage.rectTransform.localScale;
|
||||||
|
if (_baseScale == Vector3.zero)
|
||||||
|
{
|
||||||
|
_baseScale = Vector3.one;
|
||||||
|
}
|
||||||
|
|
||||||
|
_baseScaleInitialized = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void StopTransition()
|
||||||
|
{
|
||||||
|
if (_transitionCoroutine != null)
|
||||||
|
{
|
||||||
|
StopCoroutine(_transitionCoroutine);
|
||||||
|
_transitionCoroutine = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
_isClosingByCue = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void HideCueImage(bool clearSprite)
|
||||||
|
{
|
||||||
|
if (_cueImage == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_cueImage.gameObject.SetActive(false);
|
||||||
|
SetCueVisual(0f, 0f);
|
||||||
|
if (clearSprite)
|
||||||
|
{
|
||||||
|
_cueImage.sprite = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: c4e1c3f77c2743b7a1d7d2f44f5eb9aa
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!114 &11400000
|
||||||
|
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: 19a1150cd0fb4b648ad8232de4e38baa, type: 3}
|
||||||
|
m_Name: Combine1005
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
_enabled: 1
|
||||||
|
_triggerType: 0
|
||||||
|
_triggerId: 1005
|
||||||
|
_useDefaultConfig: 1
|
||||||
|
_combineConfig:
|
||||||
|
AutoStart: 1
|
||||||
|
Slots: []
|
||||||
|
Parts: []
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: 352998f9edeef2348a887c5a2e7dc5d1
|
guid: 4439eec25b0603e4abc486862811413a
|
||||||
NativeFormatImporter:
|
NativeFormatImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
mainObjectFileID: 11400000
|
mainObjectFileID: 11400000
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!114 &11400000
|
||||||
|
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: 8e4367863f5042e1b5b0b3b3b7f62f5e, type: 3}
|
||||||
|
m_Name: Dialog1004
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
_enabled: 1
|
||||||
|
_triggerType: 0
|
||||||
|
_triggerId: 1004
|
||||||
|
_dialogId: 1005
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: 28c42f88cfe56e84e95c0d7545db8c1b
|
guid: 3f853a1029e766343b69579255e40bbc
|
||||||
NativeFormatImporter:
|
NativeFormatImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
mainObjectFileID: 0
|
mainObjectFileID: 11400000
|
||||||
userData:
|
userData:
|
||||||
assetBundleName:
|
assetBundleName:
|
||||||
assetBundleVariant:
|
assetBundleVariant:
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!114 &11400000
|
||||||
|
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: 8e4367863f5042e1b5b0b3b3b7f62f5e, type: 3}
|
||||||
|
m_Name: Dialog2001
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
_enabled: 1
|
||||||
|
_triggerType: 0
|
||||||
|
_triggerId: 2001
|
||||||
|
_dialogId: 2002
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 20a90da7b22b040428da0c9c38c892d0
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!114 &11400000
|
||||||
|
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: 8e4367863f5042e1b5b0b3b3b7f62f5e, type: 3}
|
||||||
|
m_Name: Dialog2002
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
_enabled: 1
|
||||||
|
_triggerType: 0
|
||||||
|
_triggerId: 2002
|
||||||
|
_dialogId: 2003
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 993a30dececf3c849b753dec84f5a6f0
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!114 &11400000
|
||||||
|
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: 8e4367863f5042e1b5b0b3b3b7f62f5e, type: 3}
|
||||||
|
m_Name: Dialog2003
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
_enabled: 1
|
||||||
|
_triggerType: 0
|
||||||
|
_triggerId: 2003
|
||||||
|
_dialogId: 2003
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 752da669fb380ba48a43fa85c5928d30
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!114 &11400000
|
||||||
|
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: 8e4367863f5042e1b5b0b3b3b7f62f5e, type: 3}
|
||||||
|
m_Name: Dialog3001
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
_enabled: 1
|
||||||
|
_triggerType: 0
|
||||||
|
_triggerId: 3001
|
||||||
|
_dialogId: 3002
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a57f0cef82d7b0c4891685fa9bf91caa
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!114 &11400000
|
||||||
|
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: 8e4367863f5042e1b5b0b3b3b7f62f5e, type: 3}
|
||||||
|
m_Name: Dialog3002
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
_enabled: 1
|
||||||
|
_triggerType: 0
|
||||||
|
_triggerId: 3002
|
||||||
|
_dialogId: 3003
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: ae1fa1f6bf239ae4797a2817dcddfee5
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!114 &11400000
|
||||||
|
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: 8e4367863f5042e1b5b0b3b3b7f62f5e, type: 3}
|
||||||
|
m_Name: Dialog3003
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
_enabled: 1
|
||||||
|
_triggerType: 0
|
||||||
|
_triggerId: 3003
|
||||||
|
_dialogId: 3004
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 85827e4f006c7bd4eb4438c79643482a
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!114 &11400000
|
||||||
|
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: 8e4367863f5042e1b5b0b3b3b7f62f5e, type: 3}
|
||||||
|
m_Name: Dialog4001
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
_enabled: 1
|
||||||
|
_triggerType: 0
|
||||||
|
_triggerId: 4001
|
||||||
|
_dialogId: 4002
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 9c1f6f86d307c934bb1b6156ecc22ce4
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!114 &11400000
|
||||||
|
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: 8e4367863f5042e1b5b0b3b3b7f62f5e, type: 3}
|
||||||
|
m_Name: Dialog4002
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
_enabled: 1
|
||||||
|
_triggerType: 0
|
||||||
|
_triggerId: 4002
|
||||||
|
_dialogId: 4003
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 864c5f9e92613564c8dbd1864266461a
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!114 &11400000
|
||||||
|
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: 8e4367863f5042e1b5b0b3b3b7f62f5e, type: 3}
|
||||||
|
m_Name: Dialog4003
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
_enabled: 1
|
||||||
|
_triggerType: 0
|
||||||
|
_triggerId: 4003
|
||||||
|
_dialogId: 4004
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 6fb570be0c658844681401443b633d1f
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!114 &11400000
|
||||||
|
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: 2b63fb6eb96e4d3193dd26b443f856c7, type: 3}
|
||||||
|
m_Name: EndChapter1006
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
_enabled: 1
|
||||||
|
_triggerType: 0
|
||||||
|
_triggerId: 1005
|
||||||
|
_chapterId: 2
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 70abcb8196a34ab4293f06f432f45446
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!114 &11400000
|
||||||
|
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: 2b63fb6eb96e4d3193dd26b443f856c7, type: 3}
|
||||||
|
m_Name: EndChapter2004
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
_enabled: 1
|
||||||
|
_triggerType: 0
|
||||||
|
_triggerId: 2004
|
||||||
|
_chapterId: 3
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: b212fd0c183de84469231d272cb97369
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!114 &11400000
|
||||||
|
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: 2b63fb6eb96e4d3193dd26b443f856c7, type: 3}
|
||||||
|
m_Name: EndChapter3004
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
_enabled: 1
|
||||||
|
_triggerType: 0
|
||||||
|
_triggerId: 3004
|
||||||
|
_chapterId: 4
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 44f4727efe7606f4eb271f10461657ef
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!114 &11400000
|
||||||
|
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: 2b63fb6eb96e4d3193dd26b443f856c7, type: 3}
|
||||||
|
m_Name: EndChapter4004
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
_enabled: 1
|
||||||
|
_triggerType: 0
|
||||||
|
_triggerId: 4004
|
||||||
|
_chapterId: 0
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 778a252e3434f3b4e868a99cd8313ac5
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 194 KiB After Width: | Height: | Size: 147 KiB |
|
|
@ -1,5 +1,5 @@
|
||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: 9a1a43803190cbf4a8694a784c3df76b
|
guid: fc3cff8aba4e30c4ea369cb0a0f84baa
|
||||||
TextureImporter:
|
TextureImporter:
|
||||||
internalIDToNameTable: []
|
internalIDToNameTable: []
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
|
|
@ -94,7 +94,7 @@ TextureImporter:
|
||||||
androidETC2FallbackOverride: 0
|
androidETC2FallbackOverride: 0
|
||||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||||
- serializedVersion: 3
|
- serializedVersion: 3
|
||||||
buildTarget: Android
|
buildTarget: WebGL
|
||||||
maxTextureSize: 2048
|
maxTextureSize: 2048
|
||||||
resizeAlgorithm: 0
|
resizeAlgorithm: 0
|
||||||
textureFormat: -1
|
textureFormat: -1
|
||||||
|
|
@ -107,7 +107,7 @@ TextureImporter:
|
||||||
androidETC2FallbackOverride: 0
|
androidETC2FallbackOverride: 0
|
||||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||||
- serializedVersion: 3
|
- serializedVersion: 3
|
||||||
buildTarget: WebGL
|
buildTarget: Android
|
||||||
maxTextureSize: 2048
|
maxTextureSize: 2048
|
||||||
resizeAlgorithm: 0
|
resizeAlgorithm: 0
|
||||||
textureFormat: -1
|
textureFormat: -1
|
||||||
|
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 196 KiB After Width: | Height: | Size: 150 KiB |
|
|
@ -1,5 +1,5 @@
|
||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: e16e4557ab120734db2ebf120e075ee6
|
guid: bd4cb343cc137574a9b204474df45a3c
|
||||||
TextureImporter:
|
TextureImporter:
|
||||||
internalIDToNameTable: []
|
internalIDToNameTable: []
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
|
|
@ -94,7 +94,7 @@ TextureImporter:
|
||||||
androidETC2FallbackOverride: 0
|
androidETC2FallbackOverride: 0
|
||||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||||
- serializedVersion: 3
|
- serializedVersion: 3
|
||||||
buildTarget: Android
|
buildTarget: WebGL
|
||||||
maxTextureSize: 2048
|
maxTextureSize: 2048
|
||||||
resizeAlgorithm: 0
|
resizeAlgorithm: 0
|
||||||
textureFormat: -1
|
textureFormat: -1
|
||||||
|
|
@ -107,7 +107,7 @@ TextureImporter:
|
||||||
androidETC2FallbackOverride: 0
|
androidETC2FallbackOverride: 0
|
||||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||||
- serializedVersion: 3
|
- serializedVersion: 3
|
||||||
buildTarget: WebGL
|
buildTarget: Android
|
||||||
maxTextureSize: 2048
|
maxTextureSize: 2048
|
||||||
resizeAlgorithm: 0
|
resizeAlgorithm: 0
|
||||||
textureFormat: -1
|
textureFormat: -1
|
||||||
|
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 194 KiB |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue