From 78849e0cc536e28d65d6b6b08f227d89dfcdaac0 Mon Sep 17 00:00:00 2001 From: zzdxxz <2079238449@qq.com> Date: Wed, 3 Sep 2025 19:59:22 +0800 Subject: [PATCH] =?UTF-8?q?(client)=20feat:=E6=B7=BB=E5=8A=A0=E6=B8=B8?= =?UTF-8?q?=E7=8E=A9=E6=97=B6UI=E7=9B=B8=E5=85=B3=E8=B4=B4=E5=9B=BE?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A03d=E6=A8=A1=E5=9E=8B=E5=9C=BA?= =?UTF-8?q?=E6=99=AF=E6=8C=89=E9=92=AE=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=A4=9A?= =?UTF-8?q?=E7=BA=A7=E8=B0=83=E8=89=B2=E8=BF=9B=E5=BA=A6=E6=9D=A1=EF=BC=8C?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0SVG=E5=9B=BE=E7=89=87=E5=8C=85=EF=BC=8C?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=8B=E4=BB=B6=E5=AE=9A=E4=B9=89=E4=BB=A5?= =?UTF-8?q?=E5=8F=8A=E7=AE=A1=E7=90=86=E5=99=A8=EF=BC=8C=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E9=9F=B3=E9=A2=91=E7=AE=A1=E7=90=86=E5=99=A8=EF=BC=8C=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E9=83=A8=E5=88=86=E6=80=AA=E7=89=A9=EF=BC=8C=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E9=80=9A=E4=BF=A1=E5=8D=8F=E8=AE=AE=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=EF=BC=9Bfix:=E4=BF=AE=E5=A4=8D=E7=BB=B4=E5=BA=A6=E5=88=87?= =?UTF-8?q?=E6=8D=A2=E9=94=99=E8=AF=AF=EF=BC=8C=E4=BF=AE=E5=A4=8DLogUI?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E4=B8=8D=E6=AD=A3=E7=A1=AE=20(#55)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: m0_75251201 Reviewed-on: http://47.107.252.169:3000/Roguelite-Game-Developing-Team/Gen_Hack-and-Slash-Roguelite/pulls/55 --- Client/Assets/Resources/Audio.meta | 8 + .../Assets/Resources/Default/DefaultAudio.mp3 | Bin 0 -> 49626 bytes .../Resources/Default/DefaultAudio.mp3.meta | 23 + .../Assets/Resources/Prefab/Animation.prefab | 2 +- .../Assets/Resources/Prefab/Button3D.prefab | 306 ++ .../Resources/Prefab/Button3D.prefab.meta | 7 + .../Resources/Prefab/ButtonTemplate.prefab | 8 +- .../Prefab/Entity/EntityPrefab.prefab | 63 + Client/Assets/Resources/Prefab/Image.prefab | 2 +- .../Assets/Resources/Prefab/RightMenu.prefab | 2 +- .../Resources/Prefab/TextTemplate.prefab | 8 +- .../Resources/Prefab/UI/BuffIconUI.prefab | 209 ++ .../Prefab/UI/BuffIconUI.prefab.meta | 7 + .../Assets/Resources/Prefab/UI/DevMenu.prefab | 45 +- .../Assets/Resources/Prefab/UI/Pause.prefab | 2 +- .../Resources/Prefab/UI/UIAnimator.prefab | 93 + .../Prefab/UI/UIAnimator.prefab.meta | 7 + Client/Assets/Resources/Texture.meta | 8 + Client/Assets/Resources/Texture/Bullet.meta | 8 + .../Texture/Bullet/GenericBullet.png | Bin 0 -> 21899 bytes .../Texture/Bullet/GenericBullet.png.meta | 117 + Client/Assets/Resources/Texture/Monster.meta | 8 + .../Resources/Texture/Monster/机械.meta | 8 + .../Texture/Monster/机械/A怪物1.png | Bin 0 -> 19377 bytes .../Texture/Monster/机械/A怪物1.png.meta | 114 + .../Texture/Monster/机械/A怪物2.png | Bin 0 -> 19375 bytes .../Texture/Monster/机械/A怪物2.png.meta | 114 + .../Texture/Monster/机械/B怪物1.png | Bin 0 -> 93513 bytes .../Texture/Monster/机械/B怪物1.png.meta | 114 + .../Texture/Monster/机械/B怪物2.png | Bin 0 -> 98175 bytes .../Texture/Monster/机械/B怪物2.png.meta | 114 + .../Texture/Monster/机械/C怪物1.png | Bin 0 -> 187506 bytes .../Texture/Monster/机械/C怪物1.png.meta | 114 + .../Texture/Monster/机械/C怪物2.png | Bin 0 -> 174468 bytes .../Texture/Monster/机械/C怪物2.png.meta | 114 + .../Resources/Texture/Monster/混合.meta | 8 + .../Texture/Monster/混合/D怪物1.png | Bin 0 -> 90848 bytes .../Texture/Monster/混合/D怪物1.png.meta | 114 + .../Texture/Monster/混合/D怪物2.png | Bin 0 -> 97641 bytes .../Texture/Monster/混合/D怪物2.png.meta | 114 + .../Texture/Monster/混合/E怪物1.png | Bin 0 -> 95350 bytes .../Texture/Monster/混合/E怪物1.png.meta | 114 + .../Texture/Monster/混合/E怪物2.png | Bin 0 -> 95103 bytes .../Texture/Monster/混合/E怪物2.png.meta | 114 + .../Texture/Monster/混合/F怪物1.png | Bin 0 -> 157119 bytes .../Texture/Monster/混合/F怪物1.png.meta | 114 + .../Texture/Monster/混合/F怪物2.png | Bin 0 -> 157610 bytes .../Texture/Monster/混合/F怪物2.png.meta | 114 + .../Resources/Texture/Monster/生物.meta | 8 + .../Texture/Monster/生物/全息1.png | Bin 0 -> 1387 bytes .../Texture/Monster/生物/全息1.png.meta | 114 + .../Texture/Monster/生物/全息2.png | Bin 0 -> 1385 bytes .../Texture/Monster/生物/全息2.png.meta | 114 + .../Resources/Texture/Monster/生物/蛇1.png | Bin 0 -> 660 bytes .../Texture/Monster/生物/蛇1.png.meta | 114 + .../Resources/Texture/Monster/生物/蛇2.png | Bin 0 -> 587 bytes .../Texture/Monster/生物/蛇2.png.meta | 114 + .../Resources/Texture/Monster/生物/蛇3.png | Bin 0 -> 660 bytes .../Texture/Monster/生物/蛇3.png.meta | 114 + .../Texture/Monster/生物/面具1.png | Bin 0 -> 454 bytes .../Texture/Monster/生物/面具1.png.meta | 114 + .../Texture/Monster/生物/面具2.png | Bin 0 -> 481 bytes .../Texture/Monster/生物/面具2.png.meta | 114 + .../Texture/Monster/生物/面具3.png | Bin 0 -> 477 bytes .../Texture/Monster/生物/面具3.png.meta | 114 + .../Texture/Monster/生物/鼠鼠.png | Bin 0 -> 495 bytes .../Texture/Monster/生物/鼠鼠.png.meta | 114 + Client/Assets/Resources/UI.meta | 8 + Client/Assets/Resources/UI/v1.png | Bin 0 -> 145991 bytes Client/Assets/Resources/UI/v1.png.meta | 117 + Client/Assets/Resources/UI/其余杂项.meta | 8 + .../UI/其余杂项/小地图背景.svg | 602 ++++ .../UI/其余杂项/小地图背景.svg.meta | 55 + .../UI/其余杂项/局内金钱.svg | 335 +++ .../UI/其余杂项/局内金钱.svg.meta | 55 + .../非当前层级-行为示意栏.svg | 338 +++ .../非当前层级-行为示意栏.svg.meta | 55 + .../Resources/UI/增减益状态栏UI.meta | 8 + .../当前层级减益状态栏.svg | 334 +++ .../当前层级减益状态栏.svg.meta | 55 + .../当前层级增益状态栏.svg | 244 ++ .../当前层级增益状态栏.svg.meta | 55 + .../非当前层级减益状态栏.svg | 334 +++ .../非当前层级减益状态栏.svg.meta | 55 + .../非当前层级增益状态栏.svg | 334 +++ .../非当前层级增益状态栏.svg.meta | 55 + Client/Assets/Resources/UI/武器栏UI.meta | 8 + .../UI/武器栏UI/当前武器栏.svg | 338 +++ .../UI/武器栏UI/当前武器栏.svg.meta | 55 + .../UI/武器栏UI/非当前武器栏.svg | 338 +++ .../武器栏UI/非当前武器栏.svg.meta | 55 + .../Assets/Resources/UI/血条相关UI.meta | 8 + .../UI/血条相关UI/基地血条.svg | 16 + .../UI/血条相关UI/基地血条.svg.meta | 55 + .../UI/血条相关UI/基地血条底.svg | 13 + .../血条相关UI/基地血条底.svg.meta | 55 + .../UI/血条相关UI/当前层级血条.svg | 26 + .../当前层级血条.svg.meta | 55 + .../Resources/UI/血条相关UI/血条底.svg | 18 + .../UI/血条相关UI/血条底.svg.meta | 55 + .../血条相关UI/非当前层级血条.svg | 26 + .../非当前层级血条.svg.meta | 55 + .../非当前层级血条底.svg | 18 + .../非当前层级血条底.svg.meta | 55 + .../RunTimeResource/MiniMap.renderTexture | 4 +- Client/Assets/Scenes/Game.unity | 2508 +++++++++++++++-- Client/Assets/Scenes/Initiate.unity | 1040 ++++--- Client/Assets/Scripts/Base/Clock.cs | 223 +- Client/Assets/Scripts/Base/Launcher.cs | 224 +- Client/Assets/Scripts/Base/Setting.cs | 4 +- Client/Assets/Scripts/Base/UIInputControl.cs | 202 +- .../Scripts/CameraControl/CameraControl.cs | 295 +- .../Assets/Scripts/Configs/ConfigProcessor.cs | 261 +- Client/Assets/Scripts/Data/AttributesDef.cs | 4 +- .../Scripts/Data/AttributesOffsetDef.cs | 65 + .../Scripts/Data/AttributesOffsetDef.cs.meta | 3 + Client/Assets/Scripts/Data/AudioDef.cs | 7 + Client/Assets/Scripts/Data/AudioDef.cs.meta | 3 + Client/Assets/Scripts/Data/DefinePack.cs | 2 + Client/Assets/Scripts/Data/DrawingOrderDef.cs | 2 +- Client/Assets/Scripts/Data/EntityDef.cs | 5 +- Client/Assets/Scripts/Data/EventDef.cs | 17 +- Client/Assets/Scripts/Data/HediffCompDef.cs | 17 + .../Assets/Scripts/Data/HediffCompDef.cs.meta | 3 + Client/Assets/Scripts/Data/HediffDef.cs | 13 + Client/Assets/Scripts/Data/HediffDef.cs.meta | 3 + Client/Assets/Scripts/Data/HediffStageDef.cs | 8 + .../Scripts/Data/HediffStageDef.cs.meta | 3 + Client/Assets/Scripts/Data/ImageDef.cs | 2 - Client/Assets/Scripts/Data/MessageDef.cs | 47 + Client/Assets/Scripts/Data/MessageDef.cs.meta | 3 + Client/Assets/Scripts/Data/SkillTreeDef.cs | 11 + .../Assets/Scripts/Data/SkillTreeDef.cs.meta | 3 + Client/Assets/Scripts/Data/StoryDef.cs | 14 + Client/Assets/Scripts/Data/StoryDef.cs.meta | 3 + Client/Assets/Scripts/Entity/Attributes.cs | 111 +- Client/Assets/Scripts/Entity/Character.cs | 26 +- Client/Assets/Scripts/Entity/Entity.cs | 61 +- Client/Assets/Scripts/Entity/Hediff.cs | 276 ++ Client/Assets/Scripts/Entity/Hediff.cs.meta | 3 + Client/Assets/Scripts/Entity/HediffComp.cs | 47 + .../Assets/Scripts/Entity/HediffComp.cs.meta | 3 + Client/Assets/Scripts/Entity/LivingEntity.cs | 162 ++ .../Scripts/Entity/LivingEntity.cs.meta | 3 + Client/Assets/Scripts/Entity/Monster.cs | 2 +- Client/Assets/Scripts/EventWorkClass.meta | 3 + .../EventWorkClass/EventWorkClassBase.cs | 12 + .../EventWorkClass/EventWorkClassBase.cs.meta | 3 + .../EventWorkClass/Event_EntityGenerater.cs | 305 ++ .../Event_EntityGenerater.cs.meta | 3 + .../EventWorkClass/Event_GiveHediff.cs | 273 ++ .../EventWorkClass/Event_GiveHediff.cs.meta | 3 + Client/Assets/Scripts/Item/ItemBase.cs | 10 - Client/Assets/Scripts/Item/ItemBase.cs.meta | 3 - Client/Assets/Scripts/Item/ItemResource.cs | 7 - Client/Assets/Scripts/Logging/LogCapturer.cs | 51 +- .../Assets/Scripts/Managers/AudioManager.cs | 232 ++ .../Scripts/Managers/AudioManager.cs.meta | 3 + .../Assets/Scripts/Managers/DefineManager.cs | 63 +- .../Assets/Scripts/Managers/EntityManage.cs | 23 +- .../Assets/Scripts/Managers/EventManager.cs | 299 +- .../Assets/Scripts/Managers/ILaunchManager.cs | 1 + .../Scripts/Managers/PackagesImageManager.cs | 138 +- Client/Assets/Scripts/Managers/SaveManager.cs | 10 + .../Scripts/Managers/SaveManager.cs.meta | 3 + Client/Assets/Scripts/Map/Dimension.cs | 28 +- Client/Assets/Scripts/Map/MapGenerator.cs | 14 +- Client/Assets/Scripts/Prefab/BaseAnimator.cs | 138 + .../Scripts/Prefab/BaseAnimator.cs.meta | 3 + Client/Assets/Scripts/Prefab/BuffIconUI.cs | 10 + .../Assets/Scripts/Prefab/BuffIconUI.cs.meta | 3 + .../Assets/Scripts/Prefab/SpriteAnimator.cs | 108 +- .../Assets/Scripts/Prefab/UIImageAnimator.cs | 38 + .../Scripts/Prefab/UIImageAnimator.cs.meta | 3 + Client/Assets/Scripts/Program.cs | 5 + Client/Assets/Scripts/UI/AttackModeUI.cs | 16 + Client/Assets/Scripts/UI/AttackModeUI.cs.meta | 3 + Client/Assets/Scripts/UI/BarUI.cs | 55 +- Client/Assets/Scripts/UI/BuffIconListUI.cs | 20 + .../Assets/Scripts/UI/BuffIconListUI.cs.meta | 3 + Client/Assets/Scripts/UI/Button3D.cs | 142 + Client/Assets/Scripts/UI/Button3D.cs.meta | 2 + Client/Assets/Scripts/UI/CoinCountUI.cs | 16 + Client/Assets/Scripts/UI/CoinCountUI.cs.meta | 3 + Client/Assets/Scripts/UI/DevMenuUI.cs | 7 +- Client/Assets/Scripts/UI/EquipmentUI.cs | 276 +- Client/Assets/Scripts/UI/FullScreenUI.cs | 21 + Client/Assets/Scripts/UI/FullScreenUI.cs.meta | 2 + Client/Assets/Scripts/UI/ItemUI.cs | 85 +- Client/Assets/Scripts/UI/LogUI.cs | 97 +- Client/Assets/Scripts/UI/PlayerStateUI.cs | 59 +- Client/Assets/Scripts/UI/SettingUI.cs | 3 +- ...niversalRenderPipelineGlobalSettings.asset | 5 + Client/Assets/Shader.meta | 8 + .../Assets/Shader/OutlineShader.shadergraph | 910 ++++++ .../Shader/OutlineShader.shadergraph.meta | 10 + .../Shader/Shader Graphs_OutlineShader.mat | 60 + .../Shader Graphs_OutlineShader.mat.meta | 8 + .../Core/Define/Event/GenerateEventDef.xml | 16 + Client/Data/Core/Define/Event/Story.xml | 3 + Client/Data/Core/Define/Item/Weapon.xml | 284 ++ Client/Data/Core/Define/Pawn/Monster.xml | 827 +++++- .../Data/Core/Define/Pawn/MonsterTextures.xml | 136 + Client/Packages/manifest.json | 1 + Client/Packages/packages-lock.json | 51 +- Client/ProjectSettings/ProjectSettings.asset | 2 +- .../ProjectSettings/ShaderGraphSettings.asset | 1 - Tools/ProtoBuf/proto/message.proto | 257 ++ 208 files changed, 16296 insertions(+), 2228 deletions(-) create mode 100644 Client/Assets/Resources/Audio.meta create mode 100644 Client/Assets/Resources/Default/DefaultAudio.mp3 create mode 100644 Client/Assets/Resources/Default/DefaultAudio.mp3.meta create mode 100644 Client/Assets/Resources/Prefab/Button3D.prefab create mode 100644 Client/Assets/Resources/Prefab/Button3D.prefab.meta create mode 100644 Client/Assets/Resources/Prefab/UI/BuffIconUI.prefab create mode 100644 Client/Assets/Resources/Prefab/UI/BuffIconUI.prefab.meta create mode 100644 Client/Assets/Resources/Prefab/UI/UIAnimator.prefab create mode 100644 Client/Assets/Resources/Prefab/UI/UIAnimator.prefab.meta create mode 100644 Client/Assets/Resources/Texture.meta create mode 100644 Client/Assets/Resources/Texture/Bullet.meta create mode 100644 Client/Assets/Resources/Texture/Bullet/GenericBullet.png create mode 100644 Client/Assets/Resources/Texture/Bullet/GenericBullet.png.meta create mode 100644 Client/Assets/Resources/Texture/Monster.meta create mode 100644 Client/Assets/Resources/Texture/Monster/机械.meta create mode 100644 Client/Assets/Resources/Texture/Monster/机械/A怪物1.png create mode 100644 Client/Assets/Resources/Texture/Monster/机械/A怪物1.png.meta create mode 100644 Client/Assets/Resources/Texture/Monster/机械/A怪物2.png create mode 100644 Client/Assets/Resources/Texture/Monster/机械/A怪物2.png.meta create mode 100644 Client/Assets/Resources/Texture/Monster/机械/B怪物1.png create mode 100644 Client/Assets/Resources/Texture/Monster/机械/B怪物1.png.meta create mode 100644 Client/Assets/Resources/Texture/Monster/机械/B怪物2.png create mode 100644 Client/Assets/Resources/Texture/Monster/机械/B怪物2.png.meta create mode 100644 Client/Assets/Resources/Texture/Monster/机械/C怪物1.png create mode 100644 Client/Assets/Resources/Texture/Monster/机械/C怪物1.png.meta create mode 100644 Client/Assets/Resources/Texture/Monster/机械/C怪物2.png create mode 100644 Client/Assets/Resources/Texture/Monster/机械/C怪物2.png.meta create mode 100644 Client/Assets/Resources/Texture/Monster/混合.meta create mode 100644 Client/Assets/Resources/Texture/Monster/混合/D怪物1.png create mode 100644 Client/Assets/Resources/Texture/Monster/混合/D怪物1.png.meta create mode 100644 Client/Assets/Resources/Texture/Monster/混合/D怪物2.png create mode 100644 Client/Assets/Resources/Texture/Monster/混合/D怪物2.png.meta create mode 100644 Client/Assets/Resources/Texture/Monster/混合/E怪物1.png create mode 100644 Client/Assets/Resources/Texture/Monster/混合/E怪物1.png.meta create mode 100644 Client/Assets/Resources/Texture/Monster/混合/E怪物2.png create mode 100644 Client/Assets/Resources/Texture/Monster/混合/E怪物2.png.meta create mode 100644 Client/Assets/Resources/Texture/Monster/混合/F怪物1.png create mode 100644 Client/Assets/Resources/Texture/Monster/混合/F怪物1.png.meta create mode 100644 Client/Assets/Resources/Texture/Monster/混合/F怪物2.png create mode 100644 Client/Assets/Resources/Texture/Monster/混合/F怪物2.png.meta create mode 100644 Client/Assets/Resources/Texture/Monster/生物.meta create mode 100644 Client/Assets/Resources/Texture/Monster/生物/全息1.png create mode 100644 Client/Assets/Resources/Texture/Monster/生物/全息1.png.meta create mode 100644 Client/Assets/Resources/Texture/Monster/生物/全息2.png create mode 100644 Client/Assets/Resources/Texture/Monster/生物/全息2.png.meta create mode 100644 Client/Assets/Resources/Texture/Monster/生物/蛇1.png create mode 100644 Client/Assets/Resources/Texture/Monster/生物/蛇1.png.meta create mode 100644 Client/Assets/Resources/Texture/Monster/生物/蛇2.png create mode 100644 Client/Assets/Resources/Texture/Monster/生物/蛇2.png.meta create mode 100644 Client/Assets/Resources/Texture/Monster/生物/蛇3.png create mode 100644 Client/Assets/Resources/Texture/Monster/生物/蛇3.png.meta create mode 100644 Client/Assets/Resources/Texture/Monster/生物/面具1.png create mode 100644 Client/Assets/Resources/Texture/Monster/生物/面具1.png.meta create mode 100644 Client/Assets/Resources/Texture/Monster/生物/面具2.png create mode 100644 Client/Assets/Resources/Texture/Monster/生物/面具2.png.meta create mode 100644 Client/Assets/Resources/Texture/Monster/生物/面具3.png create mode 100644 Client/Assets/Resources/Texture/Monster/生物/面具3.png.meta create mode 100644 Client/Assets/Resources/Texture/Monster/生物/鼠鼠.png create mode 100644 Client/Assets/Resources/Texture/Monster/生物/鼠鼠.png.meta create mode 100644 Client/Assets/Resources/UI.meta create mode 100644 Client/Assets/Resources/UI/v1.png create mode 100644 Client/Assets/Resources/UI/v1.png.meta create mode 100644 Client/Assets/Resources/UI/其余杂项.meta create mode 100644 Client/Assets/Resources/UI/其余杂项/小地图背景.svg create mode 100644 Client/Assets/Resources/UI/其余杂项/小地图背景.svg.meta create mode 100644 Client/Assets/Resources/UI/其余杂项/局内金钱.svg create mode 100644 Client/Assets/Resources/UI/其余杂项/局内金钱.svg.meta create mode 100644 Client/Assets/Resources/UI/其余杂项/非当前层级-行为示意栏.svg create mode 100644 Client/Assets/Resources/UI/其余杂项/非当前层级-行为示意栏.svg.meta create mode 100644 Client/Assets/Resources/UI/增减益状态栏UI.meta create mode 100644 Client/Assets/Resources/UI/增减益状态栏UI/当前层级减益状态栏.svg create mode 100644 Client/Assets/Resources/UI/增减益状态栏UI/当前层级减益状态栏.svg.meta create mode 100644 Client/Assets/Resources/UI/增减益状态栏UI/当前层级增益状态栏.svg create mode 100644 Client/Assets/Resources/UI/增减益状态栏UI/当前层级增益状态栏.svg.meta create mode 100644 Client/Assets/Resources/UI/增减益状态栏UI/非当前层级减益状态栏.svg create mode 100644 Client/Assets/Resources/UI/增减益状态栏UI/非当前层级减益状态栏.svg.meta create mode 100644 Client/Assets/Resources/UI/增减益状态栏UI/非当前层级增益状态栏.svg create mode 100644 Client/Assets/Resources/UI/增减益状态栏UI/非当前层级增益状态栏.svg.meta create mode 100644 Client/Assets/Resources/UI/武器栏UI.meta create mode 100644 Client/Assets/Resources/UI/武器栏UI/当前武器栏.svg create mode 100644 Client/Assets/Resources/UI/武器栏UI/当前武器栏.svg.meta create mode 100644 Client/Assets/Resources/UI/武器栏UI/非当前武器栏.svg create mode 100644 Client/Assets/Resources/UI/武器栏UI/非当前武器栏.svg.meta create mode 100644 Client/Assets/Resources/UI/血条相关UI.meta create mode 100644 Client/Assets/Resources/UI/血条相关UI/基地血条.svg create mode 100644 Client/Assets/Resources/UI/血条相关UI/基地血条.svg.meta create mode 100644 Client/Assets/Resources/UI/血条相关UI/基地血条底.svg create mode 100644 Client/Assets/Resources/UI/血条相关UI/基地血条底.svg.meta create mode 100644 Client/Assets/Resources/UI/血条相关UI/当前层级血条.svg create mode 100644 Client/Assets/Resources/UI/血条相关UI/当前层级血条.svg.meta create mode 100644 Client/Assets/Resources/UI/血条相关UI/血条底.svg create mode 100644 Client/Assets/Resources/UI/血条相关UI/血条底.svg.meta create mode 100644 Client/Assets/Resources/UI/血条相关UI/非当前层级血条.svg create mode 100644 Client/Assets/Resources/UI/血条相关UI/非当前层级血条.svg.meta create mode 100644 Client/Assets/Resources/UI/血条相关UI/非当前层级血条底.svg create mode 100644 Client/Assets/Resources/UI/血条相关UI/非当前层级血条底.svg.meta create mode 100644 Client/Assets/Scripts/Data/AttributesOffsetDef.cs create mode 100644 Client/Assets/Scripts/Data/AttributesOffsetDef.cs.meta create mode 100644 Client/Assets/Scripts/Data/AudioDef.cs create mode 100644 Client/Assets/Scripts/Data/AudioDef.cs.meta create mode 100644 Client/Assets/Scripts/Data/HediffCompDef.cs create mode 100644 Client/Assets/Scripts/Data/HediffCompDef.cs.meta create mode 100644 Client/Assets/Scripts/Data/HediffDef.cs create mode 100644 Client/Assets/Scripts/Data/HediffDef.cs.meta create mode 100644 Client/Assets/Scripts/Data/HediffStageDef.cs create mode 100644 Client/Assets/Scripts/Data/HediffStageDef.cs.meta create mode 100644 Client/Assets/Scripts/Data/MessageDef.cs create mode 100644 Client/Assets/Scripts/Data/MessageDef.cs.meta create mode 100644 Client/Assets/Scripts/Data/SkillTreeDef.cs create mode 100644 Client/Assets/Scripts/Data/SkillTreeDef.cs.meta create mode 100644 Client/Assets/Scripts/Data/StoryDef.cs create mode 100644 Client/Assets/Scripts/Data/StoryDef.cs.meta create mode 100644 Client/Assets/Scripts/Entity/Hediff.cs create mode 100644 Client/Assets/Scripts/Entity/Hediff.cs.meta create mode 100644 Client/Assets/Scripts/Entity/HediffComp.cs create mode 100644 Client/Assets/Scripts/Entity/HediffComp.cs.meta create mode 100644 Client/Assets/Scripts/Entity/LivingEntity.cs create mode 100644 Client/Assets/Scripts/Entity/LivingEntity.cs.meta create mode 100644 Client/Assets/Scripts/EventWorkClass.meta create mode 100644 Client/Assets/Scripts/EventWorkClass/EventWorkClassBase.cs create mode 100644 Client/Assets/Scripts/EventWorkClass/EventWorkClassBase.cs.meta create mode 100644 Client/Assets/Scripts/EventWorkClass/Event_EntityGenerater.cs create mode 100644 Client/Assets/Scripts/EventWorkClass/Event_EntityGenerater.cs.meta create mode 100644 Client/Assets/Scripts/EventWorkClass/Event_GiveHediff.cs create mode 100644 Client/Assets/Scripts/EventWorkClass/Event_GiveHediff.cs.meta delete mode 100644 Client/Assets/Scripts/Item/ItemBase.cs delete mode 100644 Client/Assets/Scripts/Item/ItemBase.cs.meta create mode 100644 Client/Assets/Scripts/Managers/AudioManager.cs create mode 100644 Client/Assets/Scripts/Managers/AudioManager.cs.meta create mode 100644 Client/Assets/Scripts/Managers/SaveManager.cs create mode 100644 Client/Assets/Scripts/Managers/SaveManager.cs.meta create mode 100644 Client/Assets/Scripts/Prefab/BaseAnimator.cs create mode 100644 Client/Assets/Scripts/Prefab/BaseAnimator.cs.meta create mode 100644 Client/Assets/Scripts/Prefab/BuffIconUI.cs create mode 100644 Client/Assets/Scripts/Prefab/BuffIconUI.cs.meta create mode 100644 Client/Assets/Scripts/Prefab/UIImageAnimator.cs create mode 100644 Client/Assets/Scripts/Prefab/UIImageAnimator.cs.meta create mode 100644 Client/Assets/Scripts/UI/AttackModeUI.cs create mode 100644 Client/Assets/Scripts/UI/AttackModeUI.cs.meta create mode 100644 Client/Assets/Scripts/UI/BuffIconListUI.cs create mode 100644 Client/Assets/Scripts/UI/BuffIconListUI.cs.meta create mode 100644 Client/Assets/Scripts/UI/Button3D.cs create mode 100644 Client/Assets/Scripts/UI/Button3D.cs.meta create mode 100644 Client/Assets/Scripts/UI/CoinCountUI.cs create mode 100644 Client/Assets/Scripts/UI/CoinCountUI.cs.meta create mode 100644 Client/Assets/Scripts/UI/FullScreenUI.cs create mode 100644 Client/Assets/Scripts/UI/FullScreenUI.cs.meta create mode 100644 Client/Assets/Shader.meta create mode 100644 Client/Assets/Shader/OutlineShader.shadergraph create mode 100644 Client/Assets/Shader/OutlineShader.shadergraph.meta create mode 100644 Client/Assets/Shader/Shader Graphs_OutlineShader.mat create mode 100644 Client/Assets/Shader/Shader Graphs_OutlineShader.mat.meta create mode 100644 Client/Data/Core/Define/Event/GenerateEventDef.xml create mode 100644 Client/Data/Core/Define/Event/Story.xml create mode 100644 Client/Data/Core/Define/Pawn/MonsterTextures.xml diff --git a/Client/Assets/Resources/Audio.meta b/Client/Assets/Resources/Audio.meta new file mode 100644 index 0000000..dcf8efc --- /dev/null +++ b/Client/Assets/Resources/Audio.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 342041e4bfc22ae4ba9199554f7ab489 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Resources/Default/DefaultAudio.mp3 b/Client/Assets/Resources/Default/DefaultAudio.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..a8351b25f1b05fac5646d50032a5a71d68c1b646 GIT binary patch literal 49626 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 literal 0 HcmV?d00001 diff --git a/Client/Assets/Resources/Default/DefaultAudio.mp3.meta b/Client/Assets/Resources/Default/DefaultAudio.mp3.meta new file mode 100644 index 0000000..e855d0e --- /dev/null +++ b/Client/Assets/Resources/Default/DefaultAudio.mp3.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 79c8bcaaa43bb0a48ab60558de473015 +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Resources/Prefab/Animation.prefab b/Client/Assets/Resources/Prefab/Animation.prefab index 5ee3c0a..0f51b4e 100644 --- a/Client/Assets/Resources/Prefab/Animation.prefab +++ b/Client/Assets/Resources/Prefab/Animation.prefab @@ -27,7 +27,7 @@ Transform: m_GameObject: {fileID: 5021031438404678310} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -6.6943, y: -0.3652, z: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] diff --git a/Client/Assets/Resources/Prefab/Button3D.prefab b/Client/Assets/Resources/Prefab/Button3D.prefab new file mode 100644 index 0000000..4258aff --- /dev/null +++ b/Client/Assets/Resources/Prefab/Button3D.prefab @@ -0,0 +1,306 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2412502657045938467 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 709533242955877997} + - component: {fileID: 5821092905185152964} + - component: {fileID: 3254240173477692892} + - component: {fileID: 2649725512596744611} + - component: {fileID: 8989378577537570065} + m_Layer: 0 + m_Name: Button3D + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &709533242955877997 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2412502657045938467} + 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: 7795760929196660143} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5821092905185152964 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2412502657045938467} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3254240173477692892 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2412502657045938467} + 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_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + 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!65 &2649725512596744611 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2412502657045938467} + 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: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &8989378577537570065 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2412502657045938467} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0d5e1709fa6d5c54f93ac068f067e20b, type: 3} + m_Name: + m_EditorClassIdentifier: + OnClick: + m_PersistentCalls: + m_Calls: [] + renderer: {fileID: 3254240173477692892} + outlineMaterial: {fileID: 2100000, guid: 7b32baf03e8f4bd448cf625f4299f5ce, type: 2} + text: {fileID: 3761108353443528858} +--- !u!1 &3805996714208757134 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7795760929196660143} + - component: {fileID: 5919324744879230529} + - component: {fileID: 3761108353443528858} + m_Layer: 0 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7795760929196660143 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3805996714208757134} + 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: 709533242955877997} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 2} + m_SizeDelta: {x: 5, y: 2} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!23 &5919324744879230529 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3805996714208757134} + 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: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -1361428157011412921, guid: 317edb274e9c5144a9916937bdbf7716, 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!114 &3761108353443528858 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3805996714208757134} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9541d86e2fd84c1d9990edf0852d74ab, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Sample text + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 317edb274e9c5144a9916937bdbf7716, type: 2} + m_sharedMaterial: {fileID: -1361428157011412921, guid: 317edb274e9c5144a9916937bdbf7716, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 5 + m_fontSizeBase: 5 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 1024 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 0 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + _SortingLayer: 0 + _SortingLayerID: 0 + _SortingOrder: 0 + m_hasFontAssetChanged: 0 + m_renderer: {fileID: 5919324744879230529} + m_maskType: 0 diff --git a/Client/Assets/Resources/Prefab/Button3D.prefab.meta b/Client/Assets/Resources/Prefab/Button3D.prefab.meta new file mode 100644 index 0000000..1e75d55 --- /dev/null +++ b/Client/Assets/Resources/Prefab/Button3D.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 04bb56c29e3de4248a236f83c889ca7d +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Resources/Prefab/ButtonTemplate.prefab b/Client/Assets/Resources/Prefab/ButtonTemplate.prefab index eff2288..30e364f 100644 --- a/Client/Assets/Resources/Prefab/ButtonTemplate.prefab +++ b/Client/Assets/Resources/Prefab/ButtonTemplate.prefab @@ -37,8 +37,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -160.92151, y: -93.26492} - m_SizeDelta: {x: 160, y: 30} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 200, y: 40} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &6659858081700418582 CanvasRenderer: @@ -228,8 +228,8 @@ MonoBehaviour: m_faceColor: serializedVersion: 2 rgba: 4294967295 - m_fontSize: 12 - m_fontSizeBase: 12 + m_fontSize: 15 + m_fontSizeBase: 15 m_fontWeight: 400 m_enableAutoSizing: 0 m_fontSizeMin: 18 diff --git a/Client/Assets/Resources/Prefab/Entity/EntityPrefab.prefab b/Client/Assets/Resources/Prefab/Entity/EntityPrefab.prefab index ebdbb2a..60cfcdb 100644 --- a/Client/Assets/Resources/Prefab/Entity/EntityPrefab.prefab +++ b/Client/Assets/Resources/Prefab/Entity/EntityPrefab.prefab @@ -124,6 +124,7 @@ Transform: - {fileID: 5549544358816209289} - {fileID: 1697214530303839877} - {fileID: 1404278780950315184} + - {fileID: 4504455988891581487} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &3332598847335032684 @@ -364,3 +365,65 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 605f185650fe46d89a6e0d60fb8fb11c, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!1001 &5211884413447499418 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 697189026367054479} + m_Modifications: + - target: {fileID: 5021031438404678310, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3} + propertyPath: m_Name + value: WeaponTexture + objectReference: {fileID: 0} + - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3} +--- !u!4 &4504455988891581487 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 8563418329714102965, guid: ea9af70ce0f4c8b4a9de58ac63074156, type: 3} + m_PrefabInstance: {fileID: 5211884413447499418} + m_PrefabAsset: {fileID: 0} diff --git a/Client/Assets/Resources/Prefab/Image.prefab b/Client/Assets/Resources/Prefab/Image.prefab index 88bd3ef..bba42ed 100644 --- a/Client/Assets/Resources/Prefab/Image.prefab +++ b/Client/Assets/Resources/Prefab/Image.prefab @@ -27,7 +27,7 @@ Transform: m_GameObject: {fileID: 5309816858037840717} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -5.781, y: -0.39, z: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] diff --git a/Client/Assets/Resources/Prefab/RightMenu.prefab b/Client/Assets/Resources/Prefab/RightMenu.prefab index 7e343f7..534e09f 100644 --- a/Client/Assets/Resources/Prefab/RightMenu.prefab +++ b/Client/Assets/Resources/Prefab/RightMenu.prefab @@ -37,7 +37,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 342, y: -198} + m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.1, y: 0.9} --- !u!222 &6098472552964198111 diff --git a/Client/Assets/Resources/Prefab/TextTemplate.prefab b/Client/Assets/Resources/Prefab/TextTemplate.prefab index d2ebf03..110db59 100644 --- a/Client/Assets/Resources/Prefab/TextTemplate.prefab +++ b/Client/Assets/Resources/Prefab/TextTemplate.prefab @@ -35,8 +35,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -1.0921326, y: -54.256577} - m_SizeDelta: {x: 200, y: 14.01} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 200, y: 25} m_Pivot: {x: 0.5, y: 1} --- !u!222 &6803973761688315705 CanvasRenderer: @@ -93,8 +93,8 @@ MonoBehaviour: m_faceColor: serializedVersion: 2 rgba: 4294967295 - m_fontSize: 14 - m_fontSizeBase: 14 + m_fontSize: 20 + m_fontSizeBase: 20 m_fontWeight: 400 m_enableAutoSizing: 0 m_fontSizeMin: 18 diff --git a/Client/Assets/Resources/Prefab/UI/BuffIconUI.prefab b/Client/Assets/Resources/Prefab/UI/BuffIconUI.prefab new file mode 100644 index 0000000..680f73a --- /dev/null +++ b/Client/Assets/Resources/Prefab/UI/BuffIconUI.prefab @@ -0,0 +1,209 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &6060365352283784422 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3192591419784585419} + - component: {fileID: 3481945618963852047} + - component: {fileID: 9180115334091918173} + - component: {fileID: 8174970956233947585} + m_Layer: 5 + m_Name: BuffIconUI + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3192591419784585419 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6060365352283784422} + 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: 3140503542561239742} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 62.421, y: 43.9} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3481945618963852047 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6060365352283784422} + m_CullTransparentMesh: 1 +--- !u!114 &9180115334091918173 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6060365352283784422} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 3286163911610860551, guid: fb99d95e0a6d23f4e9410d6c113af2bd, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &8174970956233947585 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6060365352283784422} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 17587b13f9d4467dbff77cf9762dc8fe, type: 3} + m_Name: + m_EditorClassIdentifier: + icon: {fileID: 8897095238084646223} +--- !u!1001 &4221518541276266867 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 3192591419784585419} + m_Modifications: + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_SizeDelta.x + value: -30 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_SizeDelta.y + value: -10 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1665787281938857491, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_Name + value: UIAnimator + objectReference: {fileID: 0} + - target: {fileID: 5156899681550006548, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_PreserveAspect + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} +--- !u!224 &3140503542561239742 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + m_PrefabInstance: {fileID: 4221518541276266867} + m_PrefabAsset: {fileID: 0} +--- !u!114 &8897095238084646223 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 4750466675787535420, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + m_PrefabInstance: {fileID: 4221518541276266867} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c6f899d1c5ef450bb6f3e670fa55cffd, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Client/Assets/Resources/Prefab/UI/BuffIconUI.prefab.meta b/Client/Assets/Resources/Prefab/UI/BuffIconUI.prefab.meta new file mode 100644 index 0000000..bbd287a --- /dev/null +++ b/Client/Assets/Resources/Prefab/UI/BuffIconUI.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5ca0674a45754094baf7e91a0869238f +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Resources/Prefab/UI/DevMenu.prefab b/Client/Assets/Resources/Prefab/UI/DevMenu.prefab index e31c40e..142980e 100644 --- a/Client/Assets/Resources/Prefab/UI/DevMenu.prefab +++ b/Client/Assets/Resources/Prefab/UI/DevMenu.prefab @@ -68,10 +68,10 @@ RectTransform: m_Children: [] m_Father: {fileID: 4227482396833377269} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 800, y: 20} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -15} + m_SizeDelta: {x: 0, y: 30} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &6707957854610092783 CanvasRenderer: @@ -335,9 +335,9 @@ RectTransform: m_Father: {fileID: 4227482396833377269} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 800, y: 430} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -15} + m_SizeDelta: {x: 0, y: -30} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &6275009909671072884 CanvasRenderer: @@ -464,8 +464,8 @@ MonoBehaviour: m_ChildAlignment: 0 m_StartCorner: 0 m_StartAxis: 1 - m_CellSize: {x: 100, y: 25} - m_Spacing: {x: 7, y: 1} + m_CellSize: {x: 200, y: 50} + m_Spacing: {x: 10, y: 1} m_Constraint: 0 m_ConstraintCount: 2 --- !u!114 &753172512531292965 @@ -602,7 +602,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 4227482396833377269} - - component: {fileID: 7986066519765048852} - component: {fileID: 7904664609186573076} m_Layer: 5 m_Name: DevMenu @@ -632,32 +631,6 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &7986066519765048852 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7588369677482817409} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 0 - m_Spacing: 0 - m_ChildForceExpandWidth: 1 - m_ChildForceExpandHeight: 1 - m_ChildControlWidth: 0 - m_ChildControlHeight: 0 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 - m_ReverseArrangement: 0 --- !u!114 &7904664609186573076 MonoBehaviour: m_ObjectHideFlags: 0 diff --git a/Client/Assets/Resources/Prefab/UI/Pause.prefab b/Client/Assets/Resources/Prefab/UI/Pause.prefab index af9ef76..2f98224 100644 --- a/Client/Assets/Resources/Prefab/UI/Pause.prefab +++ b/Client/Assets/Resources/Prefab/UI/Pause.prefab @@ -152,7 +152,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!224 &6806539210387795853 RectTransform: m_ObjectHideFlags: 0 diff --git a/Client/Assets/Resources/Prefab/UI/UIAnimator.prefab b/Client/Assets/Resources/Prefab/UI/UIAnimator.prefab new file mode 100644 index 0000000..c28895f --- /dev/null +++ b/Client/Assets/Resources/Prefab/UI/UIAnimator.prefab @@ -0,0 +1,93 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1665787281938857491 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1225146130447774669} + - component: {fileID: 8697738588197658250} + - component: {fileID: 5156899681550006548} + - component: {fileID: 4750466675787535420} + m_Layer: 5 + m_Name: UIAnimator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1225146130447774669 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1665787281938857491} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -40, y: -40} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8697738588197658250 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1665787281938857491} + m_CullTransparentMesh: 1 +--- !u!114 &5156899681550006548 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1665787281938857491} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 620e16cb0aec3684db9ef80bdcc85695, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &4750466675787535420 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1665787281938857491} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c6f899d1c5ef450bb6f3e670fa55cffd, type: 3} + m_Name: + m_EditorClassIdentifier: + _sprites: [] + _fps: 2 + _staticSprite: {fileID: 21300000, guid: 620e16cb0aec3684db9ef80bdcc85695, type: 3} diff --git a/Client/Assets/Resources/Prefab/UI/UIAnimator.prefab.meta b/Client/Assets/Resources/Prefab/UI/UIAnimator.prefab.meta new file mode 100644 index 0000000..351b477 --- /dev/null +++ b/Client/Assets/Resources/Prefab/UI/UIAnimator.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e9ac5cdd8d06ee841931abb21e710490 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Resources/Texture.meta b/Client/Assets/Resources/Texture.meta new file mode 100644 index 0000000..e93695e --- /dev/null +++ b/Client/Assets/Resources/Texture.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7cfd5bc87e1de064ab07a45959f28bd7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Resources/Texture/Bullet.meta b/Client/Assets/Resources/Texture/Bullet.meta new file mode 100644 index 0000000..7a6a13d --- /dev/null +++ b/Client/Assets/Resources/Texture/Bullet.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b2cd4580a8e904f48bcbd327b9f76ff1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Resources/Texture/Bullet/GenericBullet.png b/Client/Assets/Resources/Texture/Bullet/GenericBullet.png new file mode 100644 index 0000000000000000000000000000000000000000..414671a72c7153c9ee8246c7f57d9819dcca9531 GIT binary patch literal 21899 zcmeHPYitx%6uvF!77{>g1%q0~ZNfv?o!RX!+nq2J>=xUkTMBFfgjc6C({}9c&bl-0 zZfgk(CJII#h95j6Xbd7DKr9l9f@Nb+gJLnkfCP|@(Nse%#WoF()_U*0XiHlnzZA|* z+PRN&U+124=9{x;W@Ab5D`Q4a8jTPdQ&`|wgwUj|2&JA(dlJ_awH?@oFQa?~%T$Dn zS>!Jz_)%^RLL=K`*HUe%vxpTGkC7LZGRYY9_%Jm>vvY$!UZ|2Zs!Xboy`28WiBoz? z7CHSAtCMm1@}x?+pw2HXt}Av4byb30)aTBjW(Qe3fJf4JD(G>0RW``!qvNtTPpWA> z6(!NCIQ={_A+^+5LggubiLx6RgTOEhWwRSiHj`ksmCvNijM+>xIkah(!IZ-?X4aBT z#giUS=NHS_MUMIL$#99&S8AG%rRhK*U<_m%6@LY7vfJ%6W2Vh!1Ew&jwO)-68oX*& zVg!ez3VzwA$%>aEBl2ZRwZ`f3Qe%7Y_>#kV)i|Fp$LJvMqfJJJ>?ukp3Q0O&wcj0` zToh=@EqNrbrea!ClGazLXo^~?3^8=Fx!(ksw@znrjzQPr@g%2Ewfq{qjW|OFrB+?F zK8ao=sYG7#q42;#lSX^c^YqGM;tQibGJ|;%$R7APFb^vLPi(y!+2~+nY#WExE8vj6IQDDmz zzlX;gmOXrhMEkrIdMe3AHcxRYempT=U3PR8PA6OFRW;r#NQDkgkN0epWs$WB78@hk z7(%UHE|_d}0E6pn}l zTOh0WuxjHPu~>R7o^#7oR0>#LAkxk01#+yCsE=3656ywtuz^Ym4?4_o$H-KrTnq4i zX(@T58Pt3t&h$o$gv?H*`x`=g`^Rayx4O2v56}E{jHk_mE;vV z=DC8qTdywkt}n^RU-)A4+9NNZ9`E99yTVOrRhuH+&t`6DlP(|AwKx8D)5@hpPObRi zoU}6&n?{|#Hw9n9J8w5lAf~cU3T^;% z!O|iGHx#&U5?ugzfB+s~c+hI+5Q?ln_6NqGz7M22jH$m0?ny(R&@D5FoWxVa*1J6l zxaC9VMhzw{0&<4>AKpTKIh#bIEI-m_K27ore89~eez=OvJ9=uK*(KQW4 z<3j0|_vsK?@lMAxDBLvr8aJ_JB@u?^vmFj{MQHP{YhFd@@Y&jl2<^YsqeIH_k8zKo z(v?l%s0P<2SQDZj@aqaZY!EpB*Csq{5IF$XCOm9lF#ve*_`rj%-I-`=qZ6a;&-RJqR9Lkgj!gru}_{_`SpHx_eP1bI^%Gr3mGnO0df9TWk5J?Sz1pv#4azJ1Kz%ncb5Lf`PjF=2WnSmpvY(4 zO{t-aEj`i5?#OcTZei%`s>$cmQAl@i&3k)@_}rJ;t5ysbiLx6aQE(K!2M5mM)IO=} zPVkQPViVW1E5^u^hqIdZqO?}-3sTPc>GS&H1+f-{GLO+0}$eg=>&EZl)G~nz<(3=&?{qt%A5z;WV_WH8cm)<4$`%`)9FkhwF zIm}zNrBjCaMP$dQVLl%NQ-*-CAU+6`1c504Q-Ht}fGI%#FH;D1D9q~5+ literal 0 HcmV?d00001 diff --git a/Client/Assets/Resources/Texture/Bullet/GenericBullet.png.meta b/Client/Assets/Resources/Texture/Bullet/GenericBullet.png.meta new file mode 100644 index 0000000..3736c50 --- /dev/null +++ b/Client/Assets/Resources/Texture/Bullet/GenericBullet.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 1965411d3d414c04a93d367e71b6bd52 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Resources/Texture/Monster.meta b/Client/Assets/Resources/Texture/Monster.meta new file mode 100644 index 0000000..256b314 --- /dev/null +++ b/Client/Assets/Resources/Texture/Monster.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2b58553fcee30cb4ca6925fbd1a206ba +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Resources/Texture/Monster/机械.meta b/Client/Assets/Resources/Texture/Monster/机械.meta new file mode 100644 index 0000000..e64369f --- /dev/null +++ b/Client/Assets/Resources/Texture/Monster/机械.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ce051dab221d8c74ea0c0447ae7111fd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Resources/Texture/Monster/机械/A怪物1.png b/Client/Assets/Resources/Texture/Monster/机械/A怪物1.png new file mode 100644 index 0000000000000000000000000000000000000000..6a55f3d56e961ed8460aca860706f65c46ade343 GIT binary patch literal 19377 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 I&pGM;0X++!4FCWD literal 0 HcmV?d00001 diff --git a/Client/Assets/Resources/Texture/Monster/机械/A怪物2.png.meta b/Client/Assets/Resources/Texture/Monster/机械/A怪物2.png.meta new file mode 100644 index 0000000..a237b73 --- /dev/null +++ b/Client/Assets/Resources/Texture/Monster/机械/A怪物2.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 16265f06a9accd54480e1b9ffda0e626 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 3000 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Resources/Texture/Monster/机械/B怪物1.png b/Client/Assets/Resources/Texture/Monster/机械/B怪物1.png new file mode 100644 index 0000000000000000000000000000000000000000..6e59f98929229cc7315193d7b3eb7dbfe33e99ba GIT binary patch literal 93513 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 literal 0 HcmV?d00001 diff --git a/Client/Assets/Resources/Texture/Monster/机械/B怪物1.png.meta b/Client/Assets/Resources/Texture/Monster/机械/B怪物1.png.meta new file mode 100644 index 0000000..ff07c72 --- /dev/null +++ b/Client/Assets/Resources/Texture/Monster/机械/B怪物1.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 8b96d6bed6f79e942bd010e7db5e1094 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 3000 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Resources/Texture/Monster/机械/B怪物2.png b/Client/Assets/Resources/Texture/Monster/机械/B怪物2.png new file mode 100644 index 0000000000000000000000000000000000000000..15bbb8599c46e7028adbb428583f8e7e6db8afbf GIT binary patch literal 98175 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 literal 0 HcmV?d00001 diff --git a/Client/Assets/Resources/Texture/Monster/机械/B怪物2.png.meta b/Client/Assets/Resources/Texture/Monster/机械/B怪物2.png.meta new file mode 100644 index 0000000..fa9939e --- /dev/null +++ b/Client/Assets/Resources/Texture/Monster/机械/B怪物2.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 3b021492e5c0bfe4da2478734ae44f42 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 3000 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Resources/Texture/Monster/机械/C怪物1.png b/Client/Assets/Resources/Texture/Monster/机械/C怪物1.png new file mode 100644 index 0000000000000000000000000000000000000000..3ba79ef08af875cfd598eb358fffcc2e9beefd41 GIT binary patch literal 187506 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 literal 0 HcmV?d00001 diff --git a/Client/Assets/Resources/Texture/Monster/机械/C怪物1.png.meta b/Client/Assets/Resources/Texture/Monster/机械/C怪物1.png.meta new file mode 100644 index 0000000..663db08 --- /dev/null +++ b/Client/Assets/Resources/Texture/Monster/机械/C怪物1.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 83863ce0158978d478594eef93efd4f5 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 3000 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Resources/Texture/Monster/机械/C怪物2.png b/Client/Assets/Resources/Texture/Monster/机械/C怪物2.png new file mode 100644 index 0000000000000000000000000000000000000000..52eaad26bdc1d736b0e8ba5242fc28b4629a3cfe GIT binary patch literal 174468 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 N^#jYzY4156_+Pk}cDw)p literal 0 HcmV?d00001 diff --git a/Client/Assets/Resources/Texture/Monster/机械/C怪物2.png.meta b/Client/Assets/Resources/Texture/Monster/机械/C怪物2.png.meta new file mode 100644 index 0000000..6b7cd50 --- /dev/null +++ b/Client/Assets/Resources/Texture/Monster/机械/C怪物2.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 73197ce4d70bc46478fa1c9d91bfdd97 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 3000 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Resources/Texture/Monster/混合.meta b/Client/Assets/Resources/Texture/Monster/混合.meta new file mode 100644 index 0000000..097dd71 --- /dev/null +++ b/Client/Assets/Resources/Texture/Monster/混合.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f832099c5135fef448eb0bc329b4637e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Resources/Texture/Monster/混合/D怪物1.png b/Client/Assets/Resources/Texture/Monster/混合/D怪物1.png new file mode 100644 index 0000000000000000000000000000000000000000..3d22fcfb16123074e2e983234054433f45234745 GIT binary patch literal 90848 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 literal 0 HcmV?d00001 diff --git a/Client/Assets/Resources/Texture/Monster/混合/D怪物1.png.meta b/Client/Assets/Resources/Texture/Monster/混合/D怪物1.png.meta new file mode 100644 index 0000000..2a6b2e4 --- /dev/null +++ b/Client/Assets/Resources/Texture/Monster/混合/D怪物1.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 7af0835ffb372a34eb602f207391ff7a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 3000 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Resources/Texture/Monster/混合/D怪物2.png b/Client/Assets/Resources/Texture/Monster/混合/D怪物2.png new file mode 100644 index 0000000000000000000000000000000000000000..ca33fe15ca63ba2cc88121703ae416682196e2f9 GIT binary patch literal 97641 zcmeI53tSV&zQ;F!0=`=3IgoqHet!=I1 z=?gpxcuw!Zd#)&`RZvjYCt6gF<<=Jn@kR8C7zGt8%AGuRvx~z$pISfV6#n^qbpEq! zHap*$+5d0;yR-B8oY~U`_8ZlYAc%o8rcZv4Aco5cVo<7GU$mui=7A8D*vqF!CTkiR1Yy%0H#a;bJam>oEKBqdMaz~*JXDG3tLPILtdfhw@sbpmC6d@UsgQfO ztb*$j7cJz@_X*{P%0na{#Z6ZyOWs${o-0amDe*$?JBA;02@jp)5+X~MxcGbU-Nk%9-^JJ8!_(JO?ByFX-o=aW z<;COs@jNHGd-@6ZUV;hUF6Ivx{akW%jNrY=Q_VkyazgG$DJgORkEc{BJ(S)avgBBv zr@y~HkMG6v@^VLexGU16DI%4-RPj1>gvk+1fB3qUsA^RY$+%;*nBGsmEIGmWTufT0UH#^IdJFjeXm8f8sLe!+QbhlB=V-AYMwXl?LIsXX z6vaw-a%n8rg~lidktN8I(GR1u^ERGEXsBR@RFNW*iX}593%RJw9&vHe0+GKsTH+=4 zcJ~p*p!VoHVS>Bg5^q0uiHOhl_Vn~wG9hLH_5H~*@iIfrQs0mMmER9bjze8bl<>mG zF?2XXlMqagQ=rO9Gxv!1B}ry0A+$nVnek`qPgbHaW723bXes_5_Hi2 zr@BqMDP%DzN>Q@pomfQcpEf5RI(eRs&raXes zUoQ{z-BB%%M~s1VS=uviEfxL~=!zy*s1 z1}<1EFmS z0hNx$@-kI=Cp}nvF=0@Rb=3Cy&G}(rnxB73$qYuaFe~4=z_nPuzacCv>dM8EqMD)M zr3d$K&Lh8SvCgPmesX`pR_b1E#~HYNjIA^R1O%1~2nZ||5D-`_zdg*S4G2&sTuL3X zMl`}+w&D18a)|QGs~rmhqBUQBbA0AWmpSoaf0@8L8oJ8fvqEt{aA^9^hsIR)x10

U8y#q4HL*3GqY;&iJ81<{tZaH}o(-|K59 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 literal 0 HcmV?d00001 diff --git a/Client/Assets/Resources/Texture/Monster/混合/D怪物2.png.meta b/Client/Assets/Resources/Texture/Monster/混合/D怪物2.png.meta new file mode 100644 index 0000000..ff1cd81 --- /dev/null +++ b/Client/Assets/Resources/Texture/Monster/混合/D怪物2.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: eda613128b8608842970562104c0ef8f +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 3000 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Resources/Texture/Monster/混合/E怪物1.png b/Client/Assets/Resources/Texture/Monster/混合/E怪物1.png new file mode 100644 index 0000000000000000000000000000000000000000..2dca25be237b554ca6cee1cf1a6a662990d76494 GIT binary patch literal 95350 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 Qdf{hJpFi#56t>sD0UAxd+5i9m literal 0 HcmV?d00001 diff --git a/Client/Assets/Resources/Texture/Monster/混合/E怪物1.png.meta b/Client/Assets/Resources/Texture/Monster/混合/E怪物1.png.meta new file mode 100644 index 0000000..0424898 --- /dev/null +++ b/Client/Assets/Resources/Texture/Monster/混合/E怪物1.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 51adc7b5492a9f7448a480bd425a416d +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 3000 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Resources/Texture/Monster/混合/E怪物2.png b/Client/Assets/Resources/Texture/Monster/混合/E怪物2.png new file mode 100644 index 0000000000000000000000000000000000000000..f36b02ac93b1e8c74dea156d458069c5c72b85d2 GIT binary patch literal 95103 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 av2tbC$(i4*9pl7oSh~n*VWNZQp8p3_mIrkJ literal 0 HcmV?d00001 diff --git a/Client/Assets/Resources/Texture/Monster/混合/F怪物1.png.meta b/Client/Assets/Resources/Texture/Monster/混合/F怪物1.png.meta new file mode 100644 index 0000000..3e627dc --- /dev/null +++ b/Client/Assets/Resources/Texture/Monster/混合/F怪物1.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 060a94f23bb5c634ca11ddb5a919904b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 3000 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Resources/Texture/Monster/混合/F怪物2.png b/Client/Assets/Resources/Texture/Monster/混合/F怪物2.png new file mode 100644 index 0000000000000000000000000000000000000000..a69b9975bc1245400793ff7ad7818393afd53218 GIT binary patch literal 157610 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 GyZ;YeDl$6& literal 0 HcmV?d00001 diff --git a/Client/Assets/Resources/Texture/Monster/混合/F怪物2.png.meta b/Client/Assets/Resources/Texture/Monster/混合/F怪物2.png.meta new file mode 100644 index 0000000..a186b06 --- /dev/null +++ b/Client/Assets/Resources/Texture/Monster/混合/F怪物2.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: ceb489a2d3d268f46827961d53d02e96 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 3000 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Resources/Texture/Monster/生物.meta b/Client/Assets/Resources/Texture/Monster/生物.meta new file mode 100644 index 0000000..6eaedc6 --- /dev/null +++ b/Client/Assets/Resources/Texture/Monster/生物.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 37bedb0276b92cc4ab1a3433ac3fab4d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Resources/Texture/Monster/生物/全息1.png b/Client/Assets/Resources/Texture/Monster/生物/全息1.png new file mode 100644 index 0000000000000000000000000000000000000000..a048c34fbbfd87ce9b6f8238eb80096fb08a851d GIT binary patch literal 1387 zcmV-x1(f=UP)6)1EhdNXQejREC9S99uWUz z$N?hpul_*9i>K%sNDiK&iz%*d&=@d~&dpqeF7`E?20Va;r}!$+8;LiZoeViRwnpNI zenL#@eD{o`q>f1q`cuGh#!%qz+#Z;p}e{nt5RIlp%s?ptY=lI}7yPg%nV6d#9JJ1N{PjkuHT%+) zyPa!Gnb&;w_Ko*%_jfJ1-rZH%X}ipr!9pRc$4#?yoo&`Uw#7fZ|9`bQh3|(u0T%vJ&VW zO*EE(UZ4+{5s61ngnYp&ppW-9?gSp>?1qYgwMT0!VZHJC=Q-Q_$5G+{Dc4*fU-08E z;te~28^E&&e&E)G1V~wQFUlRj^196XKn`H1+5q#XUI2`o-2ix4Wx9bb%7b+XML2In z{}i|98c+l*1a3)L^s|XN0K$DB@ow(sFMr8BSA*aK3>1r*RR;kpl^LM8;w0cjSO~ZP zIpz9(%{$hHZ3xSNJ}Hat$VM}!fYf5?2F%61%i1sJo_`A{K$wc)1w1U8bsZ=KOoTvORJQ!{E9SOG}J?g7O>0al>yQRL$akQHH(6=BhqdX=*1)*%-Ftbl7o4J(lD z`v5O((TQ-6FCY`zQm`AJQ%Wy0ZGlz-q(nh5q(CvoXsy*L z>HyLy^W5MiX5K_!Gz20E;X!;LPJ%I!2aL%nj%lljj8p=~7rfMh5Wp0#6`?IH6qspC zd$tef%yfDi+Ioqur@i-Ddwu^|d+nJG|0h$dREo1|YTsF4XWN@MF zasfpMw^2$5uA^!9Arz+ej!Py@o6aEk5LSb%Kqv}qi&cTr-0u08bMqFSbbIoD&@|Ug z&EdM{aOU(loqDh4aQA2q=XH;_=rjmQnVvv67DQM|vHmHFG7t^H4{Q)47@N8RmJI`i z2$diwQ4|Kkv1j5&{U@NzeBbhOB3kG0;0;7`cr=IGbUHmhd-E3Ex_0%>zWtYoxcQFEk^LItO9JiW^b-QFylu3 zF`z4u^UZJTt9LgAsG#R^`#ONmb4_&tDp+5=yE(vNfO$Y^+^F9Rc!8S;CPEdEm&qo0&czEN1xA7hR6u4#YEdv~ZaBSyiP22VW zUBLZ-54bWT0b&FX+Es8noce7*$2tlV7$Lv=w6%8^Kn~7RE})OFw-G1-6mZ9tGw+f; zUk+RmBY0q@6#(o04%ODb|H1k8cN>5_JKjy*lEZ-8j`LG}&oRJbgB*aI`uw#=9^3rh zt3V|%C`R!0sUXt|u$yH7aIUC){*Mda9eNfh1oCZI4vYGK!fG}ra4%2*IKDc*vu?xV zdk+E+0ZuW3k!d+uDgb~AfBX)9-335zauDbybtHbhl-^{*u2unl-9>M50JwnF3yZ`E zZqJrK+Ywj_jo^#)CasBI_u$tTV^tvaGwsG|Fqb{=$2y9#yTP*xP?0v3@hY15U+=}Q z=V#>5@axcXvZM{B5TILsd=|AO@`+<0Q)(?DQ0a-7z7hxQXFqGGdsIC<02ON!*R>o znfbr>W_D(PXFYXgY#JX-9I{SrCcnS78q>J3?-n|m*PCY<5z+*vJL#p9%`pHd4Y~L* z@=n{P9MzOe~?3&9SeqK1#7x|6QbA{`!9o1oM7mGh%o!amaKKS^!gX9Y`k# zK(0mvKs8@k-D?lH@kVQWdwvxQqJvPCxCT~M_ax)q(R^%M6$Aj*!-d$=lcX1veXIWt z`Ri_67W*Xg@wZb_=i|mMf4(_wNg(x~Tf72E5K^$}1+4hO0RUVU`*_A=yd8X!I?q*> zIS2vRLTIOe%vIyXqlye1fDuIRXr4p#yd2;V>)`?b#6oBR$UM%Nw0Km>h!AQe0AS~$ znYa!j!KxSV%_Gh@uFvp{hnv$DZqKibzlJVdR`fG57eUoUYN80heN^=VHdk53{^u`J zT->G~6hM?%egM)}@E`zU_Uhc%n`h}xLsK0$b}@MJn-8ZmH(rD`s(Jw%p7GH0?S#if zbCV0qy(^%am%|!%E}HoD_m5HLsQ~~;=4#119YQ3l`x{9-GiHCRMY6V$^%@Y(%V8~* zIgnxs(q>Mws(_gNqsYnTSYvvL`EG%kT+>ZtRYE75W2GTiika+oNiv=S)!ZMOZ~v#P uh7kanlPS=?ZV`w-HV@w|u*UR~HON0sQ9oc6$Q#uF0000HxJ)=-@?=?CxJoEsa!#1J}!)<%kya*IgTYF~-M ztcOv;IChzcU4*f~HGOERvO^|@gX06?*? zExiVS^}du_V70GA%&*;wls%pEo9{ z?Eo@c260}E)zf1lgmMVDdDwV2txF9w;SqB)^X012m|na0xv-ZtSwX(Z2~l=lQ9 z*{(-71EJSq&jHr!EK4t$qesF0K>)}~w(F^T{qyEdc1FqOCild69lr`D1puEX&+Jqi zk$7DHk{q_#p!Y512h#pAfkQw$6dRp13@L^{HZOH<{kPMqVFT9fGfK`QAsETOyMe#JPClWh9n@u z*Z0Q&00*mgN^tMyS}UTG5aVgqpX>W$9Jp3?wYj3mNa9jkdZhrJz0*%HoG451#@qte zxqWslN%feeq7}%J;2OO!AkS)}om?G~bZ`pZ`SO|Tyt%fKid-avKN9!V`1SQ5S3E)pV>-sEB&)^~%pm%d^d>W(*m_o%qUKo(Z+yXxR{BG6vi7iYOUKo(gwG9c*Uek{% zzy@1>fIo_lBEZgGT>JA*J9jxVZ$i^(pB#|@HlD}f&&GX zpyP7z~P6FaQX@2sDpGcu7P-R9J=Wmc4GmFce0Qt1di1mx!)eD)9_3F)<@$LM(_ULR~7R zpw69WhxR#G8?o>JjJHcoU8`|?9S;osM*GU=yMIyOUrG%@h9IH)(P$Km=>->&*2nFA zD8|=~2L37SZ@TwyyIt(F+-l+X#$3+an2@<%a?2W{*SgNzf4A>f1^3S^ylYF63~1rm zOlZoU-9Q&S1RjD+BMn5Yp_Se5WmQGRPeJxzdKu6{0Un|wI}F&5PO9c*!TxXz#fbH>>kNLfpO;0H$<7ot)9k{Z4@c%@!SZknGNNkSWy0;b1`d&1U|ZoE z@rTWY$4a$^q3QPFG1-ISe*j<)#sb_dQ{id@ZNOAGL=K^^r?LpGlSxEDR9J=WlrK*MF&M_563k{7j^r{FL6Mxt%^{ZQCR1c?j*o(y zLvEQSupBeE`w){{mT=4LCW}})UK+0L+n$)zydL zQmXcGeQvvB>Wl;b{HlMGo-Y?O-)C{ogB_rp@-B_Wh*bW=z9f zTM}e|3+I^d-U2E*aLdIEqlaP0GXN}G;95Hu`1Tqos|W*iPypT;-`_#y1w@nqE)+Oq z?<=bT{po~C$`pCAw%(~7!m@%Wt3&zPl|sAvJr94yfS>H8OubBcZNV-P*d@Xlqwx9M zp1GD+ja@rUd#>S9rWif0o$q^Xfo_Fq#2hvX_Z4dmZPRVSeX<9bKVe=#XaLPJ6wWqK z2MmP+o(BW73z z2K^phUO$c|bVan85L4_v+8`GpGk4Z#9R9J=Wl)p{_F&xJ~H7+~=4g?1`5)(!@5(X2)z)Zqq*qD6) zp1_&S5#nsboG_TU@dWH%7`z8ytOMMo7O&S|?*<0HOOv+g=llCt_?J}mrl#K1uJd-g z?Y>h6uC>m8{BZ8PW9du;|NinipD&i)&z?)+>f$onGp{(!m6DNGAI)ChE3Us$_mhI# zdl|fFNQ((w!xcOqq@O~8X4B(oAg0U+EUtL2ImoSh61^gqvxzns8Rmy-E z3j63iVwyR9pL>1L+^#;ux~ZgzUys#Vf2P9wurqV2uZ$Vux5DPd}R TbG`k#00000NkvXXu0mjfM3K|d literal 0 HcmV?d00001 diff --git a/Client/Assets/Resources/Texture/Monster/生物/面具3.png.meta b/Client/Assets/Resources/Texture/Monster/生物/面具3.png.meta new file mode 100644 index 0000000..a8d4f88 --- /dev/null +++ b/Client/Assets/Resources/Texture/Monster/生物/面具3.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 9467dfdc7fd629b428e736ff6efcb639 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 30 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Resources/Texture/Monster/生物/鼠鼠.png b/Client/Assets/Resources/Texture/Monster/生物/鼠鼠.png new file mode 100644 index 0000000000000000000000000000000000000000..ee1128756bbc65517345bfd8646b18db90d9e13f GIT binary patch literal 495 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

uNIj8 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 literal 0 HcmV?d00001 diff --git a/Client/Assets/Resources/UI/v1.png.meta b/Client/Assets/Resources/UI/v1.png.meta new file mode 100644 index 0000000..9e09b01 --- /dev/null +++ b/Client/Assets/Resources/UI/v1.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: c8fc712b914df11418f38f718750f99c +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Resources/UI/其余杂项.meta b/Client/Assets/Resources/UI/其余杂项.meta new file mode 100644 index 0000000..1137774 --- /dev/null +++ b/Client/Assets/Resources/UI/其余杂项.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0235e00b79d8e2b49b8bded5ab65839f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Resources/UI/其余杂项/小地图背景.svg b/Client/Assets/Resources/UI/其余杂项/小地图背景.svg new file mode 100644 index 0000000..552cf23 --- /dev/null +++ b/Client/Assets/Resources/UI/其余杂项/小地图背景.svg @@ -0,0 +1,602 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Client/Assets/Resources/UI/其余杂项/小地图背景.svg.meta b/Client/Assets/Resources/UI/其余杂项/小地图背景.svg.meta new file mode 100644 index 0000000..0bd2085 --- /dev/null +++ b/Client/Assets/Resources/UI/其余杂项/小地图背景.svg.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 899963cf0e2bdb447a6ffc59bf5dadeb +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: a57477913897c46af95d590f580878bd, type: 3} + svgType: 1 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 256 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 1 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteRect: + name: + originalName: + pivot: {x: 0, y: 0} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + customData: + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + spriteID: a321414884999e24a994cf0e3bb39506 + PhysicsOutlines: [] diff --git a/Client/Assets/Resources/UI/其余杂项/局内金钱.svg b/Client/Assets/Resources/UI/其余杂项/局内金钱.svg new file mode 100644 index 0000000..2cc40e9 --- /dev/null +++ b/Client/Assets/Resources/UI/其余杂项/局内金钱.svg @@ -0,0 +1,335 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Client/Assets/Resources/UI/其余杂项/局内金钱.svg.meta b/Client/Assets/Resources/UI/其余杂项/局内金钱.svg.meta new file mode 100644 index 0000000..a4d8d10 --- /dev/null +++ b/Client/Assets/Resources/UI/其余杂项/局内金钱.svg.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: d102f013c83999e4081e0c014bf2430a +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: a57477913897c46af95d590f580878bd, type: 3} + svgType: 1 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 256 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 1 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteRect: + name: + originalName: + pivot: {x: 0, y: 0} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + customData: + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + spriteID: b541a5b5259afde4e9c7306f3da97ca4 + PhysicsOutlines: [] diff --git a/Client/Assets/Resources/UI/其余杂项/非当前层级-行为示意栏.svg b/Client/Assets/Resources/UI/其余杂项/非当前层级-行为示意栏.svg new file mode 100644 index 0000000..7b8ac06 --- /dev/null +++ b/Client/Assets/Resources/UI/其余杂项/非当前层级-行为示意栏.svg @@ -0,0 +1,338 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Client/Assets/Resources/UI/其余杂项/非当前层级-行为示意栏.svg.meta b/Client/Assets/Resources/UI/其余杂项/非当前层级-行为示意栏.svg.meta new file mode 100644 index 0000000..c3394ca --- /dev/null +++ b/Client/Assets/Resources/UI/其余杂项/非当前层级-行为示意栏.svg.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 54c0e08acbe0ac9468618f599293ce2c +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: a57477913897c46af95d590f580878bd, type: 3} + svgType: 1 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 256 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 1 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteRect: + name: + originalName: + pivot: {x: 0, y: 0} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + customData: + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + spriteID: c3595dff73373c44d8ecaa0911cb1d78 + PhysicsOutlines: [] diff --git a/Client/Assets/Resources/UI/增减益状态栏UI.meta b/Client/Assets/Resources/UI/增减益状态栏UI.meta new file mode 100644 index 0000000..4a6e444 --- /dev/null +++ b/Client/Assets/Resources/UI/增减益状态栏UI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 17b4c90b2bde48b45bf20e7af41378e1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Resources/UI/增减益状态栏UI/当前层级减益状态栏.svg b/Client/Assets/Resources/UI/增减益状态栏UI/当前层级减益状态栏.svg new file mode 100644 index 0000000..c76723f --- /dev/null +++ b/Client/Assets/Resources/UI/增减益状态栏UI/当前层级减益状态栏.svg @@ -0,0 +1,334 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Client/Assets/Resources/UI/增减益状态栏UI/当前层级减益状态栏.svg.meta b/Client/Assets/Resources/UI/增减益状态栏UI/当前层级减益状态栏.svg.meta new file mode 100644 index 0000000..c065a45 --- /dev/null +++ b/Client/Assets/Resources/UI/增减益状态栏UI/当前层级减益状态栏.svg.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 07ef1a47e0caab340808a9098d5c1ff7 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: a57477913897c46af95d590f580878bd, type: 3} + svgType: 1 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 256 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 1 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteRect: + name: + originalName: + pivot: {x: 0, y: 0} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + customData: + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + spriteID: 4499e16b44d401f41b9f63e3b3321ea6 + PhysicsOutlines: [] diff --git a/Client/Assets/Resources/UI/增减益状态栏UI/当前层级增益状态栏.svg b/Client/Assets/Resources/UI/增减益状态栏UI/当前层级增益状态栏.svg new file mode 100644 index 0000000..a129015 --- /dev/null +++ b/Client/Assets/Resources/UI/增减益状态栏UI/当前层级增益状态栏.svg @@ -0,0 +1,244 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Client/Assets/Resources/UI/增减益状态栏UI/当前层级增益状态栏.svg.meta b/Client/Assets/Resources/UI/增减益状态栏UI/当前层级增益状态栏.svg.meta new file mode 100644 index 0000000..e115346 --- /dev/null +++ b/Client/Assets/Resources/UI/增减益状态栏UI/当前层级增益状态栏.svg.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: fb99d95e0a6d23f4e9410d6c113af2bd +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: a57477913897c46af95d590f580878bd, type: 3} + svgType: 1 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 256 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 1 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteRect: + name: + originalName: + pivot: {x: 0, y: 0} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + customData: + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + spriteID: 7914fb98a7dd82f46b3f765345ee8ee4 + PhysicsOutlines: [] diff --git a/Client/Assets/Resources/UI/增减益状态栏UI/非当前层级减益状态栏.svg b/Client/Assets/Resources/UI/增减益状态栏UI/非当前层级减益状态栏.svg new file mode 100644 index 0000000..58339fb --- /dev/null +++ b/Client/Assets/Resources/UI/增减益状态栏UI/非当前层级减益状态栏.svg @@ -0,0 +1,334 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Client/Assets/Resources/UI/增减益状态栏UI/非当前层级减益状态栏.svg.meta b/Client/Assets/Resources/UI/增减益状态栏UI/非当前层级减益状态栏.svg.meta new file mode 100644 index 0000000..1d004e4 --- /dev/null +++ b/Client/Assets/Resources/UI/增减益状态栏UI/非当前层级减益状态栏.svg.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 9975605dcc1c4f74b9bc49197f0239b2 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: a57477913897c46af95d590f580878bd, type: 3} + svgType: 1 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 256 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 1 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteRect: + name: + originalName: + pivot: {x: 0, y: 0} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + customData: + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + spriteID: bd9daf534f34fde4a87f3fccdc2e7024 + PhysicsOutlines: [] diff --git a/Client/Assets/Resources/UI/增减益状态栏UI/非当前层级增益状态栏.svg b/Client/Assets/Resources/UI/增减益状态栏UI/非当前层级增益状态栏.svg new file mode 100644 index 0000000..37754f1 --- /dev/null +++ b/Client/Assets/Resources/UI/增减益状态栏UI/非当前层级增益状态栏.svg @@ -0,0 +1,334 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Client/Assets/Resources/UI/增减益状态栏UI/非当前层级增益状态栏.svg.meta b/Client/Assets/Resources/UI/增减益状态栏UI/非当前层级增益状态栏.svg.meta new file mode 100644 index 0000000..049dd11 --- /dev/null +++ b/Client/Assets/Resources/UI/增减益状态栏UI/非当前层级增益状态栏.svg.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 4195586faba96a041a71527fa3df5274 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: a57477913897c46af95d590f580878bd, type: 3} + svgType: 1 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 256 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 1 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteRect: + name: + originalName: + pivot: {x: 0, y: 0} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + customData: + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + spriteID: aa8bac081468539419b3cc510ead7cfe + PhysicsOutlines: [] diff --git a/Client/Assets/Resources/UI/武器栏UI.meta b/Client/Assets/Resources/UI/武器栏UI.meta new file mode 100644 index 0000000..5dc3c19 --- /dev/null +++ b/Client/Assets/Resources/UI/武器栏UI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 06c1b677afb94ee4e8ab02849f646a65 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Resources/UI/武器栏UI/当前武器栏.svg b/Client/Assets/Resources/UI/武器栏UI/当前武器栏.svg new file mode 100644 index 0000000..f28c8f4 --- /dev/null +++ b/Client/Assets/Resources/UI/武器栏UI/当前武器栏.svg @@ -0,0 +1,338 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Client/Assets/Resources/UI/武器栏UI/当前武器栏.svg.meta b/Client/Assets/Resources/UI/武器栏UI/当前武器栏.svg.meta new file mode 100644 index 0000000..69369cb --- /dev/null +++ b/Client/Assets/Resources/UI/武器栏UI/当前武器栏.svg.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 89c428aa91735ee48a38fff2a726dbd5 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: a57477913897c46af95d590f580878bd, type: 3} + svgType: 1 + texturedSpriteMeshType: 1 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 256 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 0 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteRect: + name: + originalName: + pivot: {x: 0, y: 0} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + customData: + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + spriteID: d85d570b2429ec342bf83ecf3f35e740 + PhysicsOutlines: [] diff --git a/Client/Assets/Resources/UI/武器栏UI/非当前武器栏.svg b/Client/Assets/Resources/UI/武器栏UI/非当前武器栏.svg new file mode 100644 index 0000000..948ddfa --- /dev/null +++ b/Client/Assets/Resources/UI/武器栏UI/非当前武器栏.svg @@ -0,0 +1,338 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Client/Assets/Resources/UI/武器栏UI/非当前武器栏.svg.meta b/Client/Assets/Resources/UI/武器栏UI/非当前武器栏.svg.meta new file mode 100644 index 0000000..fc95234 --- /dev/null +++ b/Client/Assets/Resources/UI/武器栏UI/非当前武器栏.svg.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 49574900b62cf8f4481e400bb87d8497 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: a57477913897c46af95d590f580878bd, type: 3} + svgType: 1 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 256 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 1 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteRect: + name: + originalName: + pivot: {x: 0, y: 0} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + customData: + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + spriteID: 8fa813b05d5a429458634b3e34e499e6 + PhysicsOutlines: [] diff --git a/Client/Assets/Resources/UI/血条相关UI.meta b/Client/Assets/Resources/UI/血条相关UI.meta new file mode 100644 index 0000000..eb59892 --- /dev/null +++ b/Client/Assets/Resources/UI/血条相关UI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: aac80b09967838b46a4eba7a4bc7a37c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Resources/UI/血条相关UI/基地血条.svg b/Client/Assets/Resources/UI/血条相关UI/基地血条.svg new file mode 100644 index 0000000..832708c --- /dev/null +++ b/Client/Assets/Resources/UI/血条相关UI/基地血条.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/Client/Assets/Resources/UI/血条相关UI/基地血条.svg.meta b/Client/Assets/Resources/UI/血条相关UI/基地血条.svg.meta new file mode 100644 index 0000000..942a519 --- /dev/null +++ b/Client/Assets/Resources/UI/血条相关UI/基地血条.svg.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 5df876ecff4b36840bae2a82c52ddcda +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: a57477913897c46af95d590f580878bd, type: 3} + svgType: 1 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 256 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 1 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteRect: + name: + originalName: + pivot: {x: 0, y: 0} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + customData: + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + spriteID: b1519d90f236a9b4fb7ee6efb252e0d5 + PhysicsOutlines: [] diff --git a/Client/Assets/Resources/UI/血条相关UI/基地血条底.svg b/Client/Assets/Resources/UI/血条相关UI/基地血条底.svg new file mode 100644 index 0000000..0ae3f3f --- /dev/null +++ b/Client/Assets/Resources/UI/血条相关UI/基地血条底.svg @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/Client/Assets/Resources/UI/血条相关UI/基地血条底.svg.meta b/Client/Assets/Resources/UI/血条相关UI/基地血条底.svg.meta new file mode 100644 index 0000000..80f235e --- /dev/null +++ b/Client/Assets/Resources/UI/血条相关UI/基地血条底.svg.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: eb5a094463dad0b468605645310d036e +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: a57477913897c46af95d590f580878bd, type: 3} + svgType: 1 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 256 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 1 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteRect: + name: + originalName: + pivot: {x: 0, y: 0} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + customData: + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + spriteID: e98d52b7c0801b2489d9f5200a84737e + PhysicsOutlines: [] diff --git a/Client/Assets/Resources/UI/血条相关UI/当前层级血条.svg b/Client/Assets/Resources/UI/血条相关UI/当前层级血条.svg new file mode 100644 index 0000000..c9b6044 --- /dev/null +++ b/Client/Assets/Resources/UI/血条相关UI/当前层级血条.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Client/Assets/Resources/UI/血条相关UI/当前层级血条.svg.meta b/Client/Assets/Resources/UI/血条相关UI/当前层级血条.svg.meta new file mode 100644 index 0000000..74f974d --- /dev/null +++ b/Client/Assets/Resources/UI/血条相关UI/当前层级血条.svg.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 2d75b7f02ff03f946b5e2dbe410ee8bf +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: a57477913897c46af95d590f580878bd, type: 3} + svgType: 1 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 512 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 0 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteRect: + name: + originalName: + pivot: {x: 0, y: 0} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + customData: + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + spriteID: 833eb6b335d0baa4c8f444f5b1ab7095 + PhysicsOutlines: [] diff --git a/Client/Assets/Resources/UI/血条相关UI/血条底.svg b/Client/Assets/Resources/UI/血条相关UI/血条底.svg new file mode 100644 index 0000000..59431a7 --- /dev/null +++ b/Client/Assets/Resources/UI/血条相关UI/血条底.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Client/Assets/Resources/UI/血条相关UI/血条底.svg.meta b/Client/Assets/Resources/UI/血条相关UI/血条底.svg.meta new file mode 100644 index 0000000..9c4a0f7 --- /dev/null +++ b/Client/Assets/Resources/UI/血条相关UI/血条底.svg.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 9e8e5b8f16df1044bb4279fad7eec71d +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: a57477913897c46af95d590f580878bd, type: 3} + svgType: 1 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 512 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 0 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteRect: + name: + originalName: + pivot: {x: 0, y: 0} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + customData: + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + spriteID: 5afa0322bf417cd489688f861dd40469 + PhysicsOutlines: [] diff --git a/Client/Assets/Resources/UI/血条相关UI/非当前层级血条.svg b/Client/Assets/Resources/UI/血条相关UI/非当前层级血条.svg new file mode 100644 index 0000000..4ce7208 --- /dev/null +++ b/Client/Assets/Resources/UI/血条相关UI/非当前层级血条.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Client/Assets/Resources/UI/血条相关UI/非当前层级血条.svg.meta b/Client/Assets/Resources/UI/血条相关UI/非当前层级血条.svg.meta new file mode 100644 index 0000000..4d01d8d --- /dev/null +++ b/Client/Assets/Resources/UI/血条相关UI/非当前层级血条.svg.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: eba9d05bb9d9e4240ac43a4fbcb0eca5 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: a57477913897c46af95d590f580878bd, type: 3} + svgType: 1 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 512 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 0 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteRect: + name: + originalName: + pivot: {x: 0, y: 0} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + customData: + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + spriteID: b3fc6e378983d4e4fa657a926b6c853f + PhysicsOutlines: [] diff --git a/Client/Assets/Resources/UI/血条相关UI/非当前层级血条底.svg b/Client/Assets/Resources/UI/血条相关UI/非当前层级血条底.svg new file mode 100644 index 0000000..133c3be --- /dev/null +++ b/Client/Assets/Resources/UI/血条相关UI/非当前层级血条底.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Client/Assets/Resources/UI/血条相关UI/非当前层级血条底.svg.meta b/Client/Assets/Resources/UI/血条相关UI/非当前层级血条底.svg.meta new file mode 100644 index 0000000..5c66e3a --- /dev/null +++ b/Client/Assets/Resources/UI/血条相关UI/非当前层级血条底.svg.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 720f4776d5fb7b64f8ed70520112d072 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: a57477913897c46af95d590f580878bd, type: 3} + svgType: 1 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 512 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 0 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteRect: + name: + originalName: + pivot: {x: 0, y: 0} + alignment: 0 + border: {x: 0, y: 0, z: 0, w: 0} + customData: + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + spriteID: 4764d3e052abf3b45a46ab92044792c3 + PhysicsOutlines: [] diff --git a/Client/Assets/RunTimeResource/MiniMap.renderTexture b/Client/Assets/RunTimeResource/MiniMap.renderTexture index a1d56da..d675708 100644 --- a/Client/Assets/RunTimeResource/MiniMap.renderTexture +++ b/Client/Assets/RunTimeResource/MiniMap.renderTexture @@ -12,8 +12,8 @@ RenderTexture: Hash: 00000000000000000000000000000000 m_IsAlphaChannelOptional: 0 serializedVersion: 6 - m_Width: 150 - m_Height: 150 + m_Width: 120 + m_Height: 120 m_AntiAliasing: 1 m_MipCount: -1 m_DepthStencilFormat: 90 diff --git a/Client/Assets/Scenes/Game.unity b/Client/Assets/Scenes/Game.unity index 07591cc..6460d39 100644 --- a/Client/Assets/Scenes/Game.unity +++ b/Client/Assets/Scenes/Game.unity @@ -119,6 +119,81 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &22205548 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 22205549} + - component: {fileID: 22205551} + - component: {fileID: 22205550} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &22205549 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 22205548} + 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: 104508618} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &22205550 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 22205548} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 1, b: 0.9019608, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 3286163911610860551, guid: 5df876ecff4b36840bae2a82c52ddcda, type: 3} + m_Type: 3 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 0 + m_FillAmount: 0.547 + m_FillClockwise: 1 + m_FillOrigin: 1 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &22205551 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 22205548} + m_CullTransparentMesh: 1 --- !u!1 &29300414 GameObject: m_ObjectHideFlags: 0 @@ -307,6 +382,97 @@ Transform: m_Children: [] m_Father: {fileID: 2110038582} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &104508617 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 104508618} + - component: {fileID: 104508620} + - component: {fileID: 104508619} + m_Layer: 5 + m_Name: BaseBuildingHPBar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &104508618 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 104508617} + 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: 2141169989} + - {fileID: 22205549} + m_Father: {fileID: 2062509144} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -230.19214, y: -53.597412} + m_SizeDelta: {x: 402.5165, y: 46.5413} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &104508619 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 104508617} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a5026699f3a94f029628af90ccd8fa8d, type: 3} + m_Name: + m_EditorClassIdentifier: + image: {fileID: 22205550} + progressGradient: + serializedVersion: 2 + key0: {r: 1, g: 0.23137255, b: 0.2901961, a: 1} + key1: {r: 1, g: 0.98039216, b: 0.2627451, a: 1} + key2: {r: 0, g: 1, b: 0.9019608, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 16384 + ctime1: 32768 + ctime2: 65535 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 1 + m_ColorSpace: -1 + m_NumColorKeys: 3 + m_NumAlphaKeys: 2 + _editorProgressPreview: 0.547 +--- !u!222 &104508620 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 104508617} + m_CullTransparentMesh: 1 --- !u!1 &111982856 GameObject: m_ObjectHideFlags: 0 @@ -425,6 +591,7 @@ MonoBehaviour: m_EditorClassIdentifier: isGlobal: 1 characterPrefab: {fileID: 3420474218334607780, guid: 5218adfb8e855a9459df63de8b2f323c, type: 3} + monsterPrefab: {fileID: 0} buildingPrefab: {fileID: 5615006624229444611, guid: d7b9277d8e6ac4541800044bdb0da063, type: 3} bulletPrefab: {fileID: 8687677644466399534, guid: 29b2450a8636a104586e36333878f4d9, type: 3} pickupPrefab: {fileID: 1096543602564338806, guid: ec84100729cd1bd4699fc15b3a09134c, type: 3} @@ -616,7 +783,6 @@ GameObject: m_Component: - component: {fileID: 274529400} - component: {fileID: 274529403} - - component: {fileID: 274529402} - component: {fileID: 274529401} m_Layer: 5 m_Name: MainHPBar @@ -639,12 +805,12 @@ RectTransform: m_Children: - {fileID: 796630699} - {fileID: 1350296600} - m_Father: {fileID: 1890891271} + m_Father: {fileID: 2062509144} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 100, y: 100} + m_AnchoredPosition: {x: 90.0318, y: 177.83636} + m_SizeDelta: {x: 123.0923, y: 301.846} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &274529401 MonoBehaviour: @@ -659,36 +825,37 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: image: {fileID: 1350296601} ---- !u!114 &274529402 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 274529399} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.745283, g: 0.42562896, b: 0.024608415, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 0} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 + progressGradient: + serializedVersion: 2 + key0: {r: 1, g: 0.23137255, b: 0.2901961, a: 1} + key1: {r: 1, g: 0.98039216, b: 0.2627451, a: 1} + key2: {r: 0, g: 1, b: 0.9019608, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 16384 + ctime1: 32768 + ctime2: 65535 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 1 + m_ColorSpace: -1 + m_NumColorKeys: 3 + m_NumAlphaKeys: 2 + _editorProgressPreview: 0.63 --- !u!222 &274529403 CanvasRenderer: m_ObjectHideFlags: 0 @@ -776,6 +943,57 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &455427351 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 455427352} + - component: {fileID: 455427353} + m_Layer: 5 + m_Name: CoinUI + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &455427352 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 455427351} + 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: 896112297} + - {fileID: 854403366} + m_Father: {fileID: 2062509144} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -110.76074, y: -99.95935} + m_SizeDelta: {x: 147.5416, y: 44.6209} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &455427353 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 455427351} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 85cfb4a924a04c6e9f6f7801207dbee3, type: 3} + m_Name: + m_EditorClassIdentifier: + text: {fileID: 854403367} --- !u!1 &476295824 GameObject: m_ObjectHideFlags: 0 @@ -801,17 +1019,17 @@ RectTransform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 476295824} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 1866986816} + m_Father: {fileID: 1107928324} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -10, y: -10} + m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &476295826 MonoBehaviour: @@ -826,7 +1044,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Color: {r: 1, g: 1, b: 1, a: 0.7490196} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 @@ -848,6 +1066,86 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 476295824} m_CullTransparentMesh: 1 +--- !u!224 &538945756 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + m_PrefabInstance: {fileID: 6105138323762792695} + m_PrefabAsset: {fileID: 0} +--- !u!1 &551559132 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 551559133} + - component: {fileID: 551559135} + - component: {fileID: 551559134} + m_Layer: 5 + m_Name: bk + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &551559133 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 551559132} + 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: 582436622} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &551559134 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 551559132} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.995283, b: 0.995283, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 3286163911610860551, guid: 720f4776d5fb7b64f8ed70520112d072, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 1 + m_FillAmount: 0.604 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &551559135 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 551559132} + m_CullTransparentMesh: 1 --- !u!1 &556535795 GameObject: m_ObjectHideFlags: 0 @@ -893,7 +1191,7 @@ Grid: m_CellGap: {x: 0, y: 0, z: 0} m_CellLayout: 0 m_CellSwizzle: 0 ---- !u!1 &629678389 +--- !u!1 &582436621 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -901,100 +1199,151 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 629678390} - - component: {fileID: 629678394} - - component: {fileID: 629678393} - - component: {fileID: 629678392} - - component: {fileID: 629678391} + - component: {fileID: 582436622} + - component: {fileID: 582436624} + - component: {fileID: 582436623} m_Layer: 5 - m_Name: EquipmentBar + m_Name: OtherHPBar m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &629678390 +--- !u!224 &582436622 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 629678389} + m_GameObject: {fileID: 582436621} 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: 1890891271} + m_Children: + - {fileID: 551559133} + - {fileID: 923163877} + m_Father: {fileID: 2062509144} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 0, y: -150} - m_SizeDelta: {x: 6, y: 50} - m_Pivot: {x: 0, y: 0} ---- !u!114 &629678391 + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -86.66797, y: 177.8364} + m_SizeDelta: {x: 112.5331, y: 302.7567} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &582436623 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 629678389} + m_GameObject: {fileID: 582436621} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Script: {fileID: 11500000, guid: a5026699f3a94f029628af90ccd8fa8d, type: 3} m_Name: m_EditorClassIdentifier: - m_HorizontalFit: 2 - m_VerticalFit: 0 ---- !u!114 &629678392 + image: {fileID: 923163878} + progressGradient: + serializedVersion: 2 + key0: {r: 1, g: 0.23137255, b: 0.2901961, a: 1} + key1: {r: 1, g: 0.98039216, b: 0.2627451, a: 1} + key2: {r: 0, g: 1, b: 0.9019608, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 16384 + ctime1: 32768 + ctime2: 65535 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 1 + m_ColorSpace: -1 + m_NumColorKeys: 3 + m_NumAlphaKeys: 2 + _editorProgressPreview: 0.576 +--- !u!222 &582436624 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 582436621} + m_CullTransparentMesh: 1 +--- !u!1 &689340256 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 689340257} + - component: {fileID: 689340259} + - component: {fileID: 689340258} + - component: {fileID: 689340260} + m_Layer: 5 + m_Name: use + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &689340257 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 689340256} + 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: 538945756} + m_Father: {fileID: 1942077021} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 74.80589, y: 71.574394} + m_SizeDelta: {x: 144.0769, y: 143.1488} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &689340258 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 629678389} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 3 - m_Right: 3 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 3 - m_Spacing: 5 - m_ChildForceExpandWidth: 0 - m_ChildForceExpandHeight: 0 - m_ChildControlWidth: 0 - m_ChildControlHeight: 0 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 - m_ReverseArrangement: 0 ---- !u!114 &629678393 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 629678389} + m_GameObject: {fileID: 689340256} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 0.754717, g: 0.47987247, b: 0.26699895, a: 1} + m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 0} + m_Sprite: {fileID: 3286163911610860551, guid: 89c428aa91735ee48a38fff2a726dbd5, type: 3} m_Type: 0 - m_PreserveAspect: 0 + m_PreserveAspect: 1 m_FillCenter: 1 m_FillMethod: 4 m_FillAmount: 1 @@ -1002,19 +1351,145 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!222 &629678394 +--- !u!222 &689340259 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 629678389} + m_GameObject: {fileID: 689340256} m_CullTransparentMesh: 1 +--- !u!114 &689340260 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 689340256} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7d651a3517184abcb4aff78629eb7946, type: 3} + m_Name: + m_EditorClassIdentifier: + icon: {fileID: 6105138323762792696} --- !u!224 &689345800 stripped RectTransform: m_CorrespondingSourceObject: {fileID: 2322698135530781468, guid: afbed11ea0c7e944aa36a71951b00ad6, type: 3} m_PrefabInstance: {fileID: 3215589691918074709} m_PrefabAsset: {fileID: 0} +--- !u!1001 &689521025 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1535848048} + m_Modifications: + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_SizeDelta.x + value: -30 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_SizeDelta.y + value: -30 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1665787281938857491, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_Name + value: UIAnimator + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} +--- !u!224 &689521026 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + m_PrefabInstance: {fileID: 689521025} + m_PrefabAsset: {fileID: 0} +--- !u!114 &689521027 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 4750466675787535420, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + m_PrefabInstance: {fileID: 689521025} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c6f899d1c5ef450bb6f3e670fa55cffd, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &719498455 GameObject: m_ObjectHideFlags: 0 @@ -1129,6 +1604,196 @@ MonoBehaviour: _dimensionId: mapGenerator: {fileID: 741561708} cameraPosition: {x: 0, y: 0, z: 0} +--- !u!1 &761473399 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 761473400} + - component: {fileID: 761473401} + - component: {fileID: 761473402} + m_Layer: 5 + m_Name: otherBuff + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &761473400 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 761473399} + 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: 2062509144} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -958.37, y: 48.86328} + m_SizeDelta: {x: 1461.9, y: 43.8996} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &761473401 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 761473399} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 2 + m_Spacing: 7 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 1 +--- !u!114 &761473402 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 761473399} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8f6f033d6fe84e769e101fb355ef3ffa, type: 3} + m_Name: + m_EditorClassIdentifier: + prefab: {fileID: 8174970956233947585, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + container: {fileID: 761473400} +--- !u!1001 &771334553 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1483441034} + m_Modifications: + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_SizeDelta.x + value: -40.00006 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_SizeDelta.y + value: -40 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchoredPosition.x + value: -0.000030517578 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1665787281938857491, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_Name + value: UIAnimator + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} +--- !u!224 &771334554 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + m_PrefabInstance: {fileID: 771334553} + m_PrefabAsset: {fileID: 0} +--- !u!114 &771334555 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 4750466675787535420, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + m_PrefabInstance: {fileID: 771334553} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c6f899d1c5ef450bb6f3e670fa55cffd, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &796630698 GameObject: m_ObjectHideFlags: 0 @@ -1179,16 +1844,16 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 0, g: 0, b: 0, a: 1} + m_Color: {r: 1, g: 0.995283, b: 0.995283, a: 1} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0} + m_Sprite: {fileID: 3286163911610860551, guid: 9e8e5b8f16df1044bb4279fad7eec71d, type: 3} m_Type: 0 - m_PreserveAspect: 0 + m_PreserveAspect: 1 m_FillCenter: 1 m_FillMethod: 1 m_FillAmount: 0.604 @@ -1366,6 +2031,292 @@ TilemapCollider2D: m_MaximumTileChangeCount: 1000 m_ExtrusionFactor: 0 m_UseDelaunayMesh: 0 +--- !u!1 &854403365 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 854403366} + - component: {fileID: 854403368} + - component: {fileID: 854403367} + m_Layer: 5 + m_Name: text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &854403366 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 854403365} + 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: 455427352} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -29.999996, y: -10} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &854403367 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 854403365} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 414444444425666666666666 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 317edb274e9c5144a9916937bdbf7716, type: 2} + m_sharedMaterial: {fileID: -1361428157011412921, guid: 317edb274e9c5144a9916937bdbf7716, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 20 + m_fontSizeBase: 20 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 4 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 1 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &854403368 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 854403365} + m_CullTransparentMesh: 1 +--- !u!1 &896112296 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 896112297} + - component: {fileID: 896112299} + - component: {fileID: 896112298} + m_Layer: 5 + m_Name: bk + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &896112297 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 896112296} + 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: 455427352} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &896112298 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 896112296} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 3286163911610860551, guid: d102f013c83999e4081e0c014bf2430a, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &896112299 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 896112296} + m_CullTransparentMesh: 1 +--- !u!1 &923163876 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 923163877} + - component: {fileID: 923163879} + - component: {fileID: 923163878} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &923163877 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 923163876} + 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: 582436622} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &923163878 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 923163876} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 1, b: 0.9019608, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 3286163911610860551, guid: eba9d05bb9d9e4240ac43a4fbcb0eca5, type: 3} + m_Type: 3 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 1 + m_FillAmount: 0.576 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &923163879 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 923163876} + m_CullTransparentMesh: 1 --- !u!224 &981108095 stripped RectTransform: m_CorrespondingSourceObject: {fileID: 3161252966921572831, guid: 6846a4c7db6ab7e49812b377bdf8df7d, type: 3} @@ -1417,6 +2368,96 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: textureLevel: {fileID: 828003924} +--- !u!1 &1107928323 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1107928324} + - component: {fileID: 1107928327} + - component: {fileID: 1107928326} + - component: {fileID: 1107928325} + m_Layer: 5 + m_Name: mask + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1107928324 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1107928323} + 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: 476295825} + m_Father: {fileID: 1866986816} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -14, y: -13.999996} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1107928325 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1107928323} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.003921569} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 3286163911610860551, guid: 899963cf0e2bdb447a6ffc59bf5dadeb, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1107928326 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1107928323} + m_CullTransparentMesh: 1 +--- !u!114 &1107928327 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1107928323} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 1 --- !u!1 &1204850182 GameObject: m_ObjectHideFlags: 0 @@ -1732,7 +2773,7 @@ MonoBehaviour: m_UiScaleMode: 1 m_ReferencePixelsPerUnit: 100 m_ScaleFactor: 1 - m_ReferenceResolution: {x: 800, y: 600} + m_ReferenceResolution: {x: 1920, y: 1080} m_ScreenMatchMode: 0 m_MatchWidthOrHeight: 0 m_PhysicalUnit: 3 @@ -1775,7 +2816,6 @@ RectTransform: m_LocalScale: {x: 0, y: 0, z: 0} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 1866986816} - {fileID: 2062509144} - {fileID: 1892335252} - {fileID: 2068504032} @@ -1927,6 +2967,29 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1277422231 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 6060365352283784422, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + m_PrefabInstance: {fileID: 509618438222383851} + m_PrefabAsset: {fileID: 0} +--- !u!224 &1277422232 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + m_PrefabInstance: {fileID: 509618438222383851} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1277422235 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1277422231} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 17587b13f9d4467dbff77cf9762dc8fe, type: 3} + m_Name: + m_EditorClassIdentifier: + icon: {fileID: 509618438222383852} --- !u!1 &1350296599 GameObject: m_ObjectHideFlags: 0 @@ -1977,19 +3040,19 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 1, g: 0.023584902, b: 0.023584902, a: 1} + m_Color: {r: 0, g: 1, b: 0.9019608, a: 1} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0} + m_Sprite: {fileID: 3286163911610860551, guid: 2d75b7f02ff03f946b5e2dbe410ee8bf, type: 3} m_Type: 3 - m_PreserveAspect: 0 + m_PreserveAspect: 1 m_FillCenter: 1 m_FillMethod: 1 - m_FillAmount: 0.556 + m_FillAmount: 0.63 m_FillClockwise: 1 m_FillOrigin: 0 m_UseSpriteMesh: 0 @@ -2052,6 +3115,140 @@ RectTransform: m_CorrespondingSourceObject: {fileID: 1633840166558733415, guid: 97884168f61531647ba02870b2e2160f, type: 3} m_PrefabInstance: {fileID: 561707863834017811} m_PrefabAsset: {fileID: 0} +--- !u!1001 &1408316568 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1725111928} + m_Modifications: + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_SizeDelta.x + value: 62.421 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_SizeDelta.y + value: 43.9 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6060365352283784422, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_Name + value: Image (1) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 6060365352283784422, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + insertIndex: -1 + addedObject: {fileID: 1408316572} + m_SourcePrefab: {fileID: 100100000, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} +--- !u!224 &1408316569 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + m_PrefabInstance: {fileID: 1408316568} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1408316570 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8897095238084646223, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + m_PrefabInstance: {fileID: 1408316568} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c6f899d1c5ef450bb6f3e670fa55cffd, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1408316571 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 6060365352283784422, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + m_PrefabInstance: {fileID: 1408316568} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1408316572 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1408316571} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 17587b13f9d4467dbff77cf9762dc8fe, type: 3} + m_Name: + m_EditorClassIdentifier: + icon: {fileID: 1408316570} --- !u!1 &1421953693 GameObject: m_ObjectHideFlags: 0 @@ -2265,6 +3462,186 @@ Tilemap: e31: 0 e32: 0 e33: 1 +--- !u!1 &1483441033 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1483441034} + - component: {fileID: 1483441036} + - component: {fileID: 1483441035} + - component: {fileID: 1483441037} + m_Layer: 5 + m_Name: otherMode + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1483441034 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1483441033} + 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: 771334554} + m_Father: {fileID: 2062509144} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -161.8, y: 98.48938} + m_SizeDelta: {x: 144, y: 144} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1483441035 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1483441033} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 3286163911610860551, guid: 54c0e08acbe0ac9468618f599293ce2c, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1483441036 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1483441033} + m_CullTransparentMesh: 1 +--- !u!114 &1483441037 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1483441033} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2d81179f82c542edb275daabff5bfe12, type: 3} + m_Name: + m_EditorClassIdentifier: + icon: {fileID: 771334555} +--- !u!1 &1535848047 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1535848048} + - component: {fileID: 1535848050} + - component: {fileID: 1535848049} + - component: {fileID: 1535848051} + m_Layer: 5 + m_Name: 2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1535848048 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1535848047} + 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: 689521026} + m_Father: {fileID: 1942077021} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 146.97313, y: 157.07912} + m_SizeDelta: {x: 98.2785, y: 97.6994} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1535848049 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1535848047} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 3286163911610860551, guid: 49574900b62cf8f4481e400bb87d8497, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1535848050 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1535848047} + m_CullTransparentMesh: 1 +--- !u!114 &1535848051 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1535848047} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7d651a3517184abcb4aff78629eb7946, type: 3} + m_Name: + m_EditorClassIdentifier: + icon: {fileID: 689521027} --- !u!1 &1585331067 GameObject: m_ObjectHideFlags: 0 @@ -2388,6 +3765,209 @@ Tilemap: e31: 0 e32: 0 e33: 1 +--- !u!1001 &1607044843 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1660284963} + m_Modifications: + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_SizeDelta.x + value: -30 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_SizeDelta.y + value: -30 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1665787281938857491, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_Name + value: UIAnimator + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} +--- !u!224 &1607044844 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + m_PrefabInstance: {fileID: 1607044843} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1607044845 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 4750466675787535420, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + m_PrefabInstance: {fileID: 1607044843} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c6f899d1c5ef450bb6f3e670fa55cffd, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1660284962 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1660284963} + - component: {fileID: 1660284965} + - component: {fileID: 1660284964} + - component: {fileID: 1660284966} + m_Layer: 5 + m_Name: 3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1660284963 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1660284962} + 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: 1607044844} + m_Father: {fileID: 1942077021} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 122.79912, y: 245.30267} + m_SizeDelta: {x: 97.8637, y: 97.2345} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1660284964 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1660284962} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 3286163911610860551, guid: 49574900b62cf8f4481e400bb87d8497, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1660284965 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1660284962} + m_CullTransparentMesh: 1 +--- !u!114 &1660284966 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1660284962} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7d651a3517184abcb4aff78629eb7946, type: 3} + m_Name: + m_EditorClassIdentifier: + icon: {fileID: 1607044845} --- !u!224 &1672332560 stripped RectTransform: m_CorrespondingSourceObject: {fileID: 8654739876786722101, guid: 1b140ccde6242874785fb30e18322eab, type: 3} @@ -2404,6 +3984,85 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 22c2554b0c0949aab37618f3a80ffe5a, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!1 &1725111927 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1725111928} + - component: {fileID: 1725111929} + - component: {fileID: 1725111930} + m_Layer: 5 + m_Name: MainBuff + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1725111928 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1725111927} + 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: 1277422232} + - {fileID: 1408316569} + m_Father: {fileID: 2062509144} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 261.91064, y: 48.86328} + m_SizeDelta: {x: 62.4213, y: 43.8996} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1725111929 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1725111927} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 7 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &1725111930 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1725111927} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8f6f033d6fe84e769e101fb355ef3ffa, type: 3} + m_Name: + m_EditorClassIdentifier: + prefab: {fileID: 8174970956233947585, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + container: {fileID: 1725111928} --- !u!1 &1866986815 GameObject: m_ObjectHideFlags: 0 @@ -2430,18 +4089,18 @@ RectTransform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1866986815} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 476295825} - m_Father: {fileID: 1236970686} + - {fileID: 1107928324} + m_Father: {fileID: 2062509144} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 1, y: 1} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: -85, y: -85} - m_SizeDelta: {x: 160, y: 160} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 195.6211, y: -195.7778} + m_SizeDelta: {x: 294.493, y: 294.7475} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1866986817 MonoBehaviour: @@ -2463,9 +4122,9 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 0} + m_Sprite: {fileID: 3286163911610860551, guid: 899963cf0e2bdb447a6ffc59bf5dadeb, type: 3} m_Type: 0 - m_PreserveAspect: 0 + m_PreserveAspect: 1 m_FillCenter: 1 m_FillMethod: 4 m_FillAmount: 1 @@ -2495,7 +4154,12 @@ MonoBehaviour: m_EditorClassIdentifier: background: {fileID: 1866986817} texture: {fileID: 476295826} ---- !u!1 &1890891270 +--- !u!224 &1892335252 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 4227482396833377269, guid: 72cde32427f7d914692a7b0d22fb791d, type: 3} + m_PrefabInstance: {fileID: 481559811017721991} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1942077020 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2503,97 +4167,52 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1890891271} - - component: {fileID: 1890891274} - - component: {fileID: 1890891273} - - component: {fileID: 1890891272} + - component: {fileID: 1942077021} + - component: {fileID: 1942077022} m_Layer: 5 - m_Name: FocuseEntityInf + m_Name: Equipment m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &1890891271 +--- !u!224 &1942077021 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1890891270} + m_GameObject: {fileID: 1942077020} 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: 274529400} - - {fileID: 629678390} + - {fileID: 689340257} + - {fileID: 1535848048} + - {fileID: 1660284963} m_Father: {fileID: 2062509144} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 0} ---- !u!114 &1890891272 + m_AnchoredPosition: {x: 192.80688, y: 177.84} + m_SizeDelta: {x: 205.5941, y: 301.85} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1942077022 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1890891270} + m_GameObject: {fileID: 1942077020} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 4432817f903945648bdc0b3a4ba19adc, type: 3} m_Name: m_EditorClassIdentifier: - uiParent: {fileID: 629678389} - itemUIPrefab: {fileID: 39290904923667451, guid: d989d0eda9043f146bb606ec0fd32905, type: 3} ---- !u!114 &1890891273 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1890891270} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalFit: 2 - m_VerticalFit: 2 ---- !u!114 &1890891274 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1890891270} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 6 - m_Spacing: 0 - m_ChildForceExpandWidth: 0 - m_ChildForceExpandHeight: 0 - m_ChildControlWidth: 0 - m_ChildControlHeight: 0 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 - m_ReverseArrangement: 0 ---- !u!224 &1892335252 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 4227482396833377269, guid: 72cde32427f7d914692a7b0d22fb791d, type: 3} - m_PrefabInstance: {fileID: 481559811017721991} - m_PrefabAsset: {fileID: 0} + currentUse: {fileID: 689340260} + two: {fileID: 1535848051} + three: {fileID: 1660284966} --- !u!1 &1980392309 GameObject: m_ObjectHideFlags: 0 @@ -3132,6 +4751,7 @@ GameObject: m_Component: - component: {fileID: 2062509144} - component: {fileID: 2062509145} + - component: {fileID: 2062509147} m_Layer: 5 m_Name: PlayerUI m_TagString: Untagged @@ -3151,8 +4771,15 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 1176865964342248741} - - {fileID: 1890891271} + - {fileID: 274529400} + - {fileID: 582436622} + - {fileID: 104508618} + - {fileID: 455427352} + - {fileID: 1942077021} + - {fileID: 1725111928} + - {fileID: 761473400} + - {fileID: 1483441034} + - {fileID: 1866986816} m_Father: {fileID: 1236970686} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -3173,7 +4800,22 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: focusedEntityHP: {fileID: 274529401} - lastEntityHP: {fileID: 1176865964342248742} + lastEntityHP: {fileID: 582436623} + BaseBuildingHP: {fileID: 104508619} + miniMap: {fileID: 1866986819} + equipmentUI: {fileID: 1942077022} + coinCountUI: {fileID: 455427353} + focuseEntityBuffIconList: {fileID: 1725111930} + lastEntityBuffIconList: {fileID: 761473402} + attackMode: {fileID: 1483441037} +--- !u!222 &2062509147 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2062509143} + m_CullTransparentMesh: 1 --- !u!224 &2068504032 stripped RectTransform: m_CorrespondingSourceObject: {fileID: 6806539210387795853, guid: 620f2670398686943a232c5a71a6f1d5, type: 3} @@ -3224,6 +4866,81 @@ Grid: m_CellGap: {x: 0, y: 0, z: 0} m_CellLayout: 0 m_CellSwizzle: 0 +--- !u!1 &2141169988 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2141169989} + - component: {fileID: 2141169991} + - component: {fileID: 2141169990} + m_Layer: 5 + m_Name: bk + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2141169989 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2141169988} + 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: 104508618} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2141169990 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2141169988} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.995283, b: 0.995283, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 3286163911610860551, guid: eb5a094463dad0b468605645310d036e, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 1 + m_FillAmount: 0.604 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &2141169991 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2141169988} + m_CullTransparentMesh: 1 --- !u!1001 &481559811017721991 PrefabInstance: m_ObjectHideFlags: 0 @@ -3232,6 +4949,10 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 1236970686} m_Modifications: + - target: {fileID: 318369690686405214, guid: 72cde32427f7d914692a7b0d22fb791d, type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} - target: {fileID: 318369690686405214, guid: 72cde32427f7d914692a7b0d22fb791d, type: 3} propertyPath: m_AnchorMax.y value: 1 @@ -3240,13 +4961,21 @@ PrefabInstance: propertyPath: m_AnchorMin.y value: 1 objectReference: {fileID: 0} + - target: {fileID: 318369690686405214, guid: 72cde32427f7d914692a7b0d22fb791d, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 318369690686405214, guid: 72cde32427f7d914692a7b0d22fb791d, type: 3} + propertyPath: m_SizeDelta.y + value: 30 + objectReference: {fileID: 0} - target: {fileID: 318369690686405214, guid: 72cde32427f7d914692a7b0d22fb791d, type: 3} propertyPath: m_AnchoredPosition.x - value: 400 + value: 0 objectReference: {fileID: 0} - target: {fileID: 318369690686405214, guid: 72cde32427f7d914692a7b0d22fb791d, type: 3} propertyPath: m_AnchoredPosition.y - value: -10 + value: -15 objectReference: {fileID: 0} - target: {fileID: 1599592022407895033, guid: 72cde32427f7d914692a7b0d22fb791d, type: 3} propertyPath: m_AnchorMax.x @@ -3258,7 +4987,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 1929317511491337533, guid: 72cde32427f7d914692a7b0d22fb791d, type: 3} propertyPath: m_AnchorMax.x - value: 0.99999994 + value: 1 objectReference: {fileID: 0} - target: {fileID: 1929317511491337533, guid: 72cde32427f7d914692a7b0d22fb791d, type: 3} propertyPath: m_AnchorMax.y @@ -3278,7 +5007,11 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 3070964228632539618, guid: 72cde32427f7d914692a7b0d22fb791d, type: 3} propertyPath: m_SizeDelta.y - value: 4 + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 4028021113825693505, guid: 72cde32427f7d914692a7b0d22fb791d, type: 3} + propertyPath: m_AnchorMax.x + value: 1 objectReference: {fileID: 0} - target: {fileID: 4028021113825693505, guid: 72cde32427f7d914692a7b0d22fb791d, type: 3} propertyPath: m_AnchorMax.y @@ -3286,15 +5019,23 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4028021113825693505, guid: 72cde32427f7d914692a7b0d22fb791d, type: 3} propertyPath: m_AnchorMin.y - value: 1 + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4028021113825693505, guid: 72cde32427f7d914692a7b0d22fb791d, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4028021113825693505, guid: 72cde32427f7d914692a7b0d22fb791d, type: 3} + propertyPath: m_SizeDelta.y + value: -30 objectReference: {fileID: 0} - target: {fileID: 4028021113825693505, guid: 72cde32427f7d914692a7b0d22fb791d, type: 3} propertyPath: m_AnchoredPosition.x - value: 400 + value: 0 objectReference: {fileID: 0} - target: {fileID: 4028021113825693505, guid: 72cde32427f7d914692a7b0d22fb791d, type: 3} propertyPath: m_AnchoredPosition.y - value: -235 + value: -15 objectReference: {fileID: 0} - target: {fileID: 4227482396833377269, guid: 72cde32427f7d914692a7b0d22fb791d, type: 3} propertyPath: m_Pivot.x @@ -3404,10 +5145,30 @@ PrefabInstance: propertyPath: actionButton value: 282 objectReference: {fileID: 0} + - target: {fileID: 7904664609186573076, guid: 72cde32427f7d914692a7b0d22fb791d, type: 3} + propertyPath: isInputOccupied + value: 1 + objectReference: {fileID: 0} - target: {fileID: 7904664609186573076, guid: 72cde32427f7d914692a7b0d22fb791d, type: 3} propertyPath: entityPlacementUI value: objectReference: {fileID: 1672332561} + - target: {fileID: 7986066519765048852, guid: 72cde32427f7d914692a7b0d22fb791d, type: 3} + propertyPath: m_ChildScaleWidth + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7986066519765048852, guid: 72cde32427f7d914692a7b0d22fb791d, type: 3} + propertyPath: m_ChildScaleHeight + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7986066519765048852, guid: 72cde32427f7d914692a7b0d22fb791d, type: 3} + propertyPath: m_ChildControlWidth + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7986066519765048852, guid: 72cde32427f7d914692a7b0d22fb791d, type: 3} + propertyPath: m_ChildControlHeight + value: 0 + objectReference: {fileID: 0} - target: {fileID: 8099462081536526843, guid: 72cde32427f7d914692a7b0d22fb791d, type: 3} propertyPath: m_AnchorMax.x value: 1 @@ -3424,11 +5185,123 @@ PrefabInstance: propertyPath: m_SizeDelta.y value: -17 objectReference: {fileID: 0} - m_RemovedComponents: [] + m_RemovedComponents: + - {fileID: 7986066519765048852, guid: 72cde32427f7d914692a7b0d22fb791d, type: 3} m_RemovedGameObjects: [] m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 72cde32427f7d914692a7b0d22fb791d, type: 3} +--- !u!1001 &509618438222383851 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1725111928} + m_Modifications: + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_SizeDelta.x + value: 62.421 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_SizeDelta.y + value: 43.9 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3192591419784585419, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6060365352283784422, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + propertyPath: m_Name + value: Image + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 6060365352283784422, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + insertIndex: -1 + addedObject: {fileID: 1277422235} + m_SourcePrefab: {fileID: 100100000, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} +--- !u!114 &509618438222383852 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8897095238084646223, guid: 5ca0674a45754094baf7e91a0869238f, type: 3} + m_PrefabInstance: {fileID: 509618438222383851} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c6f899d1c5ef450bb6f3e670fa55cffd, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1001 &561707863834017811 PrefabInstance: m_ObjectHideFlags: 0 @@ -3594,119 +5467,6 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 97884168f61531647ba02870b2e2160f, type: 3} ---- !u!1001 &1176865964342248740 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 2062509144} - m_Modifications: - - target: {fileID: 6633399472656308268, guid: 1b1aef36872c4f44a907f96bf813e8e5, type: 3} - propertyPath: m_Pivot.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 6633399472656308268, guid: 1b1aef36872c4f44a907f96bf813e8e5, type: 3} - propertyPath: m_Pivot.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 6633399472656308268, guid: 1b1aef36872c4f44a907f96bf813e8e5, type: 3} - propertyPath: m_AnchorMax.x - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 6633399472656308268, guid: 1b1aef36872c4f44a907f96bf813e8e5, type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6633399472656308268, guid: 1b1aef36872c4f44a907f96bf813e8e5, type: 3} - propertyPath: m_AnchorMin.x - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 6633399472656308268, guid: 1b1aef36872c4f44a907f96bf813e8e5, type: 3} - propertyPath: m_AnchorMin.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6633399472656308268, guid: 1b1aef36872c4f44a907f96bf813e8e5, type: 3} - propertyPath: m_SizeDelta.x - value: 100 - objectReference: {fileID: 0} - - target: {fileID: 6633399472656308268, guid: 1b1aef36872c4f44a907f96bf813e8e5, type: 3} - propertyPath: m_SizeDelta.y - value: 5 - objectReference: {fileID: 0} - - target: {fileID: 6633399472656308268, guid: 1b1aef36872c4f44a907f96bf813e8e5, type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6633399472656308268, guid: 1b1aef36872c4f44a907f96bf813e8e5, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6633399472656308268, guid: 1b1aef36872c4f44a907f96bf813e8e5, type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6633399472656308268, guid: 1b1aef36872c4f44a907f96bf813e8e5, type: 3} - propertyPath: m_LocalRotation.w - value: 0.7071068 - objectReference: {fileID: 0} - - target: {fileID: 6633399472656308268, guid: 1b1aef36872c4f44a907f96bf813e8e5, type: 3} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 6633399472656308268, guid: 1b1aef36872c4f44a907f96bf813e8e5, type: 3} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 6633399472656308268, guid: 1b1aef36872c4f44a907f96bf813e8e5, type: 3} - propertyPath: m_LocalRotation.z - value: 0.7071068 - objectReference: {fileID: 0} - - target: {fileID: 6633399472656308268, guid: 1b1aef36872c4f44a907f96bf813e8e5, type: 3} - propertyPath: m_AnchoredPosition.x - value: -9.999939 - objectReference: {fileID: 0} - - target: {fileID: 6633399472656308268, guid: 1b1aef36872c4f44a907f96bf813e8e5, type: 3} - propertyPath: m_AnchoredPosition.y - value: 52 - objectReference: {fileID: 0} - - target: {fileID: 6633399472656308268, guid: 1b1aef36872c4f44a907f96bf813e8e5, type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6633399472656308268, guid: 1b1aef36872c4f44a907f96bf813e8e5, type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6633399472656308268, guid: 1b1aef36872c4f44a907f96bf813e8e5, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 90 - objectReference: {fileID: 0} - - target: {fileID: 7666974979659500467, guid: 1b1aef36872c4f44a907f96bf813e8e5, type: 3} - propertyPath: m_Name - value: Bar - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 1b1aef36872c4f44a907f96bf813e8e5, type: 3} ---- !u!224 &1176865964342248741 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 6633399472656308268, guid: 1b1aef36872c4f44a907f96bf813e8e5, type: 3} - m_PrefabInstance: {fileID: 1176865964342248740} - m_PrefabAsset: {fileID: 0} ---- !u!114 &1176865964342248742 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 8924509912883067279, guid: 1b1aef36872c4f44a907f96bf813e8e5, type: 3} - m_PrefabInstance: {fileID: 1176865964342248740} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a5026699f3a94f029628af90ccd8fa8d, type: 3} - m_Name: - m_EditorClassIdentifier: --- !u!1001 &3215589691918074709 PrefabInstance: m_ObjectHideFlags: 0 @@ -3860,6 +5620,114 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: afbed11ea0c7e944aa36a71951b00ad6, type: 3} +--- !u!1001 &6105138323762792695 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 689340257} + m_Modifications: + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_SizeDelta.x + value: -40 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_SizeDelta.y + value: -40 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1225146130447774669, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1665787281938857491, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + propertyPath: m_Name + value: icon + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} +--- !u!114 &6105138323762792696 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 4750466675787535420, guid: e9ac5cdd8d06ee841931abb21e710490, type: 3} + m_PrefabInstance: {fileID: 6105138323762792695} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c6f899d1c5ef450bb6f3e670fa55cffd, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1001 &6268679642209076924 PrefabInstance: m_ObjectHideFlags: 0 @@ -3952,6 +5820,10 @@ PrefabInstance: propertyPath: m_Name value: Pause objectReference: {fileID: 0} + - target: {fileID: 8396046402299122671, guid: 620f2670398686943a232c5a71a6f1d5, type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] m_AddedGameObjects: [] @@ -3965,6 +5837,18 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 1236970686} m_Modifications: + - target: {fileID: 992367162028424711, guid: 1b140ccde6242874785fb30e18322eab, type: 3} + propertyPath: m_SizeDelta.x + value: 250 + objectReference: {fileID: 0} + - target: {fileID: 1914629702951577723, guid: 1b140ccde6242874785fb30e18322eab, type: 3} + propertyPath: m_SizeDelta.x + value: 300 + objectReference: {fileID: 0} + - target: {fileID: 1914629702951577723, guid: 1b140ccde6242874785fb30e18322eab, type: 3} + propertyPath: m_AnchoredPosition.x + value: 160 + objectReference: {fileID: 0} - target: {fileID: 2669798517361862450, guid: 1b140ccde6242874785fb30e18322eab, type: 3} propertyPath: m_Name value: EntityPlacementUI @@ -3973,10 +5857,42 @@ PrefabInstance: propertyPath: m_IsActive value: 0 objectReference: {fileID: 0} + - target: {fileID: 4475653812953191369, guid: 1b140ccde6242874785fb30e18322eab, type: 3} + propertyPath: m_fontSize + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 4475653812953191369, guid: 1b140ccde6242874785fb30e18322eab, type: 3} + propertyPath: m_fontSizeBase + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 4541848766221811720, guid: 1b140ccde6242874785fb30e18322eab, type: 3} + propertyPath: m_text + value: "\u8BF4\u660E\u6587\u672C\u8BF4\u660E\u6587\u672C\u8BF4\u660E\u6587\u672C\u8BF4\u660E\u6587\u672C\u8BF4\u660E\u6587\u672C\u8BF4\u660E\u6587\u672C\u8BF4\u660E\u6587\u672C\u8BF4\u660E\u6587\u672C\u8BF4\u660E\u6587\u672C\u8BF4\u660E\u6587\u672C\u8BF4\u660E\u6587\u672C\u8BF4\u660E\u6587\u672C\u8BF4\u660E\u6587\u672C\u8BF4\u660E\u6587\u672C\u8BF4\u660E\u6587\u672C\u8BF4\u660E\u6587\u672C\u8BF4\u660E\u6587\u672C\u8BF4\u660E\u6587\u672C\u8BF4\u660E\u6587\u672C\u8BF4\u660E\u6587\u672C\u8BF4\u660E\u6587\u672C\u8BF4\u660E\u6587\u672C\u8BF4\u660E\u6587\u672C\u8BF4\u660E\u6587\u672C\u8BF4\u660E\u6587\u672C\u8BF4\u660E\u6587\u672C" + objectReference: {fileID: 0} + - target: {fileID: 4541848766221811720, guid: 1b140ccde6242874785fb30e18322eab, type: 3} + propertyPath: m_fontSize + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 4541848766221811720, guid: 1b140ccde6242874785fb30e18322eab, type: 3} + propertyPath: m_fontSizeBase + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 5585349297193151846, guid: 1b140ccde6242874785fb30e18322eab, type: 3} + propertyPath: m_fontSize + value: 16 + objectReference: {fileID: 0} + - target: {fileID: 5585349297193151846, guid: 1b140ccde6242874785fb30e18322eab, type: 3} + propertyPath: m_fontSizeBase + value: 16 + objectReference: {fileID: 0} - target: {fileID: 7402578691222625163, guid: 1b140ccde6242874785fb30e18322eab, type: 3} propertyPath: focusBox value: objectReference: {fileID: 111982856} + - target: {fileID: 7782696062465364445, guid: 1b140ccde6242874785fb30e18322eab, type: 3} + propertyPath: m_SizeDelta.x + value: 300 + objectReference: {fileID: 0} - target: {fileID: 8654739876786722101, guid: 1b140ccde6242874785fb30e18322eab, type: 3} propertyPath: m_Pivot.x value: 0.5 diff --git a/Client/Assets/Scenes/Initiate.unity b/Client/Assets/Scenes/Initiate.unity index b1ee7f1..873a70e 100644 --- a/Client/Assets/Scenes/Initiate.unity +++ b/Client/Assets/Scenes/Initiate.unity @@ -119,140 +119,41 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1001 &114698586 -PrefabInstance: +--- !u!1 &117511564 +GameObject: m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 1482151278} - m_Modifications: - - target: {fileID: 190104900697248908, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_Name - value: ButtonTemplate (2) - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_Pivot.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_Pivot.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_AnchorMax.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_AnchorMin.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_AnchorMin.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_SizeDelta.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_SizeDelta.y - value: 30 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5723833987058492246, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_text - value: "\u8BBE\u7F6E" - objectReference: {fileID: 0} - - target: {fileID: 8827200521422920569, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.size - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 8827200521422920569, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Mode - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 8827200521422920569, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target - value: - objectReference: {fileID: 863426611} - - target: {fileID: 8827200521422920569, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_CallState - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 8827200521422920569, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName - value: SettingsButton - objectReference: {fileID: 0} - - target: {fileID: 8827200521422920569, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName - value: UI.EscUI, Assembly-CSharp - objectReference: {fileID: 0} - - target: {fileID: 8827200521422920569, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName - value: UnityEngine.Object, UnityEngine - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: f0afd08be12de0d43af753af4f618da4, type: 3} ---- !u!224 &114698587 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - m_PrefabInstance: {fileID: 114698586} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 117511565} + m_Layer: 0 + m_Name: Buttons + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &117511565 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 117511564} + 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: 388897426} + - {fileID: 693329423} + - {fileID: 1141579898} + - {fileID: 1981008546} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &187000032 GameObject: m_ObjectHideFlags: 0 @@ -267,7 +168,7 @@ GameObject: - component: {fileID: 187000033} m_Layer: 0 m_Name: Camera - m_TagString: Untagged + m_TagString: MainCamera m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 @@ -384,7 +285,7 @@ Transform: m_GameObject: {fileID: 187000032} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -1.0606768, y: 1.6407344, z: -10} + m_LocalPosition: {x: 0, y: 0, z: -10} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] @@ -659,6 +560,11 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 97884168f61531647ba02870b2e2160f, type: 3} +--- !u!4 &388897426 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + m_PrefabInstance: {fileID: 522222124029275044} + m_PrefabAsset: {fileID: 0} --- !u!1 &400281624 GameObject: m_ObjectHideFlags: 0 @@ -985,143 +891,90 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0, y: 0} ---- !u!1001 &682858363 +--- !u!1001 &693329422 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: serializedVersion: 3 - m_TransformParent: {fileID: 1482151278} + m_TransformParent: {fileID: 117511565} m_Modifications: - - target: {fileID: 190104900697248908, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_Name - value: ButtonTemplate - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_Pivot.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_Pivot.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_AnchorMax.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_AnchorMin.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_AnchorMin.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_SizeDelta.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_SizeDelta.y - value: 30 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5723833987058492246, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_text - value: "\u5F00\u59CB" - objectReference: {fileID: 0} - - target: {fileID: 8827200521422920569, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.size - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 8827200521422920569, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Mode - value: 5 - objectReference: {fileID: 0} - - target: {fileID: 8827200521422920569, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target - value: - objectReference: {fileID: 1848984429} - - target: {fileID: 8827200521422920569, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_CallState + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalScale.x value: 2 objectReference: {fileID: 0} - - target: {fileID: 8827200521422920569, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName - value: ToScene + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalScale.y + value: 2 objectReference: {fileID: 0} - - target: {fileID: 8827200521422920569, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName - value: Base.Launcher, Assembly-CSharp + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalScale.z + value: 2 objectReference: {fileID: 0} - - target: {fileID: 8827200521422920569, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_StringArgument - value: Game + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalPosition.x + value: -2.93 objectReference: {fileID: 0} - - target: {fileID: 8827200521422920569, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName - value: UnityEngine.Object, UnityEngine + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalPosition.y + value: -5.58 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalPosition.z + value: -3.82 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9508396 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalRotation.x + value: -0.15270276 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalRotation.y + value: 0.26880196 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalRotation.z + value: -0.018206691 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: -16.296 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 32.572 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: -6.985 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_ConstrainProportionsScale + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2412502657045938467, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_Name + value: Saving + objectReference: {fileID: 0} + - target: {fileID: 3761108353443528858, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_text + value: "\u5B58\u6863" objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: f0afd08be12de0d43af753af4f618da4, type: 3} ---- !u!224 &682858364 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - m_PrefabInstance: {fileID: 682858363} + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 3805996714208757134, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + insertIndex: -1 + addedObject: {fileID: 0} + m_SourcePrefab: {fileID: 100100000, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} +--- !u!4 &693329423 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + m_PrefabInstance: {fileID: 693329422} m_PrefabAsset: {fileID: 0} --- !u!224 &862239518 stripped RectTransform: @@ -1133,150 +986,167 @@ RectTransform: m_CorrespondingSourceObject: {fileID: 1633840166558733415, guid: 97884168f61531647ba02870b2e2160f, type: 3} m_PrefabInstance: {fileID: 360627886} m_PrefabAsset: {fileID: 0} ---- !u!114 &863426611 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 4955394867221047595, guid: 97884168f61531647ba02870b2e2160f, type: 3} - m_PrefabInstance: {fileID: 360627886} +--- !u!1 &911482831 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 911482833} + - component: {fileID: 911482832} + m_Layer: 0 + m_Name: CameraControl + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &911482832 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 911482831} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 7eac7c56e1474c4ea646c0a408d293a3, type: 3} + m_Script: {fileID: 11500000, guid: f749a65b381541fab3f5dd5e487a457b, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1001 &1130712157 + isGlobal: 1 + _zoomSpeed: 5 + _minZoom: 2 + _maxZoom: 20 + _focusLerpSpeed: 5 +--- !u!4 &911482833 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 911482831} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1680.2731, y: 36.15279, 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!1001 &1141579897 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: serializedVersion: 3 - m_TransformParent: {fileID: 1482151278} + m_TransformParent: {fileID: 117511565} m_Modifications: - - target: {fileID: 190104900697248908, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_Name - value: ButtonTemplate (3) - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_Pivot.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_Pivot.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_AnchorMax.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_AnchorMin.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_AnchorMin.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_SizeDelta.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_SizeDelta.y - value: 30 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5723833987058492246, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_text - value: "\u9000\u51FA" - objectReference: {fileID: 0} - - target: {fileID: 8827200521422920569, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.size - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 8827200521422920569, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Mode - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 8827200521422920569, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target - value: - objectReference: {fileID: 863426611} - - target: {fileID: 8827200521422920569, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_CallState + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalScale.x value: 2 objectReference: {fileID: 0} - - target: {fileID: 8827200521422920569, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName - value: ExitButton + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalScale.y + value: 2 objectReference: {fileID: 0} - - target: {fileID: 8827200521422920569, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalScale.z + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalPosition.x + value: 3.29 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalPosition.y + value: -5.45 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalPosition.z + value: -0.34 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9508396 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalRotation.x + value: -0.15270276 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalRotation.y + value: 0.26880196 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalRotation.z + value: -0.018206691 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: -16.296 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 32.572 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: -6.985 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_ConstrainProportionsScale + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2412502657045938467, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_Name + value: Setting + objectReference: {fileID: 0} + - target: {fileID: 3761108353443528858, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_text + value: "\u8BBE\u7F6E" + objectReference: {fileID: 0} + - target: {fileID: 8989378577537570065, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8989378577537570065, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Mode + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8989378577537570065, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 4955394867221047595, guid: 97884168f61531647ba02870b2e2160f, type: 3} + - target: {fileID: 8989378577537570065, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_CallState + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 8989378577537570065, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: SettingsButton + objectReference: {fileID: 0} + - target: {fileID: 8989378577537570065, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName value: UI.EscUI, Assembly-CSharp objectReference: {fileID: 0} - - target: {fileID: 8827200521422920569, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName + - target: {fileID: 8989378577537570065, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName value: UnityEngine.Object, UnityEngine objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: f0afd08be12de0d43af753af4f618da4, type: 3} ---- !u!224 &1130712158 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - m_PrefabInstance: {fileID: 1130712157} + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 3805996714208757134, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + insertIndex: -1 + addedObject: {fileID: 0} + m_SourcePrefab: {fileID: 100100000, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} +--- !u!4 &1141579898 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + m_PrefabInstance: {fileID: 1141579897} m_PrefabAsset: {fileID: 0} --- !u!1 &1145531077 GameObject: @@ -1490,7 +1360,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 194192103} - - {fileID: 1482151278} m_Father: {fileID: 668892717} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -1498,190 +1367,6 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!1 &1482151277 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1482151278} - - component: {fileID: 1482151279} - m_Layer: 5 - m_Name: Button - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &1482151278 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1482151277} - 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: 682858364} - - {fileID: 1705599414} - - {fileID: 114698587} - - {fileID: 1130712158} - m_Father: {fileID: 1344781620} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 0} - m_AnchoredPosition: {x: 0, y: 50} - m_SizeDelta: {x: -200, y: 100} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1482151279 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1482151277} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 1 - m_Spacing: 0 - m_ChildForceExpandWidth: 1 - m_ChildForceExpandHeight: 1 - m_ChildControlWidth: 1 - m_ChildControlHeight: 0 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 - m_ReverseArrangement: 0 ---- !u!1001 &1705599413 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 1482151278} - m_Modifications: - - target: {fileID: 190104900697248908, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_Name - value: ButtonTemplate (1) - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_Pivot.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_Pivot.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_AnchorMax.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_AnchorMin.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_AnchorMin.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_SizeDelta.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_SizeDelta.y - value: 30 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5723833987058492246, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_text - value: "\u5B58\u6863" - objectReference: {fileID: 0} - - target: {fileID: 8827200521422920569, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.size - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 8827200521422920569, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Mode - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 8827200521422920569, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_CallState - value: 2 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: f0afd08be12de0d43af753af4f618da4, type: 3} ---- !u!224 &1705599414 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 1690722858018107951, guid: f0afd08be12de0d43af753af4f618da4, type: 3} - m_PrefabInstance: {fileID: 1705599413} - m_PrefabAsset: {fileID: 0} --- !u!1 &1848984427 GameObject: m_ObjectHideFlags: 0 @@ -1731,6 +1416,119 @@ MonoBehaviour: describeText: {fileID: 1145531079} duration: 0 fadeDuration: 0 +--- !u!1001 &1981008545 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 117511565} + m_Modifications: + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalScale.x + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalScale.y + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalScale.z + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalPosition.x + value: 8.95 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalPosition.y + value: -5.5 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalPosition.z + value: -3.94 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9508396 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalRotation.x + value: -0.15270276 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalRotation.y + value: 0.26880196 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalRotation.z + value: -0.018206691 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: -16.296 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 32.572 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: -6.985 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_ConstrainProportionsScale + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2412502657045938467, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_Name + value: Exit + objectReference: {fileID: 0} + - target: {fileID: 3761108353443528858, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_text + value: "\u9000\u51FA" + objectReference: {fileID: 0} + - target: {fileID: 8989378577537570065, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8989378577537570065, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Mode + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8989378577537570065, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 4955394867221047595, guid: 97884168f61531647ba02870b2e2160f, type: 3} + - target: {fileID: 8989378577537570065, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_CallState + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 8989378577537570065, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: ExitButton + objectReference: {fileID: 0} + - target: {fileID: 8989378577537570065, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName + value: UI.EscUI, Assembly-CSharp + objectReference: {fileID: 0} + - target: {fileID: 8989378577537570065, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: UnityEngine.Object, UnityEngine + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 3805996714208757134, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + insertIndex: -1 + addedObject: {fileID: 0} + m_SourcePrefab: {fileID: 100100000, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} +--- !u!4 &1981008546 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + m_PrefabInstance: {fileID: 1981008545} + m_PrefabAsset: {fileID: 0} --- !u!1 &1989361079 GameObject: m_ObjectHideFlags: 0 @@ -1819,6 +1617,118 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &522222124029275044 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 117511565} + m_Modifications: + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalScale.x + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalScale.y + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalScale.z + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalPosition.x + value: -8.96 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalPosition.y + value: -5.49 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9508396 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalRotation.x + value: -0.15270276 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalRotation.y + value: 0.26880196 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalRotation.z + value: -0.018206691 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: -16.296 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 32.572 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: -6.985 + objectReference: {fileID: 0} + - target: {fileID: 709533242955877997, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_ConstrainProportionsScale + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2412502657045938467, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_Name + value: Start + objectReference: {fileID: 0} + - target: {fileID: 3761108353443528858, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: m_text + value: "\u5F00\u59CB" + objectReference: {fileID: 0} + - target: {fileID: 8989378577537570065, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8989378577537570065, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Mode + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 8989378577537570065, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 1848984429} + - target: {fileID: 8989378577537570065, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_CallState + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 8989378577537570065, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: ToScene + objectReference: {fileID: 0} + - target: {fileID: 8989378577537570065, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName + value: Base.Launcher, Assembly-CSharp + objectReference: {fileID: 0} + - target: {fileID: 8989378577537570065, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_StringArgument + value: Game + objectReference: {fileID: 0} + - target: {fileID: 8989378577537570065, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: UnityEngine.Object, UnityEngine + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 3805996714208757134, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} + insertIndex: -1 + addedObject: {fileID: 0} + m_SourcePrefab: {fileID: 100100000, guid: 04bb56c29e3de4248a236f83c889ca7d, type: 3} --- !u!1001 &3159610982499366409 PrefabInstance: m_ObjectHideFlags: 0 @@ -2256,3 +2166,5 @@ SceneRoots: - {fileID: 336157946} - {fileID: 597126023} - {fileID: 1200712023} + - {fileID: 117511565} + - {fileID: 911482833} diff --git a/Client/Assets/Scripts/Base/Clock.cs b/Client/Assets/Scripts/Base/Clock.cs index 6ba6772..6c640c4 100644 --- a/Client/Assets/Scripts/Base/Clock.cs +++ b/Client/Assets/Scripts/Base/Clock.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; -using Utils; +using Utils; // 假设此命名空间包含MonoSingleton namespace Base { @@ -25,120 +25,239 @@ namespace Base private bool _pause = false; public bool Pause { - get - { - return _pause; - } + get => _pause; set { - if (value) + if (value != _pause) // 逻辑修改说明:避免重复设置Time.timeScale { - Time.timeScale = 0; + Time.timeScale = value ? 0 : 1; + _pause = value; } - else - { - Time.timeScale = 1; - } - _pause = value; } } - public List tickPhysics = new(); - public List ticks = new(); - public List tickUIs = new(); + + // 修改点 1.1:主列表用于迭代 + private readonly List _ticks = new(); + private readonly List _tickPhysics = new(); + private readonly List _tickUIs = new(); + + // 修改点 1.1:缓冲列表用于添加 + private readonly HashSet _ticksToAdd = new(); // 逻辑修改说明:使用HashSet避免重复添加,提高查找效率 + private readonly HashSet _tickPhysicsToAdd = new(); + private readonly HashSet _tickUIsToAdd = new(); + + // 修改点 1.1:缓冲列表用于移除 + private readonly HashSet _ticksToRemove = new(); // 逻辑修改说明:使用HashSet避免重复移除,提高查找效率 + private readonly HashSet _tickPhysicsToRemove = new(); + private readonly HashSet _tickUIsToRemove = new(); private void Update() { + // 逻辑修改说明:UI部分的Tick不应受_pause影响 if (!_pause) - foreach (var tick in ticks) + { + // 逻辑修改说明:迭代时使用只读副本或确保不会被修改 + // 这里是直接迭代_ticks,确保_ticks在Update生命周期内不会被Add/Remove直接修改 + // 添加和移除操作通过缓冲区在LateUpdate处理 + foreach (var tick in _ticks) + { tick.Tick(); - - foreach (var uiTick in tickUIs) uiTick.TickUI(); - //if (timer > 1) - //{ - // timer -= 1; - // Debug.Log("滴答"); - //} - //timer += Time.deltaTime; + } + } + // UI更新通常不受游戏暂停影响(例如菜单动画、UI计时器等),除非UI本身也需要暂停逻辑。 + // 根据需求决定是否受_pause影响。此处假设UI不暂停。 + foreach (var uiTick in _tickUIs) + { + uiTick.TickUI(); + } } private void FixedUpdate() { if (!_pause) - foreach (var physicsTick in tickPhysics) + { + foreach (var physicsTick in _tickPhysics) + { physicsTick.TickPhysics(); + } + } } + // 修改点 1.4:在LateUpdate应用缓冲区的更改 + private void LateUpdate() + { + ApplyBufferedChanges(); + } + + // 修改点 3.1:OnDestroy保持不变,确保事件移除 private void OnDestroy() { - // 移除事件监听 SceneManager.sceneLoaded -= OnSceneLoaded; } - protected override void OnStart() + // 修改点 3.1:OnStart保持不变,负责事件注册和初始化 + protected override void OnStart() // MonoSingleton的Awake后调用 { - // 注册场景加载事件 SceneManager.sceneLoaded += OnSceneLoaded; - - // 初始化时调用一次 - Init(); + // 逻辑修改说明:Initial清理所有列表,而不是填充 + Init(); } private void OnSceneLoaded(Scene scene, LoadSceneMode mode) { - // 场景加载完成后调用 Init 方法 Init(); } ///

- /// 初始化方法 + /// 初始化/重置方法。清空所有注册列表和缓冲列表。 /// + // 修改点 2.1:Init() 方法不再负责FindObjectsByType public void Init() { - ticks.Clear(); - tickPhysics.Clear(); - tickUIs.Clear(); + _ticks.Clear(); + _tickPhysics.Clear(); + _tickUIs.Clear(); + _ticksToAdd.Clear(); + _tickPhysicsToAdd.Clear(); + _tickUIsToAdd.Clear(); + + _ticksToRemove.Clear(); + _tickPhysicsToRemove.Clear(); + _tickUIsToRemove.Clear(); + + // 逻辑修改说明:移除 FindObjectsByType 逻辑 + // 对象应通过其各自的 OnEnable/OnDisable 生命周期来注册/反注册 foreach (var obj in FindObjectsByType(FindObjectsSortMode.None)) { - if (obj is ITick tickObj) ticks.Add(tickObj); - if (obj is ITickPhysics physicsObj) tickPhysics.Add(physicsObj); - if (obj is ITickUI uiObj) tickUIs.Add(uiObj); + if (obj is ITick tickObj) _ticks.Add(tickObj); + if (obj is ITickPhysics physicsObj) _tickPhysics.Add(physicsObj); + if (obj is ITickUI uiObj) _tickUIs.Add(uiObj); } } + + // 修改点 1.2 & 1.3:将更改放入缓冲,并在LateUpdate统一处理 public static void AddTick(ITick tick) { - if (Instance != null && !Instance.ticks.Contains(tick)) - Instance.ticks.Add(tick); + if (Instance != null && tick != null) // 逻辑修改说明:添加null检查 + { + Instance._ticksToAdd.Add(tick); + Instance._ticksToRemove.Remove(tick); // 逻辑修改说明:如果在待移除列表,则先移除 + } } public static void RemoveTick(ITick tick) { - if (Instance != null) - Instance.ticks.Remove(tick); + if (Instance != null && tick != null) // 逻辑修改说明:添加null检查 + { + Instance._ticksToRemove.Add(tick); + Instance._ticksToAdd.Remove(tick); // 逻辑修改说明:如果在待添加列表,则先移除 + } } public static void AddTickPhysics(ITickPhysics physics) { - if (Instance != null && !Instance.tickPhysics.Contains(physics)) - Instance.tickPhysics.Add(physics); + if (Instance != null && physics != null) + { + Instance._tickPhysicsToAdd.Add(physics); + Instance._tickPhysicsToRemove.Remove(physics); + } } public static void RemoveTickPhysics(ITickPhysics physics) { - if (Instance != null) - Instance.tickPhysics.Remove(physics); + if (Instance != null && physics != null) + { + Instance._tickPhysicsToRemove.Add(physics); + Instance._tickPhysicsToAdd.Remove(physics); + } } public static void AddTickUI(ITickUI ui) { - if (Instance != null && !Instance.tickUIs.Contains(ui)) - Instance.tickUIs.Add(ui); + if (Instance != null && ui != null) + { + Instance._tickUIsToAdd.Add(ui); + Instance._tickUIsToRemove.Remove(ui); + } } public static void RemoveTickUI(ITickUI ui) { - if (Instance != null) - Instance.tickUIs.Remove(ui); + if (Instance != null && ui != null) + { + Instance._tickUIsToRemove.Add(ui); + Instance._tickUIsToAdd.Remove(ui); + } + } + + // 修改点 1.3:应用缓冲区的更改 + private void ApplyBufferedChanges() + { + // 先处理移除 + if (_ticksToRemove.Count > 0) + { + foreach (var tick in _ticksToRemove) + { + _ticks.Remove(tick); + } + _ticksToRemove.Clear(); + } + + if (_tickPhysicsToRemove.Count > 0) + { + foreach (var physicsTick in _tickPhysicsToRemove) + { + _tickPhysics.Remove(physicsTick); + } + _tickPhysicsToRemove.Clear(); + } + + if (_tickUIsToRemove.Count > 0) + { + foreach (var uiTick in _tickUIsToRemove) + { + _tickUIs.Remove(uiTick); + } + _tickUIsToRemove.Clear(); + } + + // 后处理添加 + if (_ticksToAdd.Count > 0) + { + foreach (var tick in _ticksToAdd) + { + if (!_ticks.Contains(tick)) // 逻辑修改说明:避免重复添加到主列表 + { + _ticks.Add(tick); + } + } + _ticksToAdd.Clear(); + } + + if (_tickPhysicsToAdd.Count > 0) + { + foreach (var physicsTick in _tickPhysicsToAdd) + { + if (!_tickPhysics.Contains(physicsTick)) + { + _tickPhysics.Add(physicsTick); + } + } + _tickPhysicsToAdd.Clear(); + } + + if (_tickUIsToAdd.Count > 0) + { + foreach (var uiTick in _tickUIsToAdd) + { + if (!_tickUIs.Contains(uiTick)) + { + _tickUIs.Add(uiTick); + } + } + _tickUIsToAdd.Clear(); + } } } -} \ No newline at end of file +} diff --git a/Client/Assets/Scripts/Base/Launcher.cs b/Client/Assets/Scripts/Base/Launcher.cs index 52c3601..9d34ebb 100644 --- a/Client/Assets/Scripts/Base/Launcher.cs +++ b/Client/Assets/Scripts/Base/Launcher.cs @@ -1,42 +1,70 @@ -// C# -using Managers; // 确保日志命名空间正确 using System.Collections; -using System.Collections.Generic; // 新增,用于List -using TMPro; -using UnityEngine; -using UnityEngine.SceneManagement; +using System.Collections.Generic; // 提供List等通用集合类型 +using Logging; // 提供日志记录功能 +using Managers; // 提供管理器接口和实现 +using TMPro; // TextMeshPro文本组件命名空间 +using UnityEngine; // Unity引擎核心命名空间 +using UnityEngine.SceneManagement; // 场景管理命名空间 namespace Base { - // 请确保你在Unity Editor中将 'projectile' 的Inspector引用从 Gradient 更改为 CustomProgressBar - // 或者替换为你实际的进度条组件类型。 - // 如果你没有 CustomProgressBar,而想用 Image 或者别的,这些 Progress/Opacity 属性需要大幅修改。 - + /// + /// Launcher 类负责管理游戏的初始化加载流程,包括管理器加载、进度条显示和场景切换。 + /// + /// + /// 请注意:虽然此处的 progressBar 变量类型被声明为 Gradient, + /// 但其在代码中的使用方式(如访问 color1, color2 属性和调用 Refresh() 方法) + /// 强烈暗示它应引用一个具有类似 API 的自定义进度条组件,例如 CustomProgressBar + /// 如果您使用的是标准 UnityEngine.UI.Image 或其他组件来显示进度, + /// 则 ProgressOpacity 属性的实现逻辑需要根据实际组件的 API 进行大幅修改。 + /// public class Launcher : MonoBehaviour { + /// + /// 加载界面UI的根游戏对象。 + /// public GameObject loadingUI; - // 假设 CustomProgressBar 是一个自定义组件,其 API 与原代码使用方式一致 - // 如果这里是 UnityEngine.UI.Image,需要完全改变 Progress 和 Opacity 的实现 - public Gradient progressBar; // 自定义进度条组件 - public TMP_Text describeText; // 描述文本 - public float duration = 0.5f; // 每个步骤的过渡时间 - public float fadeDuration = 2f; // 不透明度渐隐的时间 + /// + /// 用于显示加载进度的自定义进度条组件。 + /// 请参阅类注释以了解其声明类型与预期API的差异。 + /// + public Gradient progressBar; - private float _currentProgressValue = 0f; // 实际的当前进度值(0-1) - private Color _initialTextColor; // 原始文本颜色,用于渐隐 - private Color _initialProgressBarColor1; // 原始进度条颜色1 - private Color _initialProgressBarColor2; // 原始进度条颜色2 + /// + /// 用于显示当前加载步骤描述的文本组件。 + /// + public TMP_Text describeText; - // 存储所有需要加载和清理的管理器 + /// + /// 进度条每个加载步骤的平滑过渡时间(秒)。 + /// + public float duration = 0.5f; + + /// + /// 加载完成后UI元素渐隐的时间(秒)。 + /// + public float fadeDuration = 2f; + + private float _currentProgressValue = 0f; // 实际的当前进度值(在0到1之间) + private Color _initialTextColor; // 描述文本的原始颜色,用于渐隐效果 + private Color _initialProgressBarColor1; // 进度条颜色1的原始值,用于渐变 + private Color _initialProgressBarColor2; // 进度条颜色2的原始值,用于渐变 + + /// + /// 存储所有需要在启动时加载和在重载时清理的管理器实例列表。 + /// private List _managersToLoad; - // Progress 属性,更新进度条和颜色 + /// + /// 获取或设置加载进度值,范围为0到1。 + /// 设置此属性将更新进度条的视觉显示和颜色。 + /// public float Progress { set { - // 确保进度值在0到1之间,提高健壮性 + // 确保进度值在0到1之间,提高系统健壮性 _currentProgressValue = Mathf.Clamp01(value); if (progressBar) @@ -49,17 +77,23 @@ namespace Base } else { - // 后半段:color2 保持白色,color1 从初始色渐变到白色 progressBar.color2 = Color.white; + // 后半段:color2 保持白色,color1 从初始色渐变到白色 progressBar.color1 = Color.Lerp(_initialProgressBarColor1, Color.white, (_currentProgressValue - 0.5f) * 2); } - progressBar.Refresh(); // 通知自定义进度条组件更新显示 + // 通知自定义进度条组件更新显示。 + // 注意:UnityEngine.Gradient 作为数据结构没有 Refresh() 方法, + // 此调用表明 progressBar 实际上预期是一个具有此方法的自定义组件。 + progressBar.Refresh(); } } get => _currentProgressValue; } - // Opacity 属性,更新 UI 元素的透明度 + /// + /// 获取或设置UI元素的整体不透明度,范围0(完全透明)到1(完全不透明)。 + /// 设置此属性将更新进度条和描述文本的透明度。 + /// public float Opacity { set @@ -77,38 +111,44 @@ namespace Base c2.a = alpha; progressBar.color2 = c2; + // 通知自定义进度条组件更新显示。 + // 注意:UnityEngine.Gradient 作为数据结构没有 Refresh() 方法, + // 此调用表明 progressBar 实际上预期是一个具有此方法的自定义组件。 progressBar.Refresh(); } if (describeText) { // 更新描述文本颜色的透明度 - // 渐隐时,描述文本的透明度在 Opacity > 0.5f 时才开始渐变可见 + // 渐隐时,描述文本的透明度在 Opacity > 0.5f 时才开始从0渐变到其原始透明度 var textAlpha = alpha > 0.5f ? Mathf.Lerp(0f, _initialTextColor.a, (alpha - 0.5f) * 2) : 0f; describeText.color = new Color(_initialTextColor.r, _initialTextColor.g, _initialTextColor.b, textAlpha); } } } + /// + /// 当脚本实例被启用时调用一次。 + /// 用于初始化管理器列表并缓存UI元素的初始颜色。 + /// private void Awake() { - // 在 Awake 中初始化管理器列表并注册,确保在 Start 之前完成 + // 在 Awake 中初始化管理器列表,确保在 Start 之前完成所有管理器实例的注册 _managersToLoad = new List { - Logging.UnityLogger.Instance, // UnityLogger的包装器 - Managers.DefineManager.Instance, - Managers.PackagesImageManager.Instance, - Managers.TileManager.Instance, - Managers.AffiliationManager.Instance, - Managers.ItemResourceManager.Instance - // 当未来有新的管理器时,只需在这里添加 Managers.NewManager.Instance + new LoggerManagerWrapper(), // Unity日志的包装器 + DefineManager.Instance, + PackagesImageManager.Instance, + TileManager.Instance, + AffiliationManager.Instance, + ItemResourceManager.Instance, + EventManager.Instance, + AudioManager.Instance, }; - // 缓存UI的初始颜色,以便后续操作或重置 - if (describeText != null) - { - _initialTextColor = describeText.color; - } + // 缓存UI的初始颜色,以便后续操作(如渐隐)或重置 + _initialTextColor = describeText != null ? describeText.color : Color.white; // 如果为空,则使用默认值 + if (progressBar != null) { _initialProgressBarColor1 = progressBar.color1; @@ -116,61 +156,66 @@ namespace Base } else { - Debug.LogWarning("CustomProgressBar component not assigned to Launcher. Progress bar display may not work."); + // 警告日志:自定义进度条组件未赋值给启动器。 + Debug.LogWarning("自定义进度条组件未赋值给启动器,进度条可能无法正常显示。"); } } + /// + /// 在Awake方法之后、首次帧更新之前调用。 + /// 用于判断是否需要执行完整的加载流程,并根据需要启动加载或隐藏加载UI。 + /// private void Start() { - // 如果 Program.Instance.needLoad 为 true,表示需要完整的(重新)加载流程 - // 否则,如果不需要加载,直接禁用UI并返回 + // 如果 Program.Instance.needLoad 为 false,表示游戏已加载或不需要重新加载,直接隐藏加载UI if (!Program.Instance.needLoad) { loadingUI.SetActive(false); return; } - // 根据 Program.Instance.needLoad 的含义(需要重载), - // 在开始新的加载流程之前,先清理所有可能存在的旧管理器状态。 - // 这确保了每次需要加载时,系统都处于一个干净的初始状态。 - ClearAllManagers(); // <--- 关键修改:在Load()之前调用ClearAllManagers() + // 如果需要加载,则先清理所有管理器(用于重载或确保干净启动),再启动加载流程 + ClearAllManagers(); + + // 初始化游戏设置 + Setting.Instance.Init(); - // 初始化设置 - Base.Setting.Instance.Init(); #if !DEBUG - // 在非DEBUG模式下,从设置中获取过渡时间 - duration = Base.Setting.Instance.CurrentSettings.progressStepDuration; - fadeDuration = Base.Setting.Instance.CurrentSettings.exitAnimationDuration; + // 在非DEBUG模式下,从游戏设置中获取加载和渐隐的持续时间 + duration = Base.Setting.Instance.CurrentSettings.progressStepDuration; + fadeDuration = Base.Setting.Instance.CurrentSettings.exitAnimationDuration; #endif Load(); // 启动加载流程(内部会调用LoadAllManagers) - Program.Instance.needLoad = false; // 加载完成后重置标志 + Program.Instance.needLoad = false; // 加载完成后重置加载标志 } - /// /// 启动游戏的加载流程。 + /// 该方法会激活加载UI,重置进度与透明度,并启动所有管理器的异步加载协程。 /// public void Load() { loadingUI.SetActive(true); // 激活加载UI - Progress = 0f; // 重置进度 - Opacity = 1f; // 重置透明度为完全不透明 + Progress = 0f; // 将进度重置为0 + Opacity = 1f; // 将UI透明度重置为完全不透明 StartCoroutine(LoadAllManagers()); } /// - /// 清理所有管理器,然后重新加载。用于游戏重载或场景切换后需要重新初始化所有数据的情况。 + /// 清理所有管理器,然后重新加载游戏数据。 + /// 此方法适用于游戏重载、场景切换后需要重新初始化所有数据的情况。 /// public void Reload() { - Debug.Log("Performing a full reload of all managers..."); + // 日志:正在执行所有管理器的完整重新加载... + Debug.Log("正在执行所有管理器的完整重新加载..."); StopAllCoroutines(); // 停止当前所有正在运行的加载协程,避免冲突 - ClearAllManagers(); // 清理所有管理器 + ClearAllManagers(); // 清理所有管理器数据 Load(); // 重新加载游戏数据 } /// - /// 遍历所有已注册的管理器并调用它们的 Clear 方法。 + /// 遍历所有已注册的管理器,并安全地调用它们的 Clear 方法以释放资源或重置状态。 /// private void ClearAllManagers() { @@ -182,37 +227,39 @@ namespace Base } catch (System.Exception ex) { - Debug.LogError($"Error clearing manager {manager.StepDescription}: {ex.Message}\n{ex.StackTrace}"); + // 错误日志:清理管理器时发生异常。 + Debug.LogError($"清理管理器 '{manager.StepDescription}' 时出错: {ex.Message}\n{ex.StackTrace}"); } } } /// - /// 协程:按顺序加载所有管理器。 + /// 协程:按顺序加载所有注册的管理器。 + /// 该方法会在加载过程中更新描述文本、平滑过渡进度条,并安全初始化每个管理器。 /// + /// 一个 ,用于协程。 private IEnumerator LoadAllManagers() { for (var i = 0; i < _managersToLoad.Count; i++) { var manager = _managersToLoad[i]; - // 更新描述文本,从管理器实例中获取 + // 更新描述文本,显示当前正在加载的管理器步骤描述 if (describeText != null) { describeText.text = manager.StepDescription; } - // 计算当前阶段的目标进度 + // 计算当前阶段的目标进度值 var targetProgress = (float)(i + 1) / _managersToLoad.Count; // 平滑过渡进度条到下一个目标进度 yield return SmoothTransitionTo(targetProgress); - // 初始化对应的管理器,并进行异常处理 + // 初始化对应的管理器,并处理可能发生的异常 yield return InitializeManagerSafely(manager); - // 模拟耗时,如果管理器Init方法本身很快,可以 uncomment - // yield return new WaitForSeconds(0.1f); + // yield return new WaitForSeconds(0.1f); // 此行代码可用于模拟每个管理器加载的耗时,默认不启用。 } // 所有管理器加载完成后的处理 @@ -220,19 +267,22 @@ namespace Base { describeText.text = "加载完成!"; } - Progress = 1f; // 确保进度条最终达到100% + // 确保进度条最终达到100% + Progress = 1f; - // 开始渐隐效果 + // 启动加载UI的渐隐效果 yield return FadeOutProgressBar(); // 所有加载和动画结束后,可以考虑卸载加载UI,或跳转到主场景 - // ToScene("MainGameScene"); // 如果有需要,在这里跳转到主游戏场景 + // ToScene("MainGameScene"); // 如果有需要,可以在此处调用静态方法跳转到主游戏场景 } /// - /// 尝试安全地初始化单个管理器,并捕获任何异常。 + /// 尝试安全地初始化单个管理器实例,并捕获任何可能发生的异常。 + /// 如果初始化失败,将记录错误日志并更新UI提示。 /// /// 要初始化的管理器实例。 + /// 一个 ,用于协程。 private IEnumerator InitializeManagerSafely(ILaunchManager manager) { var initSuccess = false; @@ -240,36 +290,38 @@ namespace Base try { - manager.Init(); // 调用管理器的 Init 方法 + manager.Init(); // 调用管理器的 Init 方法进行初始化 initSuccess = true; } catch (System.Exception ex) { - initException = ex; // 捕获异常 + initException = ex; // 捕获初始化过程中抛出的异常 } if (!initSuccess && initException != null) { - // 记录错误日志 + // 记录错误日志:初始化管理器时出现错误。 Debug.LogError($"初始化管理器 '{manager.StepDescription}' 时出错: {initException.Message}\n{initException.StackTrace}"); if (describeText != null) { - describeText.text = $"{manager.StepDescription} (初始化失败)"; + describeText.text = $"{manager.StepDescription} (初始化失败)"; // 更新UI显示失败信息 } - // 这里可以添加更复杂的错误处理,例如显示错误弹窗,或者重试逻辑 - // yield break; // 如果错误严重,可以选择停止后续加载 + // 这里可以添加更复杂的错误处理逻辑,例如显示错误弹窗、记录到特定日志文件或允许用户选择重试。 + // yield break; // 如果错误严重到无法继续,可以选择停止后续加载流程。 } - yield return null; // 确保协程继续执行,即使没有做任何事 + yield return null; // 确保协程继续执行,无论初始化成功与否 } /// - /// 协程:平滑过渡进度条到指定的目标进度。 + /// 协程:平滑地过渡进度条的当前值到指定的目标进度。 + /// 使用 Mathf.SmoothStep 实现自然加速和减速的过渡效果。 /// - /// 目标进度值 (0-1)。 + /// 目标进度值 (0到1之间)。 + /// 一个 ,用于协程。 private IEnumerator SmoothTransitionTo(float targetProgress) { - var startProgress = _currentProgressValue; // 获取当前进度作为起始点 + var startProgress = _currentProgressValue; // 获取当前进度作为过渡的起始点 var elapsedTime = 0f; while (elapsedTime < duration) @@ -277,7 +329,7 @@ namespace Base elapsedTime += Time.deltaTime; // 使用 SmoothStep 实现更自然的加速和减速过渡效果 var t = Mathf.SmoothStep(0f, 1f, elapsedTime / duration); - Progress = Mathf.Lerp(startProgress, targetProgress, t); + Progress = Mathf.Lerp(startProgress, targetProgress, t); // 在起始和目标进度之间插值 yield return null; } @@ -285,8 +337,9 @@ namespace Base } /// - /// 协程:渐隐加载UI的透明度。 + /// 协程:平滑渐隐加载UI的所有元素,使其透明度从完全不透明过渡到完全透明。 /// + /// 一个 ,用于协程。 private IEnumerator FadeOutProgressBar() { var elapsedTime = 0f; @@ -305,7 +358,7 @@ namespace Base } /// - /// 静态方法:加载指定名称的场景。 + /// 静态方法:加载指定名称的Unity场景。 /// /// 要加载的场景名称。 public static void ToScene(string scene) @@ -313,7 +366,4 @@ namespace Base SceneManager.LoadScene(scene); } } - } - - diff --git a/Client/Assets/Scripts/Base/Setting.cs b/Client/Assets/Scripts/Base/Setting.cs index 8dca221..5746541 100644 --- a/Client/Assets/Scripts/Base/Setting.cs +++ b/Client/Assets/Scripts/Base/Setting.cs @@ -19,11 +19,13 @@ namespace Base public float globalVolume = 1.0f; public WindowMode currentWindowMode = WindowMode.Fullscreen; public Vector2Int windowResolution = new(1920, 1080); + + public string[] loadOrder; } // 当前游戏设置 public GameSettings CurrentSettings = new(); - + // 窗口模式枚举 public enum WindowMode { Fullscreen, Windowed, Borderless } diff --git a/Client/Assets/Scripts/Base/UIInputControl.cs b/Client/Assets/Scripts/Base/UIInputControl.cs index 7612dca..114351f 100644 --- a/Client/Assets/Scripts/Base/UIInputControl.cs +++ b/Client/Assets/Scripts/Base/UIInputControl.cs @@ -1,3 +1,4 @@ +using System; // Added for Action using System.Collections.Generic; using System.Linq; using UI; @@ -7,7 +8,7 @@ using UnityEngine.SceneManagement; namespace Base { /// - /// UI窗口输入控制和管理类 + /// UI窗口输入控制和管理类。 /// 负责根据输入显示/隐藏UI,并根据UI状态管理游戏暂停。 /// public class UIInputControl : Utils.MonoSingleton, ITickUI @@ -18,8 +19,59 @@ namespace Base private readonly List _visibleWindows = new List(); private bool needUpdate = false; + /// - /// 查找并注册场景中所有的UI窗口,包括非激活状态的 + /// 当UI窗口的可见性状态发生改变时触发的事件。 + /// 参数1: 发生改变的UIBase实例。 + /// 参数2: 窗口的新可见状态 (true为显示,false为隐藏)。 + /// + public event Action OnWindowVisibilityChanged; // <--- 新增 + + /// + /// 获取所有已注册的UI窗口的总数量。 + /// + public int AllWindowCount => _allWindows.Count; + + /// + /// 获取当前可见的UI窗口的数量。 + /// + public int VisibleWindowCount => _visibleWindows.Count; + + /// + /// 查询指定名称的UI窗口是否当前可见。 + /// + /// UI窗口的名称。 + /// 如果窗口可见则返回true,否则返回false。 + public bool IsWindowVisible(string uiName) + { + // 使用 Any() 方法检查 _visibleWindows 列表中是否存在名称匹配且可见的窗口 + return _visibleWindows.Any(window => window != null && window.name == uiName && window.IsVisible); + } + + /// + /// 查询指定名称的UI窗口是否当前处于可见状态且占用了输入。 + /// + /// UI窗口的名称。 + /// 如果窗口可见且占用了输入则返回true,否则返回false。 + public bool IsWindowInputOccupied(string uiName) + { + // 检查 _visibleWindows 列表中是否存在名称匹配且同时占用输入的窗口 + return _visibleWindows.Any(window => window != null && window.name == uiName && window.IsVisible && window.isInputOccupied); + } + + /// + /// 根据名称获取已注册的UI窗口实例。 + /// + /// UI窗口的名称。 + /// 匹配的UIBase实例,如果未找到则返回null。 + public UIBase GetWindow(string uiName) + { + // 从 _allWindows 列表中查找第一个名称匹配的窗口 + return _allWindows.FirstOrDefault(window => window != null && window.name == uiName); + } + + /// + /// 查找并注册场景中所有的UI窗口,包括非激活状态的。 /// private void RegisterAllWindows() { @@ -29,7 +81,7 @@ namespace Base var activeScene = UnityEngine.SceneManagement.SceneManager.GetActiveScene(); if (!activeScene.isLoaded) { - Debug.LogWarning("当前场景未加载,无法注册窗口!"); + Debug.LogWarning("[UIInputControl] 当前场景未加载,无法注册窗口!"); return; } @@ -46,22 +98,22 @@ namespace Base // 初始化所有窗口为隐藏状态 foreach (var window in _allWindows) { + // 确保窗口不为空且其GameObject未被销毁 if (window != null && window.gameObject != null) { - window.Hide(); + window.Hide(); // 隐藏操作会触发 OnWindowVisibilityChanged 事件 } } needUpdate = true; - Debug.Log($"窗口数量{_allWindows.Count}"); } /// - /// UI逻辑更新循环,需要被外部的某个管理器在Update中调用 + /// UI逻辑更新循环,需要被外部的某个管理器在Update中调用。 /// public void TickUI() { - //使用这个是为了让输入独占窗口关闭自己后不会立即激活其他窗口的按键,延迟一帧 + // 使用这个是为了让输入独占窗口关闭自己后不会立即激活其他窗口的按键,延迟一帧 if (needUpdate) { // 更新可见窗口缓存和暂停状态 @@ -70,12 +122,19 @@ namespace Base needUpdate = false; return; } - if (_visibleWindows.Any(window => window.isInputOccupied)) + + // 如果有任何可见窗口占用了输入,则阻止其他窗口通过按键进行操作 + if(_visibleWindows.Any(window => window && window.isInputOccupied)) return; + foreach (var window in _allWindows) { + // 确保窗口不为空且其GameObject未被销毁 + if (!window || !window.gameObject) continue; + // 检查窗口是否设置了有效的激活按键,并且该按键在本帧被按下 if (window.actionButton == KeyCode.None || !Input.GetKeyDown(window.actionButton)) continue; + if (window.IsVisible) { // 如果窗口当前是可见的,且未占用输入,则通过按键隐藏它 @@ -93,20 +152,26 @@ namespace Base } /// - /// 公开的显示窗口方法 + /// 公开的显示窗口方法。 /// - /// 要显示的窗口 + /// 要显示的窗口。 public void Show(UIBase windowToShow) { - if (!windowToShow || windowToShow.IsVisible) return; + // 确保窗口不为空且未被销毁,并且当前不可见 + if (!windowToShow || !windowToShow.gameObject || windowToShow.IsVisible) return; // 如果窗口是独占的,隐藏所有其他窗口 if (windowToShow.exclusive) { - var windowsToHide = new List(_visibleWindows); + // 创建一个副本进行迭代,防止在 Hide() 调用中修改 _visibleWindows 导致迭代器失效 + var windowsToHide = _visibleWindows.ToList(); foreach (var visibleWindow in windowsToHide) { - Hide(visibleWindow); + // 确保窗口不是要显示的窗口本身,且仍然可见 + if (visibleWindow && visibleWindow != windowToShow && visibleWindow.IsVisible) + { + Hide(visibleWindow); + } } } @@ -115,62 +180,93 @@ namespace Base var itick = windowToShow as ITickUI; if (itick != null) Base.Clock.AddTickUI(itick); + + // 触发事件通知窗口可见性已改变 + OnWindowVisibilityChanged?.Invoke(windowToShow, true); // <--- 修改点 2 needUpdate = true; } + /// + /// 根据名称显示UI窗口。 + /// + /// 要显示的UI窗口名称。 public void Show(string uiName) { - foreach (var window in _allWindows) + // 使用 GetWindow 方法获取窗口实例 + var window = GetWindow(uiName); + if (window != null) { - if (window.name == uiName) - { - Show(window); - return; - } + Show(window); + return; } - Debug.LogWarning($"未找到窗口{uiName}"); + Debug.LogWarning($"[UIInputControl] 未找到名称为 '{uiName}' 的窗口来显示。"); } - - + /// - /// 公开的隐藏窗口方法 + /// 公开的隐藏窗口方法。 /// - /// 要隐藏的窗口 + /// 要隐藏的窗口。 public void Hide(UIBase windowToHide) { - if (!windowToHide || !windowToHide.IsVisible) return; + // 确保窗口不为空且未被销毁,并且当前可见 + if (!windowToHide || !windowToHide.gameObject || !windowToHide.IsVisible) return; - // 隐藏目标窗口并更新缓存与暂停状态 + // 隐藏目标窗口 windowToHide.Hide(); + // 当UI窗口被隐藏时,如果它实现了ITickUI接口,则必须将其从Clock中移除。 + // 这防止了隐藏窗口继续被Tick,避免性能开销和潜在的NullReferenceException。 + if (windowToHide is ITickUI iTick) + Base.Clock.RemoveTickUI(iTick); + + // 触发事件通知窗口可见性已改变 + OnWindowVisibilityChanged?.Invoke(windowToHide, false); // <--- 修改点 3 + needUpdate = true; } + + /// + /// 根据名称隐藏UI窗口。 + /// + /// 要隐藏的UI窗口名称。 public void Hide(string uiName) { - foreach (var visibleWindow in _visibleWindows) + // 仅在可见窗口中查找并隐藏,更符合HideByName的即时操作期望 + // 如果需要隐藏所有名称匹配的窗口(包括隐藏的),则需要遍历 _allWindows + var visibleWindowToHide = _visibleWindows.FirstOrDefault(window => window != null && window.name == uiName && window.IsVisible); + if (visibleWindowToHide != null) { - if (visibleWindow.name == uiName) + Hide(visibleWindowToHide); + return; + } + Debug.LogWarning($"[UIInputControl] 未找到名称为 '{uiName}' 且当前可见的窗口来隐藏。"); + } + + /// + /// 隐藏所有当前可见的UI窗口。 + /// + public void HideAll() + { + // 创建 _visibleWindows 的一个副本进行迭代,以避免在循环中修改原列表导致迭代器失效 + var windowsToHide = _visibleWindows.ToList(); + foreach (var visibleWindow in windowsToHide) + { + // 再次检查窗口是否仍然可见,因为其他操作可能已经隐藏了它 + if (visibleWindow != null && visibleWindow.IsVisible) { - Hide(visibleWindow); - break; + Hide(visibleWindow); // Hide() 方法会触发 OnWindowVisibilityChanged 事件 } } } - public void HideAll() - { - foreach (var visibleWindow in _visibleWindows) - { - Hide(visibleWindow); - } - } /// - /// 根据当前所有可见窗口的 needPause 属性来更新游戏时钟的暂停状态 + /// 根据当前所有可见窗口的 needPause 属性来更新游戏时钟的暂停状态。 /// private void UpdatePauseState() { - var shouldPause = _visibleWindows.Any(w => w.needPause); + // 确保 _visibleWindows 中的窗口都有效 + var shouldPause = _visibleWindows.Any(w => w && w.needPause); if (Base.Clock.Instance.Pause != shouldPause) { Base.Clock.Instance.Pause = shouldPause; @@ -178,35 +274,55 @@ namespace Base } /// - /// 更新当前可见窗口的缓存列表 + /// 更新当前可见窗口的缓存列表。 /// private void UpdateVisibleWindowsCache() { _visibleWindows.Clear(); foreach (var window in _allWindows) { - if (window.IsVisible) + if (window && window.IsVisible) // 确保窗口有效且可见 { _visibleWindows.Add(window); } } } + /// + /// 当脚本实例被销毁时调用。 + /// 用于在销毁时取消订阅场景加载事件,防止内存泄漏。 + /// private void OnDestroy() { SceneManager.sceneLoaded -= OnSceneLoaded; + // 在销毁时清空所有订阅者,防止因MonoSingleton持久化导致下一场景重新加载时出现旧的订阅者(如果单例不销毁,事件本身也不会自动清空订阅) + // 如果 UIInputControl 是一个会随场景销毁的普通 MonoBehaviour 而不是持久化的 MonoSingleton, 某些情况下清除订阅者可以防止跨场景的引用问题。 + // 但对于 MonoSingleton,它通常是持久化的,所以事件在重新加载场景后仍然保留。明确清空可以避免不必要的资源占用,虽然在应用程序关闭时会自动释放。 + // OnWindowVisibilityChanged = null; // 谨慎使用,如果外部有长期订阅的需求,清空可能导致问题。通常更推荐外部在OnDestroy中取消订阅。 } + /// + /// MonoSingleton 的 OnStart 方法,在单例首次创建并激活时调用,早于普通的 Start 方法。 + /// 用于订阅场景加载事件并在首次启动时注册UI窗口。 + /// protected override void OnStart() { + // 订阅场景加载事件,以便在新场景加载后重新注册UI窗口 SceneManager.sceneLoaded += OnSceneLoaded; - + // 首次启动时也注册一次窗口(例如在进入第一个场景时)。 RegisterAllWindows(); } + /// + /// 当场景加载完成时调用。 + /// 用于在场景加载后重新查找并注册所有UI窗口。 + /// + /// 已加载的场景。 + /// 场景加载模式。 private void OnSceneLoaded(Scene scene, LoadSceneMode mode) { + // 当场景加载时,重新查找并注册所有UI窗口 RegisterAllWindows(); } } -} \ No newline at end of file +} diff --git a/Client/Assets/Scripts/CameraControl/CameraControl.cs b/Client/Assets/Scripts/CameraControl/CameraControl.cs index 22eb500..fd085e1 100644 --- a/Client/Assets/Scripts/CameraControl/CameraControl.cs +++ b/Client/Assets/Scripts/CameraControl/CameraControl.cs @@ -1,233 +1,288 @@ using Base; +using Map; using UnityEngine; -using UnityEngine.SceneManagement; namespace CameraControl { - public class CameraControl : Utils.MonoSingleton, ITick, ITickUI + /// + /// 控制游戏摄像机的移动、缩放和维度切换。 + /// 继承自 MonoSingleton 以确保场景中只有一个实例,并实现 ITick 接口以在游戏循环中更新。 + /// + public class CameraControl : Utils.MonoSingleton, ITick { - // Camera movement variables - [SerializeField] private float _zoomSpeed = 5f; - [SerializeField] private float _minZoom = 2f; - [SerializeField] private float _maxZoom = 20f; - [SerializeField] private float _focusLerpSpeed = 5f; + // 摄像机移动相关变量 + [SerializeField] private float _zoomSpeed = 5f; // 摄像机缩放速度 + [SerializeField] private float _minZoom = 2f; // 摄像机最小缩放级别(正交摄像机的 orthographicSize) + [SerializeField] private float _maxZoom = 20f; // 摄像机最大缩放级别 + [SerializeField] private float _focusLerpSpeed = 5f; // 摄像机跟随目标时的平滑插值速度 - private Vector3 _dragOrigin; - private bool _isDragging = false; + private Vector3 _dragOrigin; // 拖拽操作的起始世界坐标 + private bool _isDragging; // 标记摄像机是否正在被拖拽 - private Camera _camera; + private Camera _cachedCamera; // 缓存的场景摄像机引用 - private int dimensionId; - private string[] dimensionList; - - - private void OnDestroy() + /// + /// 获取当前生效的场景摄像机。懒加载并缓存。 + /// + public Camera CurrentCamera { - // 移除事件监听 - SceneManager.sceneLoaded -= OnSceneLoaded; + get + { + if (!_cachedCamera) + { + _cachedCamera = Camera.main; // 尝试获取主摄像机 + if (!_cachedCamera) // 如果主摄像机不存在或未标记,则尝试查找场景中的第一个摄像机 + { + Debug.LogWarning("[CameraControl] 未找到主摄像机,正在尝试查找场景中第一个Camera类型的对象。"); + _cachedCamera = FindFirstObjectByType(); + } + + if (!_cachedCamera) + { + Debug.LogError("[CameraControl] 场景中未找到可用的摄像机!摄像机控制功能将受限。"); + } + } + + return _cachedCamera; + } } + private int dimensionId; // 当前摄像机控制器关注的维度索引 + private string[] dimensionList; // 维度名称列表 + + /// + /// MonoSingleton 的 OnStart 方法,在单例首次创建并激活时调用,早于普通的 Start 方法。 + /// 用于初始化摄像机缓存。 + /// protected override void OnStart() { - // 注册场景加载事件。请注意,MonoSingleton中的OnStart通常由Awake调用。 - // 真正的Init调用已移至Start方法,以确保Program.Instance已完成其Awake阶段的初始化。 - SceneManager.sceneLoaded += OnSceneLoaded; + Program.Instance.OnFocusedDimensionChanged += Init; } - private void Start() + /// + /// 当脚本实例被销毁时调用。 + /// 用于取消订阅 Program.Instance 的事件,防止内存泄漏。 + /// + private void OnDestroy() { - // 在Start中调用Init,确保所有依赖的单例(如Program.Instance)已完成Awake阶段的初始化。 - Init(); - } - - private void OnSceneLoaded(Scene scene, LoadSceneMode mode) - { - // 场景加载完成后调用 Init 方法,重新获取相机引用并初始化维度状态。 - // 这确保了如果CameraControl是DontDestroyOnLoad,在切换场景后也能正确工作。 - Init(); + Program.Instance.OnFocusedDimensionChanged -= Init; } - private void Init() + /// + /// 根据指定的维度对象初始化摄像机控制器。 + /// 主要用于在聚焦维度改变时更新摄像机状态和内部的维度ID。 + /// + /// 当前聚焦的维度对象。 + private void Init(Dimension obj) { - // 确保相机引用有效 - if (_camera == null) - { - _camera = Camera.main; - if (_camera == null) - { - _camera = FindFirstObjectByType(); - } - } - - if (_camera == null) - { - Debug.LogError("No Camera found in the scene! CameraControl functionalities will be limited."); - return; // 如果没有相机,则无法进行后续初始化 - } - - // 初始化维度数据 (假设 Program.Instance 总是已初始化) - dimensionId = 0; // 默认从第一个维度开始 dimensionList = Program.Instance.Dimensions; - if (dimensionList != null && dimensionList.Length > 0) + + if (!CurrentCamera) // 如果摄像机仍未找到,记录错误并返回 { - SetCameraPositionForDimension(0); + Debug.LogError("[CameraControl] 未找到摄像机!摄像机控制功能将无法完全初始化。"); + return; + } + + // 处理 obj 为 null 的情况 - 此时 dimensionList 已更新 + if (!obj) + { + Debug.LogWarning("[CameraControl] Init方法在聚焦维度为空时调用。维度列表已更新,但摄像机状态未基于特定维度设置。"); + return; + } + + // 根据当前聚焦维度同步 CameraControl 内部的 dimensionId + int focusedIndex = System.Array.IndexOf(dimensionList, obj.name); + if (focusedIndex != -1) + { + dimensionId = focusedIndex; } else { - Debug.LogWarning("Dimension list is empty or null from Program.Instance. Cannot set initial camera position for dimensions."); + Debug.LogWarning($"[CameraControl] 聚焦维度 '{obj.name}' 未在维度列表中找到。回退到ID 0。"); + dimensionId = 0; // 找不到时,回退到第一个维度,避免数组越界 + } + + // 设置摄像机位置到当前聚焦维度的位置 + if (Program.Instance.FocusedDimension != null) + { + CurrentCamera.transform.position = Program.Instance.FocusedDimension.cameraPosition; + } + else + { + Debug.LogWarning("[CameraControl] 尝试设置摄像机位置时,聚焦维度为空。摄像机位置未明确根据维度更新。"); } } + /// + /// 调用带参数的 Init 方法,使用 Program.Instance 中当前聚焦的维度。 + /// + private void Init() + { + Init(Program.Instance.FocusedDimension); + } + + /// + /// 切换到下一个维度。 + /// 会保存当前摄像机位置到当前维度,然后加载下一个维度的摄像机位置。 + /// public void NextDimension() { - if (_camera == null) + if (!CurrentCamera) { - Debug.LogWarning("Camera reference is null, cannot switch dimensions."); - return; - } - if (dimensionList == null || dimensionList.Length == 0) - { - Debug.LogWarning("Dimension list is empty."); + Debug.LogWarning("[CameraControl] 摄像机引用为空,无法切换维度。"); return; } - // 1. 保存当前相机的真实位置到当前维度 (假设 Program.Instance 总是已初始化) - // 维度ID范围检查仍然保留,因为这是数组访问的安全保障 + if (dimensionList == null || dimensionList.Length == 0) + { + Debug.LogWarning("[CameraControl] 维度列表为空或未初始化,无法切换维度。"); + return; + } + + // 1. 保存当前摄像机的实际位置到当前维度 if (dimensionId >= 0 && dimensionId < dimensionList.Length) { - // Program.Instance 假设不会为 null var currentDimension = Program.Instance.GetDimension(dimensionList[dimensionId]); if (currentDimension != null) { - currentDimension.cameraPosition = _camera.transform.position; - // Debug.Log($"Saved camera position {currentDimension.cameraPosition} for dimension {dimensionList[dimensionId]} (ID: {dimensionId})"); + currentDimension.cameraPosition = CurrentCamera.transform.position; } else { - Debug.LogWarning($"Could not find dimension object for ID {dimensionId} ({dimensionList[dimensionId]}) to save camera position."); + Debug.LogWarning( + $"[CameraControl] 无法找到ID为 {dimensionId} ({dimensionList[dimensionId]}) 的维度对象,无法保存摄像机位置。"); } } else { - Debug.LogWarning($"Current dimensionId ({dimensionId}) is out of bounds for saving camera position (dimensionList length: {dimensionList.Length})."); + Debug.LogWarning( + $"[CameraControl] 当前维度ID ({dimensionId}) 超出范围,无法保存摄像机位置(维度列表长度: {dimensionList.Length})。"); } - // 2. 更新 dimensionId,形成循环 + // 2. 更新 dimensionId, 形成循环切换 dimensionId = (dimensionId + 1) % dimensionList.Length; - // 3. 更新相机位置到新维度 - SetCameraPositionForDimension(dimensionId); + // 3. 更新聚焦维度,摄像机位置的更新将由事件触发的 Init 方法处理 + SetFocusedDimensionById(dimensionId); } - private void SetCameraPositionForDimension(int id) + /// + /// 设置 Program.Instance 中聚焦的维度。 + /// 摄像机位置的实际更新将通过 Program.Instance.OnFocusedDimensionChanged 事件在 Init(Dimension obj) 方法中处理。 + /// + /// 要设置的维度ID。 + private void SetFocusedDimensionById(int id) { - if (_camera == null) + if (!CurrentCamera) { - Debug.LogWarning("Camera reference is null, cannot set camera position."); + Debug.LogWarning("[CameraControl] 摄像机引用为空,无法设置摄像机位置。"); return; } + if (dimensionList == null || id < 0 || id >= dimensionList.Length) { - Debug.LogWarning($"Dimension ID {id} is out of bounds or dimension list is null/empty."); + Debug.LogWarning($"[CameraControl] 维度ID {id} 超出范围或维度列表为空,无法设置聚焦维度。"); return; } - // Program.Instance 假设不会为 null - // 确保获取到的 Dimension 对象不为 null - var dimension = Program.Instance.GetDimension(dimensionList[id]); - if (dimension) - { - Vector3 cameraPosition = dimension.cameraPosition; - _camera.transform.position = cameraPosition; - } - else - { - Debug.LogWarning($"Dimension object for ID {id} ({dimensionList[id]}) is null. Cannot set camera position."); - } + Program.Instance.SetFocusedDimension(dimensionList[id]); } + /// + /// 在游戏循环中每帧调用,用于处理摄像机跟随聚焦实体和维度切换。 + /// public void Tick() { - if (_camera == null) return; // 确保相机存在 + if (!CurrentCamera) return; // 确保相机存在 - // 假设 Program.Instance 总是已初始化 - if (Program.Instance.FocusedEntity) + // 当没有拖拽且存在聚焦实体时,摄像机跟随聚焦实体 + if (!_isDragging && Program.Instance.FocusedEntity) { var targetPosition = new Vector3( Program.Instance.FocusedEntity.Position.x, Program.Instance.FocusedEntity.Position.y, - _camera.transform.position.z); + CurrentCamera.transform.position.z); - // 使用 deltaTime 进行平滑的相机跟随 - _camera.transform.position = Vector3.Lerp( - _camera.transform.position, + // 使用 deltaTime 进行平滑的摄像机跟随 + CurrentCamera.transform.position = Vector3.Lerp( + CurrentCamera.transform.position, targetPosition, Time.deltaTime * _focusLerpSpeed); } - + HandleMiddleMouseDrag(); // 处理鼠标中键拖拽 + // HandleMouseZoom(); // 处理鼠标滚轮缩放 + // 按下 Tab 键时切换到下一个维度 if (Input.GetKeyDown(KeyCode.Tab)) { NextDimension(); } + } + - public void TickUI() - { - if (!_camera) // 确保相机存在 - return; - - HandleMiddleMouseDrag(); - // HandleMouseZoom(); - } - + /// + /// 设置摄像机的世界坐标位置。 + /// + /// 要设置的摄像机位置。 public void SetPosition(Vector3 position) { - if (_camera) - _camera.transform.position = position; + if (CurrentCamera) + { + CurrentCamera.transform.position = position; + } else - Debug.LogWarning("Camera reference is null, cannot set position."); + { + Debug.LogWarning("[CameraControl] 摄像机引用为空,无法设置位置。"); + } } + /// + /// 处理鼠标中键拖拽摄像机的逻辑。 + /// private void HandleMiddleMouseDrag() { - if (_camera == null) return; // 确保相机存在 + if (!CurrentCamera) return; // 确保相机存在 - // Start drag - if (Input.GetMouseButtonDown(2)) // Middle mouse button + // 开始拖拽:检测鼠标中键按下 + if (Input.GetMouseButtonDown(2)) // 鼠标中键 { - _dragOrigin = _camera.ScreenToWorldPoint(Input.mousePosition); + _dragOrigin = CurrentCamera.ScreenToWorldPoint(Input.mousePosition); _isDragging = true; - // 假设 Program.Instance 总是已初始化 + // 如果有聚焦实体,则在开始拖拽时取消聚焦,暂停跟随 if (Program.Instance.FocusedEntity) { - Program.Instance.FocusedEntity.PlayerControlled = false; Program.Instance.SetFocusedEntity(null); } } - // During drag + // 拖拽中:根据鼠标移动更新摄像机位置 if (Input.GetMouseButton(2) && _isDragging) { - var difference = _dragOrigin - _camera.ScreenToWorldPoint(Input.mousePosition); - _camera.transform.position += difference; + var difference = _dragOrigin - CurrentCamera.ScreenToWorldPoint(Input.mousePosition); + CurrentCamera.transform.position += difference; } - // End drag + // 结束拖拽:检测鼠标中键抬起 if (Input.GetMouseButtonUp(2)) { _isDragging = false; } } + /// + /// 处理鼠标滚轮缩放摄像机的逻辑。 + /// private void HandleMouseZoom() { - if (_camera == null) return; // 确保相机存在 + if (!CurrentCamera) return; // 确保相机存在 var scroll = Input.GetAxis("Mouse ScrollWheel"); - if (scroll == 0) return; - var newSize = _camera.orthographicSize - scroll * _zoomSpeed; - _camera.orthographicSize = Mathf.Clamp(newSize, _minZoom, _maxZoom); + if (scroll == 0) return; // 没有滚轮滚动,则返回 + + // 根据滚轮输入调整正交摄像机的尺寸,并限制在最小和最大缩放之间 + var newSize = CurrentCamera.orthographicSize - scroll * _zoomSpeed; + CurrentCamera.orthographicSize = Mathf.Clamp(newSize, _minZoom, _maxZoom); } } -} +} \ No newline at end of file diff --git a/Client/Assets/Scripts/Configs/ConfigProcessor.cs b/Client/Assets/Scripts/Configs/ConfigProcessor.cs index 17747ff..f978ea3 100644 --- a/Client/Assets/Scripts/Configs/ConfigProcessor.cs +++ b/Client/Assets/Scripts/Configs/ConfigProcessor.cs @@ -3,152 +3,22 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using System.Threading.Tasks; +// 未在提供代码段中使用,但保留以便与原始上下文保持一致 +// 未在提供代码段中使用,但保留以便与原始上下文保持一致 using System.Xml.Linq; +// 未在提供代码段中使用,但保留以便与原始上下文保持一致 using UnityEngine; -using Formatting = Newtonsoft.Json.Formatting; +using UnityEngine.Networking; + +// 未在提供代码段中使用,但保留以便与原始上下文保持一致 + +// 未在提供代码段中使用,但保留以便与原始上下文保持一致 namespace Configs { public static class ConfigProcessor { - // 保存文件的默认文件夹路径 - private const string FolderPath = "save"; - - /// - /// 初始化文件夹 - /// - static ConfigProcessor() - { - if (!Directory.Exists(FolderPath)) Directory.CreateDirectory(FolderPath); - } - - /// - /// 保存单个类为 JSON 文件 - /// - /// 要保存的类对象 - /// 可选的文件名(不包括扩展名) - public static bool SaveFile(T obj, string fileName = null) - { - try - { - // 如果未提供文件名,则使用类名作为文件名 - if (string.IsNullOrEmpty(fileName)) fileName = typeof(T).Name; - - // 构建完整的文件路径 - var filePath = Path.Combine(FolderPath, fileName + ".json"); - - // 将对象序列化为 JSON 字符串 - var jsonContent = JsonConvert.SerializeObject(obj, Formatting.Indented); - - // 写入文件 - File.WriteAllText(filePath, jsonContent); - - Debug.Log($"Saved file: {filePath}"); - - return true; - } - catch (Exception ex) - { - Debug.LogError($"Failed to save file: {ex.Message}"); - return false; - } - } - - /// - /// 从 JSON 文件读取单个类 - /// - /// 文件名(不包括扩展名) - public static T LoadFile(string fileName) - { - try - { - // 构建完整的文件路径 - var filePath = Path.Combine(FolderPath, fileName + ".json"); - - // 检查文件是否存在 - if (!File.Exists(filePath)) - { - Debug.LogError($"File not found: {filePath}"); - return default; - } - - // 读取文件内容 - var jsonContent = File.ReadAllText(filePath); - - // 反序列化为指定类型的对象 - var obj = JsonConvert.DeserializeObject(jsonContent); - - Debug.Log($"Loaded file: {filePath}"); - return obj; - } - catch (Exception ex) - { - Debug.LogError($"Failed to load file: {ex.Message}"); - return default; - } - } - - /// - /// 打包多个类并保存为一个存档文件 - /// - /// 存档文件名(不包括扩展名) - /// 要保存的类对象字典 - public static bool SaveArchive(string archiveName, Dictionary objects) - { - try - { - // 构建完整的文件路径 - var filePath = Path.Combine(FolderPath, archiveName + ".archive.json"); - - // 将字典中的对象序列化为 JSON - var jsonContent = JsonConvert.SerializeObject(objects, Formatting.Indented); - - // 写入文件 - File.WriteAllText(filePath, jsonContent); - - Debug.Log($"Saved archive: {filePath}"); - return true; - } - catch (Exception ex) - { - Debug.LogError($"Failed to save archive: {ex.Message}"); - return false; - } - } - - /// - /// 从存档文件中读取多个类 - /// - /// 存档文件名(不包括扩展名) - public static Dictionary LoadArchive(string archiveName) - { - try - { - // 构建完整的文件路径 - var filePath = Path.Combine(FolderPath, archiveName + ".archive.json"); - - // 检查文件是否存在 - if (!File.Exists(filePath)) - { - Debug.LogError($"Archive not found: {filePath}"); - return null; - } - - // 读取文件内容 - var jsonContent = File.ReadAllText(filePath); - - // 反序列化为字典 - var objects = JsonConvert.DeserializeObject>(jsonContent); - - Debug.Log($"Loaded archive: {filePath}"); - return objects; - } - catch (Exception ex) - { - Debug.LogError($"Failed to load archive: {ex.Message}"); - return null; - } - } /// /// 获取指定路径下的所有xml文件 @@ -161,29 +31,25 @@ namespace Configs foreach (var path in paths) { - try { // 检查目录是否存在 if (!Directory.Exists(path)) { + // **逻辑修改 1.1**: 将静默跳过改为记录警告,提供更友好的提示。 + Debug.LogWarning($"警告: 指定路径不存在或无法访问 - {path}"); continue; } - // 获取目录下的所有子文件夹 - var subDirectories = Directory.GetDirectories(path); - - // 遍历并收集每个子文件夹中的 XML 文件 - foreach (var dir in subDirectories) - { - var xmlFiles = Directory.GetFiles(dir, "*.xml", SearchOption.AllDirectories); - xmlFilePaths.AddRange(xmlFiles); - } - + // **逻辑修改 1.2**: 原始逻辑仅遍历子文件夹,导致根路径下的XML文件被忽略。 + // 现修改为直接获取当前路径及其所有子目录中的 XML 文件。 + var xmlFiles = Directory.GetFiles(path, "*.xml", SearchOption.AllDirectories); + xmlFilePaths.AddRange(xmlFiles); } catch (Exception ex) { - Debug.LogError($"加载文件时发生错误: {ex.Message}"); + // 优化错误信息,明确是哪个路径出现问题 + Debug.LogError($"获取路径 '{path}' 下的XML文件时发生错误: {ex.Message}"); } } @@ -300,20 +166,19 @@ namespace Configs } // 检查文件是否存在 - if (!System.IO.File.Exists(filePath)) + if (!File.Exists(filePath)) { Debug.LogError($"文件不存在: {filePath}"); return null; } - byte[] bytes = null; + byte[] bytes; try { // 使用 using 自动管理 FileStream 的生命周期 using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { - fs.Seek(0, SeekOrigin.Begin); // 将游标移动到文件开头(可选) bytes = new byte[fs.Length]; // 创建一个字节数组来存储文件内容 fs.Read(bytes, 0, bytes.Length); // 读取文件内容到字节数组 } @@ -383,11 +248,93 @@ namespace Configs } catch (UnauthorizedAccessException ex) { - // 可选:记录日志或忽略无权限目录 - Console.WriteLine($"访问被拒绝: {ex.Message}"); + // **逻辑修改 3**: 在 Unity 环境中,应使用 Debug.LogError 而非 Console.WriteLine 记录错误。 + Debug.LogError($"访问目录 '{directoryPath}' 被拒绝: {ex.Message}"); } return result; } + /// + /// 根据文件路径推断音频类型。 + /// + /// 音频文件的完整路径。 + /// 推断出的 AudioType,如果无法推断则返回 AudioType.UNKNOWN。 + private static AudioType GetAudioTypeFromFilePath(string filePath) + { + string ext = Path.GetExtension(filePath)?.ToLower(); // 获取扩展名并转小写 + switch (ext) + { + case ".wav": return AudioType.WAV; + case ".mp3": return AudioType.MPEG; + case ".ogg": return AudioType.OGGVORBIS; + case ".aiff": return AudioType.AIFF; + // 可以根据需要添加更多常见的音频类型 + default: + Debug.LogWarning($"警告: 未知音频文件类型 '{ext}' for file '{filePath}'. 尝试使用 AudioType.UNKNOWN."); + return AudioType.UNKNOWN; // 让Unity尝试自动检测,但成功率可能不如指定类型高 + } + } + /// + /// 从外部指定文件中异步加载音频。 + /// 注意:此方法是异步的,需要使用 await 调用。在Unity主线程中调用以避免潜在的线程问题。 + /// + /// 音频文件的完整路径。 + /// Task,其结果为加载成功的 AudioClip 对象,或加载失败时返回 null。 + public static async Task LoadAudioByIO(string filePath) + { + if (string.IsNullOrEmpty(filePath)) + { + Debug.LogError("音频文件路径为空,请检查输入!"); + return null; + } + + if (!File.Exists(filePath)) + { + Debug.LogError($"音频文件不存在: {filePath}"); + return null; + } + + // UnityWebRequest需要使用file://协议来访问本地文件 + string uri = "file://" + Path.GetFullPath(filePath); + // 根据文件扩展名推断音频类型 + AudioType audioType = GetAudioTypeFromFilePath(filePath); + + using (UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip(uri, audioType)) + { + try + { + // 发送请求并等待完成 + // await www.SendWebRequest(); 是核心,它会异步执行网络请求。 + // 如果在Unity Editor中遇到“You are trying to load data from a www stream that had a non-OK status”等错误, + // 可以检查文件路径和文件权限。 + await www.SendWebRequest(); + + // 检查请求结果 + // www.isNetworkError 或 www.isHttpError 在较新的Unity版本中已弃用, + // 推荐使用 www.result。 + if (www.result == UnityWebRequest.Result.ConnectionError || www.result == UnityWebRequest.Result.ProtocolError) + { + Debug.LogError($"加载音频文件 '{filePath}' 失败: {www.error}"); + return null; + } + else + { + // 获取下载的AudioClip + AudioClip clip = DownloadHandlerAudioClip.GetContent(www); + if (clip == null) + { + Debug.LogError($"未能从文件 '{filePath}' 获取 AudioClip 内容,请检查文件是否损坏或格式是否支持 ({audioType} 类型)."); + } + return clip; + } + } + catch (Exception e) + { + Debug.LogError($"处理音频文件 '{filePath}' 时发生异常: {e.Message}"); + return null; + } + } + } + } -} \ No newline at end of file +} diff --git a/Client/Assets/Scripts/Data/AttributesDef.cs b/Client/Assets/Scripts/Data/AttributesDef.cs index e5524b6..694728e 100644 --- a/Client/Assets/Scripts/Data/AttributesDef.cs +++ b/Client/Assets/Scripts/Data/AttributesDef.cs @@ -8,8 +8,8 @@ namespace Data public float moveSpeed = 1; public int attack = 1; public int defense = 0; - public int attackSpeed = 2; - public int attackRange = 3; + public float attackSpeed = 2; + public float attackRange = 3; public int attackTargetCount = 1; } } \ No newline at end of file diff --git a/Client/Assets/Scripts/Data/AttributesOffsetDef.cs b/Client/Assets/Scripts/Data/AttributesOffsetDef.cs new file mode 100644 index 0000000..e60108f --- /dev/null +++ b/Client/Assets/Scripts/Data/AttributesOffsetDef.cs @@ -0,0 +1,65 @@ +using Entity; + +namespace Data +{ + public class AttributesOffsetDef : Define + { + // ====================================================================== + // 绝对值偏移 (Added/Subtracted directly) + // ====================================================================== + public float healthOffset = 0f; + public float moveSpeedOffset = 0f; + public float attackOffset = 0f; + public float defenseOffset = 0f; + public float attackSpeedOffset = 0f; + public float attackRangeOffset = 0f; + + public float attackTargetCountOffset = 0f; + + // ====================================================================== + // 百分比偏移 (Multiplied as a factor, e.g., 0.1 for +10%) + // ====================================================================== + public float healthPercentOffset = 0f; // 例如 0.1 表示 +10% + public float moveSpeedPercentOffset = 0f; + public float attackPercentOffset = 0f; + public float defensePercentOffset = 0f; + public float attackSpeedPercentOffset = 0f; + public float attackRangePercentOffset = 0f; + + public float attackTargetCountPercentOffset = 0f; + + /// + /// 重载 + 操作符,用于合并两个 AttributesOffsetDef 实例。 + /// + /// 第一个属性修正定义。 + /// 第二个属性修正定义。 + /// 一个新的 AttributesOffsetDef 实例,包含两个输入的累加值。 + public static AttributesOffsetDef operator +(AttributesOffsetDef a, AttributesOffsetDef b) + { + // 处理 null 情况,如果其中一个为 null,则返回另一个的副本(或一个空实例如果两者都为 null)。 + if (a == null && b == null) return new AttributesOffsetDef(); + if (a == null) return b; // 如果 a 是 null,返回 b 的值 + if (b == null) return a; // 如果 b 是 null,返回 a 的值 + var combined = new AttributesOffsetDef + { + // 绝对值偏移累加 + healthOffset = a.healthOffset + b.healthOffset, + moveSpeedOffset = a.moveSpeedOffset + b.moveSpeedOffset, + attackOffset = a.attackOffset + b.attackOffset, + defenseOffset = a.defenseOffset + b.defenseOffset, + attackSpeedOffset = a.attackSpeedOffset + b.attackSpeedOffset, + attackRangeOffset = a.attackRangeOffset + b.attackRangeOffset, + attackTargetCountOffset = a.attackTargetCountOffset + b.attackTargetCountOffset, + // 百分比偏移累加 + healthPercentOffset = a.healthPercentOffset + b.healthPercentOffset, + moveSpeedPercentOffset = a.moveSpeedPercentOffset + b.moveSpeedPercentOffset, + attackPercentOffset = a.attackPercentOffset + b.attackPercentOffset, + defensePercentOffset = a.defensePercentOffset + b.defensePercentOffset, + attackSpeedPercentOffset = a.attackSpeedPercentOffset + b.attackSpeedPercentOffset, + attackRangePercentOffset = a.attackRangePercentOffset + b.attackRangePercentOffset, + attackTargetCountPercentOffset = a.attackTargetCountPercentOffset + b.attackTargetCountPercentOffset + }; + return combined; + } + } +} \ No newline at end of file diff --git a/Client/Assets/Scripts/Data/AttributesOffsetDef.cs.meta b/Client/Assets/Scripts/Data/AttributesOffsetDef.cs.meta new file mode 100644 index 0000000..41c2a9a --- /dev/null +++ b/Client/Assets/Scripts/Data/AttributesOffsetDef.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: fb6190c213d44e04946784c3a5063e83 +timeCreated: 1756302637 \ No newline at end of file diff --git a/Client/Assets/Scripts/Data/AudioDef.cs b/Client/Assets/Scripts/Data/AudioDef.cs new file mode 100644 index 0000000..35d5460 --- /dev/null +++ b/Client/Assets/Scripts/Data/AudioDef.cs @@ -0,0 +1,7 @@ +namespace Data +{ + public class AudioDef:Define + { + public string path; + } +} \ No newline at end of file diff --git a/Client/Assets/Scripts/Data/AudioDef.cs.meta b/Client/Assets/Scripts/Data/AudioDef.cs.meta new file mode 100644 index 0000000..e63dd23 --- /dev/null +++ b/Client/Assets/Scripts/Data/AudioDef.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ea58fdcb622943429532fd1b9d264340 +timeCreated: 1756397633 \ No newline at end of file diff --git a/Client/Assets/Scripts/Data/DefinePack.cs b/Client/Assets/Scripts/Data/DefinePack.cs index 6444a57..c425e02 100644 --- a/Client/Assets/Scripts/Data/DefinePack.cs +++ b/Client/Assets/Scripts/Data/DefinePack.cs @@ -149,6 +149,8 @@ namespace Data public string packID; public string packRootPath; + public int priority = -1; + public string Name { get diff --git a/Client/Assets/Scripts/Data/DrawingOrderDef.cs b/Client/Assets/Scripts/Data/DrawingOrderDef.cs index 4b54e11..3eb45c1 100644 --- a/Client/Assets/Scripts/Data/DrawingOrderDef.cs +++ b/Client/Assets/Scripts/Data/DrawingOrderDef.cs @@ -231,7 +231,7 @@ namespace Data public List nodes = new(); public string nodeName; public Vector2 position = new(0, 0); - public float FPS = 0.5f; + public float FPS = 1f; public override bool Init(XElement xmlDef) { diff --git a/Client/Assets/Scripts/Data/EntityDef.cs b/Client/Assets/Scripts/Data/EntityDef.cs index 347d092..438e2b7 100644 --- a/Client/Assets/Scripts/Data/EntityDef.cs +++ b/Client/Assets/Scripts/Data/EntityDef.cs @@ -7,8 +7,9 @@ namespace Data public BehaviorTreeDef behaviorTree; public AffiliationDef affiliation; - - + + public DrawNodeDef deathAnimation; + public EventDef[] deathEffects; } diff --git a/Client/Assets/Scripts/Data/EventDef.cs b/Client/Assets/Scripts/Data/EventDef.cs index ed1d4b4..597e96d 100644 --- a/Client/Assets/Scripts/Data/EventDef.cs +++ b/Client/Assets/Scripts/Data/EventDef.cs @@ -1,21 +1,8 @@ namespace Data { - public enum EventType - { - None, - SpawnCharacter, - SpawnBuilding, - SpawnBullet, - SpawnPickup, - SpawnDefaultEntity, - } public class EventDef : Define { - public EventType eventType = EventType.None; - public EntityDef entityDef_Character; // 用于 EventType.SpawnCharacter - public BuildingDef entityDef_Building; // 用于 EventType.SpawnBuilding - public BulletDef entityDef_Bullet; // 用于 EventType.SpawnBullet - public ItemDef entityDef_Pickup; // 用于 EventType.SpawnPickup - public EventDef() { } + public string workClass; + public string value; } } \ No newline at end of file diff --git a/Client/Assets/Scripts/Data/HediffCompDef.cs b/Client/Assets/Scripts/Data/HediffCompDef.cs new file mode 100644 index 0000000..66b187b --- /dev/null +++ b/Client/Assets/Scripts/Data/HediffCompDef.cs @@ -0,0 +1,17 @@ +using System; +using System.Xml.Linq; + +namespace Data +{ + public class HediffCompDef:Define + { + public Type compClass; + public override bool Init(XElement xmlDef) + { + base.Init(xmlDef); + var name = xmlDef.Attribute("class")?.Value??""; + compClass=Type.GetType(name); + return true; + } + } +} \ No newline at end of file diff --git a/Client/Assets/Scripts/Data/HediffCompDef.cs.meta b/Client/Assets/Scripts/Data/HediffCompDef.cs.meta new file mode 100644 index 0000000..56664f5 --- /dev/null +++ b/Client/Assets/Scripts/Data/HediffCompDef.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 92779af4b74648a99930c10376760af6 +timeCreated: 1756303386 \ No newline at end of file diff --git a/Client/Assets/Scripts/Data/HediffDef.cs b/Client/Assets/Scripts/Data/HediffDef.cs new file mode 100644 index 0000000..6b966e8 --- /dev/null +++ b/Client/Assets/Scripts/Data/HediffDef.cs @@ -0,0 +1,13 @@ +using System.Collections.Generic; + +namespace Data +{ + public class HediffDef:Define + { + public float time = -1; + // Hediff的发展阶段列表 + public List stages = new List(); + // 附加的组件列表 + public List comps = new List(); + } +} \ No newline at end of file diff --git a/Client/Assets/Scripts/Data/HediffDef.cs.meta b/Client/Assets/Scripts/Data/HediffDef.cs.meta new file mode 100644 index 0000000..9c662c1 --- /dev/null +++ b/Client/Assets/Scripts/Data/HediffDef.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a4311115be2f4da8a5a27e1bb298928e +timeCreated: 1756303757 \ No newline at end of file diff --git a/Client/Assets/Scripts/Data/HediffStageDef.cs b/Client/Assets/Scripts/Data/HediffStageDef.cs new file mode 100644 index 0000000..c15d4ba --- /dev/null +++ b/Client/Assets/Scripts/Data/HediffStageDef.cs @@ -0,0 +1,8 @@ +namespace Data +{ + public class HediffStageDef:Define + { + public float start; + public AttributesOffsetDef attributesOffset = new(); + } +} \ No newline at end of file diff --git a/Client/Assets/Scripts/Data/HediffStageDef.cs.meta b/Client/Assets/Scripts/Data/HediffStageDef.cs.meta new file mode 100644 index 0000000..728e8f6 --- /dev/null +++ b/Client/Assets/Scripts/Data/HediffStageDef.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 59d3b562e68e40fdaa65e5e6431c58e0 +timeCreated: 1756304101 \ No newline at end of file diff --git a/Client/Assets/Scripts/Data/ImageDef.cs b/Client/Assets/Scripts/Data/ImageDef.cs index 72ab58c..70cc7b2 100644 --- a/Client/Assets/Scripts/Data/ImageDef.cs +++ b/Client/Assets/Scripts/Data/ImageDef.cs @@ -4,7 +4,6 @@ namespace Data { public class ImageDef : Define { - public string name; public string path; public int wCount; public int hCount; @@ -13,7 +12,6 @@ namespace Data public override bool Init(XElement xmlDef) { base.Init(xmlDef); - name = defName; return false; } } diff --git a/Client/Assets/Scripts/Data/MessageDef.cs b/Client/Assets/Scripts/Data/MessageDef.cs new file mode 100644 index 0000000..0807518 --- /dev/null +++ b/Client/Assets/Scripts/Data/MessageDef.cs @@ -0,0 +1,47 @@ +namespace Data +{ + /// + /// 定义提示文本在游戏或应用中显示方式的类别。 + /// Defines categories for how prompt text is displayed in a game or application. + /// + public enum PromptDisplayCategory + { + /// + /// 默认或未分类的显示方式。 + /// Default or uncategorized display method. + /// + Default = 0, + + /// + /// 显示在玩家当前焦点实体(例如NPC或交互物)上方,以聊天气泡的形式呈现。 + /// Displayed as a chat bubble above the player's currently focused entity (e.g., NPC, interactive object). + /// + FocusedEntityChatBubble, + + /// + /// 显示在玩家当前焦点实体(例如NPC或交互物)的头顶,通常是简短的状态、名称或互动提示。 + /// Displayed as text above the player's currently focused entity (e.g., NPC, interactive object), typically for short status, names, or interaction prompts. + /// + FocusedEntityOverheadText, + + /// + /// 大型文本显示在屏幕中央,通常用于重要通知、标题或剧情提示,需要玩家立即注意。 + /// Large text displayed in the center of the screen, typically for important announcements, titles, or narrative prompts that demand immediate player attention. + /// + ScreenCenterLargeText, + + /// + /// 非焦点提示,通常以不易干扰的方式(如屏幕边缘、HUD小字或右下角浮动)显示,提供辅助信息、次要指引或环境提示。 + /// Non-focused hint, typically displayed in a non-intrusive way (e.g., screen corner, small HUD text, or bottom-right floating message) to provide auxiliary information, minor guidance, or environmental cues. + /// + PassiveHint, + + } + + public class MessageDef : Define + { + public PromptDisplayCategory type; + public string text; + public string color; + } +} \ No newline at end of file diff --git a/Client/Assets/Scripts/Data/MessageDef.cs.meta b/Client/Assets/Scripts/Data/MessageDef.cs.meta new file mode 100644 index 0000000..5bd3a04 --- /dev/null +++ b/Client/Assets/Scripts/Data/MessageDef.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8df8531d3d53412e8c299262aeea6f57 +timeCreated: 1756860490 \ No newline at end of file diff --git a/Client/Assets/Scripts/Data/SkillTreeDef.cs b/Client/Assets/Scripts/Data/SkillTreeDef.cs new file mode 100644 index 0000000..6f29de9 --- /dev/null +++ b/Client/Assets/Scripts/Data/SkillTreeDef.cs @@ -0,0 +1,11 @@ +namespace Data +{ + public class SkillTreeDef:Define + { + public string tag="Default"; + public AffiliationDef faction; + public SkillTreeDef[] prerequisites; + public WeaponDef[] unlockedWeapons; + public HediffDef[] unlockedHediffs; + } +} \ No newline at end of file diff --git a/Client/Assets/Scripts/Data/SkillTreeDef.cs.meta b/Client/Assets/Scripts/Data/SkillTreeDef.cs.meta new file mode 100644 index 0000000..0075e6f --- /dev/null +++ b/Client/Assets/Scripts/Data/SkillTreeDef.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 08ca1b39c5b342ceb23bd565d433ac66 +timeCreated: 1756705012 \ No newline at end of file diff --git a/Client/Assets/Scripts/Data/StoryDef.cs b/Client/Assets/Scripts/Data/StoryDef.cs new file mode 100644 index 0000000..62a7ce6 --- /dev/null +++ b/Client/Assets/Scripts/Data/StoryDef.cs @@ -0,0 +1,14 @@ +namespace Data +{ + public class StoryStageDef : Define + { + public float lastWaitTime = 0; + public float nextWaitTime = 0; + public EventDef eventDef; + public MessageDef messageDef; + } + public class StoryDef:Define + { + public StoryStageDef[] storyStage; + } +} \ No newline at end of file diff --git a/Client/Assets/Scripts/Data/StoryDef.cs.meta b/Client/Assets/Scripts/Data/StoryDef.cs.meta new file mode 100644 index 0000000..6923dcd --- /dev/null +++ b/Client/Assets/Scripts/Data/StoryDef.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e11d701b7d8b4af0a947d630884bfeab +timeCreated: 1756306428 \ No newline at end of file diff --git a/Client/Assets/Scripts/Entity/Attributes.cs b/Client/Assets/Scripts/Entity/Attributes.cs index cf88bb7..c6510e9 100644 --- a/Client/Assets/Scripts/Entity/Attributes.cs +++ b/Client/Assets/Scripts/Entity/Attributes.cs @@ -1,3 +1,4 @@ +using System; using Data; namespace Entity @@ -8,9 +9,10 @@ namespace Entity public float moveSpeed = 1; public int attack = 1; public int defense = 0; - public int attackSpeed = 2; - public int attackRange = 3; + public float attackSpeed = 2; + public float attackRange = 3; public int attackTargetCount = 1; + public Attributes(AttributesDef def) { health = def.health; @@ -21,7 +23,108 @@ namespace Entity attackRange = def.attackRange; attackTargetCount = def.attackTargetCount; } + + public Attributes(Attributes other) + { + health = other.health; + moveSpeed = other.moveSpeed; + attack = other.attack; + defense = other.defense; + attackSpeed = other.attackSpeed; + attackRange = other.attackRange; + attackTargetCount = other.attackTargetCount; + } + public Attributes() - { } + { + } + + /// + /// 根据给定的属性偏移,生成一个新的 Attributes 实例。 + /// 原有的 Attributes 实例保持不变。 + /// + /// 要应用的属性偏移定义。 + /// 一个新的 Attributes 实例,包含了应用偏移后的值。 + public Attributes GetModifiedAttributes(AttributesOffsetDef offset) + { + // 1. 创建当前 Attributes 实例的一个副本 + var newAttributes = new Attributes(this); + + if (offset == null) + { + return newAttributes; // 如果没有偏移,直接返回副本 + } + + // 2. 在副本上应用绝对值偏移 + newAttributes.health += (int)offset.healthOffset; + newAttributes.moveSpeed += offset.moveSpeedOffset; + newAttributes.attack += (int)offset.attackOffset; + newAttributes.defense += (int)offset.defenseOffset; + + // 修正: attackSpeed 和 attackRange 是 float,不应强制转换为 int + newAttributes.attackSpeed += offset.attackSpeedOffset; + newAttributes.attackRange += offset.attackRangeOffset; + + newAttributes.attackTargetCount += (int)offset.attackTargetCountOffset; + + // 3. 在副本上应用百分比偏移 (基于应用绝对值偏移后的结果) + newAttributes.health = (int)(newAttributes.health * (1 + offset.healthPercentOffset)); + newAttributes.moveSpeed *= (1 + offset.moveSpeedPercentOffset); + newAttributes.attack = (int)(newAttributes.attack * (1 + offset.attackPercentOffset)); + newAttributes.defense = (int)(newAttributes.defense * (1 + offset.defensePercentOffset)); + + // 修正: attackSpeed 和 attackRange 是 float,不应强制转换为 int + newAttributes.attackSpeed *= (1 + offset.attackSpeedPercentOffset); + newAttributes.attackRange *= (1 + offset.attackRangePercentOffset); + + newAttributes.attackTargetCount = + (int)(newAttributes.attackTargetCount * (1 + offset.attackTargetCountPercentOffset)); + + // 4. 确保属性不低于最小值 + newAttributes.health = Math.Max(0, newAttributes.health); + newAttributes.moveSpeed = Math.Max(0f, newAttributes.moveSpeed); + newAttributes.attack = Math.Max(0, newAttributes.attack); + newAttributes.defense = Math.Max(0, newAttributes.defense); + + // 修正: Math.Max 期望相同类型,0f 对于 float 类型更准确 + newAttributes.attackSpeed = Math.Max(0f, newAttributes.attackSpeed); + newAttributes.attackRange = Math.Max(0f, newAttributes.attackRange); + + newAttributes.attackTargetCount = Math.Max(1, newAttributes.attackTargetCount); + + // 5. 返回修改后的新 Attributes 实例 + return newAttributes; + } + + /// + /// 合并两个 Attributes 实例,生成一个新的 Attributes 实例, + /// 其中每个属性值都取自传入两个实例中对应属性的最小值。 + /// 这对于应用属性上限或限制非常有用。 + /// + /// 第一个 Attributes 实例。 + /// 第二个 Attributes 实例。 + /// 一个新的 Attributes 实例,其属性是输入实例中对应属性的最小值。 + public static Attributes Min(Attributes a, Attributes b) + { + // 处理 null 情况 + if (a == null && b == null) return new Attributes(); // 两者都为null,返回默认空属性 + if (a == null) return new Attributes(b); // a为null,返回b的副本 + if (b == null) return new Attributes(a); // b为null,返回a的副本 + + // 创建一个新的 Attributes 实例来存储结果 + var result = new Attributes + { + health = Math.Min(a.health, b.health), + moveSpeed = Math.Min(a.moveSpeed, b.moveSpeed), + attack = Math.Min(a.attack, b.attack), + defense = Math.Min(a.defense, b.defense), + attackSpeed = Math.Min(a.attackSpeed, b.attackSpeed), + attackRange = Math.Min(a.attackRange, b.attackRange), + attackTargetCount = Math.Min(a.attackTargetCount, b.attackTargetCount) + }; + + return result; + } + } -} \ No newline at end of file +} diff --git a/Client/Assets/Scripts/Entity/Character.cs b/Client/Assets/Scripts/Entity/Character.cs index 7987031..ca480a7 100644 --- a/Client/Assets/Scripts/Entity/Character.cs +++ b/Client/Assets/Scripts/Entity/Character.cs @@ -5,7 +5,7 @@ using UnityEngine; namespace Entity { - public class Character : Entity + public class Character : LivingEntity { private int _currentSelected; // 私有字段用于存储实际值 @@ -21,6 +21,7 @@ namespace Entity var maxIndex = Inventory != null && Inventory.Capacity > 0 ? Inventory.Capacity - 1 : 0; var clampedValue = Mathf.Clamp(value, 0, maxIndex); _currentSelected = clampedValue; + InitWeaponAnimator(); } } @@ -64,29 +65,6 @@ namespace Entity return remainingQuantity; } - // public override void TryAttack() - // { - // if (IsAttacking) - // return; - // if (!DefineManager.Instance.defines.TryGetValue(nameof(BulletDef), out var def)) - // return; - // // 修正:First() 可能会在一个空的 Values 集合上抛出异常。 - // // 更好的做法是使用 TryGetValue 或 FirstOrDefault 并检查结果。 - // // 这里假设至少有一个 BulletDef 存在,如果不是,需要更复杂的错误处理。 - // var bulletDefEntry = def.Values.FirstOrDefault(); - // if (bulletDefEntry == null) - // { - // Debug.LogError("No BulletDef found in DefineManager. Cannot attack."); - // return; - // } - // - // var bulletDef = (BulletDef)bulletDefEntry; - // - // Vector3 dir = MousePosition.GetWorldPosition(); - // EntityManage.Instance.GenerateBulletEntity(Program.Instance.FocusedDimensionId, bulletDef, Position, - // dir - Position, this); - // } - public override WeaponResource GetCurrentWeapon() { var currentSelectItem = Inventory.GetSlot(CurrentSelected); diff --git a/Client/Assets/Scripts/Entity/Entity.cs b/Client/Assets/Scripts/Entity/Entity.cs index 716eb7b..595c09b 100644 --- a/Client/Assets/Scripts/Entity/Entity.cs +++ b/Client/Assets/Scripts/Entity/Entity.cs @@ -32,6 +32,12 @@ namespace Entity public EntityPrefab entityPrefab; public EntityDef entityDef; + /// + /// 手上拿着显示的贴图 + /// + public GameObject weaponAnimator; + + public ITick[] weaponAnimatorNodeList; /// /// 人工智能行为树,定义实体的行为逻辑。 @@ -46,7 +52,13 @@ namespace Entity /// /// 实体的属性定义,包括生命值、攻击力、防御力等。 /// - public Attributes attributes = new(); + public virtual Attributes attributes { get; protected set; } + + private Attributes _baseAttributes; + public virtual Attributes baseAttributes + { + get { return _baseAttributes ??= new Attributes(entityDef.attributes); } + } /// /// 实体当前的移动方向。 @@ -164,7 +176,6 @@ namespace Entity private Coroutine _attackCoroutine; - [SerializeField] private float _hitBarUIShowTime = 5; private float _hitBarUIShowTimer = 0; private int _walkingTimer = 0; @@ -183,13 +194,34 @@ namespace Entity this.entityDef = entityDef; HideHealthBar(); + InitWeaponAnimator(); + } + + protected virtual void InitWeaponAnimator() + { + if (!weaponAnimator) + return; + for (var i = 0; i < weaponAnimator.transform.childCount; i++) + { + Destroy(weaponAnimator.transform.GetChild(i).gameObject); + weaponAnimatorNodeList = null; + } + var weapon = GetCurrentWeapon(); + if (weapon == null) + { + weaponAnimator.SetActive(false); + return; + } + + var weaponAnimation = weapon.InstantiateAttackAnimation(weaponAnimator.transform); + weaponAnimatorNodeList = weaponAnimation.animationComponents; } /// /// 初始化实体的身体部分,包括不同朝向下的绘图节点。 /// /// 绘制顺序定义。 - public virtual void InitBody(DrawingOrderDef drawingOrder) + protected virtual void InitBody(DrawingOrderDef drawingOrder) { // 预缓存枚举值(避免每次循环重复调用 Enum.GetValues) var states = Enum.GetValues(typeof(EntityState)).Cast().ToArray(); @@ -295,7 +327,7 @@ namespace Entity /// 绘图节点定义。 /// 父节点对象。 /// 创建的GameObject,如果失败则返回null - public virtual GameObject InitBodyPart(DrawNodeDef drawNode, GameObject parent) + protected virtual GameObject InitBodyPart(DrawNodeDef drawNode, GameObject parent) { try { @@ -434,7 +466,7 @@ namespace Entity /// /// 更新实体的逻辑,包括玩家控制和自动行为。 /// - public void Tick() + public virtual void Tick() { if (_walkingTimer > 0) { @@ -470,6 +502,13 @@ namespace Entity } } + if (weaponAnimatorNodeList != null) + { + foreach (var tick in weaponAnimatorNodeList) + { + tick.Tick(); + } + } if (IsShowingHealthBarUI) { _hitBarUIShowTimer -= Time.deltaTime; @@ -488,14 +527,12 @@ namespace Entity if (IsAttacking || IsDead) return; // 死亡时无法攻击 // 尝试获取当前武器 - WeaponResource currentWeapon = GetCurrentWeapon(); + var currentWeapon = GetCurrentWeapon(); // 如果没有武器,可以选择进行徒手攻击或者直接返回 // 暂时设定为:如果没有武器,则不进行攻击 if (currentWeapon == null) { - // 可以在这里添加一个默认的徒手攻击逻辑,或者播放一个“不能攻击”的提示 - Debug.Log($"{name} 没有装备武器,无法攻击。"); return; } @@ -744,7 +781,7 @@ namespace Entity } // STEP 4: 等待到攻击判定时间 - float elapsedTime = 0f; + var elapsedTime = 0f; while (elapsedTime < weapon.AttackDetectionTime) { if (IsDead) @@ -766,7 +803,7 @@ namespace Entity ExecuteWeaponAction(weapon); - float remainingAnimationTime = weapon.AttackAnimationTime - elapsedTime; + var remainingAnimationTime = weapon.AttackAnimationTime - elapsedTime; if (remainingAnimationTime > 0) { yield return new WaitForSeconds(remainingAnimationTime); @@ -851,10 +888,10 @@ namespace Entity // 获取子弹方向。这里使用实体当前的移动方向作为子弹发射方向 // 更复杂的逻辑可能根据鼠标位置、目标位置等确定 - Vector3 bulletDirection = direction; // 实体当前的朝向 + var bulletDirection = direction; // 实体当前的朝向 if (PlayerControlled && Input.GetMouseButton(0)) // 玩家控制时,如果鼠标按下,尝试朝鼠标方向发射 { - Vector3 mouseWorldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition); + var mouseWorldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition); mouseWorldPos.z = transform.position.z; // 保持Z轴一致 bulletDirection = (mouseWorldPos - transform.position).normalized; } diff --git a/Client/Assets/Scripts/Entity/Hediff.cs b/Client/Assets/Scripts/Entity/Hediff.cs new file mode 100644 index 0000000..a97edc1 --- /dev/null +++ b/Client/Assets/Scripts/Entity/Hediff.cs @@ -0,0 +1,276 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Data; +using UnityEngine; + +namespace Entity +{ + /// + /// 定义一个接口,用于提供属性偏移量。 + /// 任何实现此接口的组件都可以贡献实体的属性修正。 + /// + public interface IAttributesOffsetProvider + { + /// + /// 获取此提供者当前的属性偏移量定义。 + /// + /// 此提供者所带来的属性偏移量。 + AttributesOffsetDef GetAttributesOffset(); + } + + /// + /// 表示一个实体上运行时存在的健康状态(Hediff)。 + /// Hediff 可以是疾病、增益、减益、伤口等,它们会影响实体的属性、行为或状态。 + /// + public class Hediff + { + /// + /// 此 Hediff 的定义数据。 + /// + public HediffDef def { get; private set; } + /// + /// 此 Hediff 附加到的活体实体。 + /// + public LivingEntity parent { get; internal set; } + + /// + /// 此 Hediff 存在的当前年龄(以秒为单位)。 + /// + public float Age { get; private set; } = 0f; + /// + /// 当前激活的 Hediff 阶段的索引。 + /// + private int _currentStageIndex = -1; + + /// + /// 附加到此 Hediff 上的所有组件列表。 + /// + public List Comps { get; private set; } = new List(); + + /// + /// 标志,指示此 Hediff 是否应该被父实体移除。 + /// + public bool ShouldRemove { get; private set; } = false; + + /// + /// 内部缓存,用于存储计算出的总属性偏移量。 + /// + private AttributesOffsetDef _cachedTotalAttributesOffset; + /// + /// 标志,指示 Hediff 的属性偏移量是否需要重新计算。 + /// + private bool _attribsDirty = true; + + /// + /// 构造函数,创建一个新的运行时 Hediff 实例。 + /// + /// 此 Hediff 的定义。 + /// 如果传入的定义为空。 + public Hediff(HediffDef definition) + { + if (definition == null) + { + throw new ArgumentNullException(nameof(definition), "Hediff 定义不能为空。"); + } + + this.def = definition; + this._attribsDirty = true; // 构造时标记需要计算属性 + + // 确保阶段列表按开始时间排序,以便正确判断当前阶段。 + if (this.def.stages == null) this.def.stages = new List(); + this.def.stages = this.def.stages.OrderBy(s => s.start).ToList(); + + // 实例化所有定义的组件。 + if (def.comps != null) + { + foreach (var compDef in def.comps) + { + if (compDef.compClass != null && typeof(HediffComp).IsAssignableFrom(compDef.compClass)) + { + try + { + // 使用 Activator.CreateInstance 动态创建组件实例,并传入构造函数参数。 + // HediffComp 的构造函数需要接受 Hediff parentHediff 和 HediffCompDef def。 + var comp = (HediffComp)Activator.CreateInstance(compDef.compClass, this, compDef); + Comps.Add(comp); + comp.Initialize(); // 初始化组件 + } + catch (Exception ex) + { + Debug.LogError( + $"实例化健康状态组件 '{compDef.compClass?.Name ?? "空"}' 失败,所属健康状态 '{def.defName ?? def.GetType().Name}':{ex.Message}"); + } + } + else + { + Debug.LogWarning( + $"警告:健康状态组件定义 '{compDef.compClass?.Name ?? "空"}' 无效或未继承自 HediffComp,所属健康状态 '{def.defName ?? def.GetType().Name}'。"); + } + } + } + + // 初始化时确定第一个阶段,这会触发 SetDirty()。 + UpdateStageIndex(); + } + + /// + /// 获取此 Hediff 当前激活的阶段定义。 + /// 如果没有激活的阶段或阶段列表为空,则返回 null。 + /// + public HediffStageDef CurrentStage + { + get + { + if (_currentStageIndex >= 0 && _currentStageIndex < def.stages.Count) + { + return def.stages[_currentStageIndex]; + } + return null; + } + } + + /// + /// 获取此 Hediff 当前累计的总属性偏移量。 + /// 只有当属性被标记为“脏”时才重新计算,否则返回缓存值。 + /// + public AttributesOffsetDef CurrentTotalAttributesOffset + { + get + { + // 只有当属性需要更新时才重新计算。 + if (_attribsDirty || _cachedTotalAttributesOffset == null) + { + _cachedTotalAttributesOffset = CalculateTotalAttributesOffset(); + _attribsDirty = false; // 计算完成后重置标志。 + } + return _cachedTotalAttributesOffset; + } + } + + /// + /// 内部方法,用于实际计算 Hediff 的所有总属性偏移量。 + /// 这包括当前阶段的偏移量和所有组件提供的偏移量。 + /// + /// 此 Hediff 当前的总属性偏移量。 + private AttributesOffsetDef CalculateTotalAttributesOffset() + { + var totalOffset = new AttributesOffsetDef(); + if (CurrentStage != null) + { + totalOffset += CurrentStage.attributesOffset; + } + + // 累加来自组件的属性偏移。 + foreach (var comp in Comps) + { + if (comp is IAttributesOffsetProvider attributesOffsetProvider) + { + totalOffset += attributesOffsetProvider.GetAttributesOffset(); + } + } + return totalOffset; + } + + /// + /// 标记 Hediff 的属性偏移量需要重新计算。 + /// 当 Hediff 的内部状态改变并可能影响属性时调用。 + /// 同时会通知其父 LivingEntity,使其也更新属性缓存。 + /// + internal void SetDirty() + { + _attribsDirty = true; + // 如果此 Hediff 附加到了一个 LivingEntity 上,也通知 LivingEntity 属性可能改变。 + if (parent) + { + parent.SetAttribsDirty(); + } + } + + /// + /// 更新 Hediff 的年龄,检查阶段变化并更新所有组件。 + /// + /// 自上次更新以来的时间(秒)。 + public void Tick(float deltaTime) + { + if (ShouldRemove) + return; // 已经标记为移除,无需继续更新。 + + Age += deltaTime; // 增加 Hediff 的年龄。 + + UpdateStageIndex(); // 检查是否有阶段变化(此方法内部会调用 SetDirty)。 + + // 更新所有组件。 + foreach (var comp in Comps) + { + comp.Tick(deltaTime); + } + + // 检查 Hediff 是否到期(如果 def.time > 0 表示有时限,否则为永久)。 + if (def.time > 0 && Age >= def.time) + { + ShouldRemove = true; + SetDirty(); // Hediff 将被移除,其贡献的属性将不再有效,标记为脏。 + } + } + + /// + /// 根据当前年龄更新阶段索引。 + /// 如果阶段发生变化,会调用 SetDirty()。 + /// + private void UpdateStageIndex() + { + var originalStageIndex = _currentStageIndex; // 获取当前阶段索引。 + var newStageIndex = _currentStageIndex; + + // 从后往前遍历阶段,找到当前年龄所属的最高阶段。 + for (var i = def.stages.Count - 1; i >= 0; i--) + { + if (def.stages[i].start <= Age) + { + newStageIndex = i; + break; + } + } + + // 如果阶段发生变化,则标记为脏。 + if (newStageIndex != originalStageIndex) + { + _currentStageIndex = newStageIndex; + // 阶段发生变化,属性偏移可能改变,标记为脏。 + SetDirty(); + } + } + + /// + /// 当此 Hediff 被添加到实体时调用。 + /// 进行初始化设置,如存储父实体引用,并标记属性为脏以强制重新计算。 + /// + /// 此 Hediff 附加到的 LivingEntity 实例。 + internal void OnAdded(LivingEntity entity) + { + this.parent = entity; // 存储父实体引用。 + SetDirty(); // 刚添加也需要标记为脏以确保属性在下次计算时被纳入。 + + foreach (var comp in Comps) + { + comp.OnAdded(); + } + } + + /// + /// 当此 Hediff 从实体移除时调用。 + /// 进行清理操作,如清除父实体引用,并标记属性为脏以强制重新计算。 + /// + /// 此 Hediff 从中移除的 LivingEntity 实例。 + internal void OnRemoved(LivingEntity entity) + { + foreach (var comp in Comps) + { + comp.OnRemoved(); + } + this.parent = null; // 清除对父实体的引用。 + SetDirty(); // 移除后也需要标记为脏,确保属性计算考虑去除此Hediff。 + } + } +} diff --git a/Client/Assets/Scripts/Entity/Hediff.cs.meta b/Client/Assets/Scripts/Entity/Hediff.cs.meta new file mode 100644 index 0000000..45e7348 --- /dev/null +++ b/Client/Assets/Scripts/Entity/Hediff.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: afec36ba23b944cf94ca944a8f8f35f4 +timeCreated: 1756308924 \ No newline at end of file diff --git a/Client/Assets/Scripts/Entity/HediffComp.cs b/Client/Assets/Scripts/Entity/HediffComp.cs new file mode 100644 index 0000000..be11ab5 --- /dev/null +++ b/Client/Assets/Scripts/Entity/HediffComp.cs @@ -0,0 +1,47 @@ +using Data; + +namespace Entity +{ + // 运行时健康状态组件的抽象基类 + public abstract class HediffComp + { + protected Hediff parentHediff; // 对父 Hediff 的引用 + protected HediffCompDef def; // 对组件定义的引用 + + public HediffComp(Hediff parentHediff, HediffCompDef def) + { + this.parentHediff = parentHediff; + this.def = def; + } + + /// + /// 组件初始化时调用,在构造函数之后。 + /// + public virtual void Initialize() + { + } + + /// + /// 每帧更新时调用。 + /// + /// 自上次更新以来的时间(秒)。 + public virtual void Tick(float deltaTime) + { + } + + /// + /// 当其父 Hediff 被添加到实体时调用。 + /// + public virtual void OnAdded() + { + } + + /// + /// 当其父 Hediff 从实体移除时调用。 + /// + public virtual void OnRemoved() + { + } + } + +} \ No newline at end of file diff --git a/Client/Assets/Scripts/Entity/HediffComp.cs.meta b/Client/Assets/Scripts/Entity/HediffComp.cs.meta new file mode 100644 index 0000000..803c3b1 --- /dev/null +++ b/Client/Assets/Scripts/Entity/HediffComp.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f3f6a16d500840bea821c21ea612a5c6 +timeCreated: 1756612166 \ No newline at end of file diff --git a/Client/Assets/Scripts/Entity/LivingEntity.cs b/Client/Assets/Scripts/Entity/LivingEntity.cs new file mode 100644 index 0000000..630b534 --- /dev/null +++ b/Client/Assets/Scripts/Entity/LivingEntity.cs @@ -0,0 +1,162 @@ +using System; +using System.Collections.Generic; +using Data; +using Managers; +using UnityEngine; + +namespace Entity +{ + // 假设 Entity 基类如下结构 + // public abstract class Entity + // { + // public virtual Attributes baseAttributes { get; protected set; } = new Attributes(); + // public virtual Attributes attributes { get; protected set; } = new Attributes(); + // public virtual void Tick(float deltaTime) { /* Base entity update logic */ } + // } + + /// + /// 表示一个具有生命周期、属性和可受健康状态(Hediff)影响的实体。 + /// + public class LivingEntity : Entity + { + // 存储应用于此实体的所有健康状态(Hediff)列表。 + protected List hediffs = new List(); + // 标记实体属性是否需要重新计算。当Hediff发生变化时,此标记会被设置为true。 + private bool _needUpdateAttributes = true; + + // 缓存实体的基础属性,这些属性不受动态Hediff影响,但可能受基类或Def影响。 + private Attributes _cachedBaseAttributes; + /// + /// 获取实体的基础属性。这些属性通常来源于实体的定义(Def),并可能受到常驻的基础健康状态(Base Hediffs)影响。 + /// + public override Attributes baseAttributes + { + get + { + // 仅在 _cachedBaseAttributes 为 null 时计算一次 + if(_cachedBaseAttributes == null) + { + var defAttributes = base.baseAttributes; + var hediffOffset = new AttributesOffsetDef(); + + // 这里假设 SaveManager.Instance.baseHediffs 指的是“所有实体共通的基础Hediff” + // 并且这些基础 Hediff 也会影响 baseAttributes + foreach (var hediff in SaveManager.Instance.baseHediffs) + { + hediffOffset += hediff.CurrentTotalAttributesOffset; + } + _cachedBaseAttributes = defAttributes.GetModifiedAttributes(hediffOffset); + } + return _cachedBaseAttributes; + } + } + + // 缓存实体当前的最终属性,该属性是基础属性加上所有健康状态(Hediff)修正后的结果。 + private Attributes _cachedAttributes; + /// + /// 获取实体当前的最终属性,包括所有健康状态(Hediff)的修正。 + /// + public override Attributes attributes + { + get + { + if (_needUpdateAttributes || _cachedAttributes == null) + { + // 1. 获取旧的属性值(在重新计算之前,也就是当前的缓存值) + // 仅用于需要与“当前值”进行比较或钳制的情况,例如最大生命值Buff移除时 + var oldCachedAttributes = _cachedAttributes; + if (oldCachedAttributes == null) // 如果是第一次计算,初始化一个默认值或者使用baseAttributes + { + oldCachedAttributes = baseAttributes; + } + + // 2. 计算完全修正后的“理论”最大属性值(基于 baseAttributes 和所有 Hediff 偏移) + var totalModifiedAttributes = baseAttributes; + + var hediffOffset = new AttributesOffsetDef(); + foreach (var hediff in hediffs) + { + hediffOffset += hediff.CurrentTotalAttributesOffset; + } + + // 应用所有 hediff 的偏移到 totalModifiedAttributes + totalModifiedAttributes = totalModifiedAttributes.GetModifiedAttributes(hediffOffset); + _cachedAttributes = Attributes.Min(oldCachedAttributes, totalModifiedAttributes); + // 标记为已更新 + _needUpdateAttributes = false; + } + return _cachedAttributes; + } + protected set => _cachedAttributes = value; + } + + + /// + /// 供内部使用的属性标记方法。当 Hediff 自身状态改变并影响属性时,通过此方法通知 LivingEntity。 + /// + internal void SetAttribsDirty() + { + _needUpdateAttributes = true; + } + + /// + /// 每帧调用的更新函数,传入时间增量。 + /// + public override void Tick() + { + base.Tick(); // 调用基类的Tick方法 + + // 遍历并更新所有健康状态,从后向前循环以安全地移除已完成的Hediff + for (var i = hediffs.Count - 1; i >= 0; i--) + { + var hediff = hediffs[i]; + hediff.Tick(Time.deltaTime); // 调用单个Hediff的Tick方法 + + // 检查Hediff是否已达到移除条件 + if (hediff.ShouldRemove) + { + RemoveHediff(hediff); // 使用RemoveHediff方法确保OnRemoved被调用并设置_needUpdateAttributes + } + } + } + + /// + /// 添加一个新的健康状态到实体上。 + /// + /// 要添加的 Hediff 实例。 + public void AddHediff(Hediff hediff) + { + if (hediff == null) + { + Debug.LogWarning("尝试向活体实体添加一个空的健康状态(Hediff)。"); + return; + } + + hediffs.Add(hediff); + // 通知Hediff它被添加到一个实体上,进行初始化等操作,并传入自身引用 + hediff.OnAdded(this); + _needUpdateAttributes = true; // 添加新Hediff,需要更新属性缓存 + } + + /// + /// 移除一个特定的健康状态。 + /// + /// 要移除的 Hediff 实例。 + public void RemoveHediff(Hediff hediff) + { + if (hediff == null) + { + Debug.LogWarning("尝试从活体实体移除一个空的健康状态(Hediff)。"); + return; + } + + // 尝试从列表中移除Hediff + if (hediffs.Remove(hediff)) + { + // 通知Hediff它被从实体上移除,进行清理等操作,并传入自身引用 + hediff.OnRemoved(this); + _needUpdateAttributes = true; // 移除Hediff,需要更新属性缓存 + } + } + } +} diff --git a/Client/Assets/Scripts/Entity/LivingEntity.cs.meta b/Client/Assets/Scripts/Entity/LivingEntity.cs.meta new file mode 100644 index 0000000..4392946 --- /dev/null +++ b/Client/Assets/Scripts/Entity/LivingEntity.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 440140899cba41b3a023f86e27e69909 +timeCreated: 1756632414 \ No newline at end of file diff --git a/Client/Assets/Scripts/Entity/Monster.cs b/Client/Assets/Scripts/Entity/Monster.cs index 2301565..2af1763 100644 --- a/Client/Assets/Scripts/Entity/Monster.cs +++ b/Client/Assets/Scripts/Entity/Monster.cs @@ -4,7 +4,7 @@ using Managers; namespace Entity { - public class Monster : Entity + public class Monster:LivingEntity { private WeaponResource weapon; public override void Init(EntityDef entityDef) diff --git a/Client/Assets/Scripts/EventWorkClass.meta b/Client/Assets/Scripts/EventWorkClass.meta new file mode 100644 index 0000000..6753b41 --- /dev/null +++ b/Client/Assets/Scripts/EventWorkClass.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3747df4a5ee84ed5b9d4241f240af67a +timeCreated: 1756786716 \ No newline at end of file diff --git a/Client/Assets/Scripts/EventWorkClass/EventWorkClassBase.cs b/Client/Assets/Scripts/EventWorkClass/EventWorkClassBase.cs new file mode 100644 index 0000000..759e5bd --- /dev/null +++ b/Client/Assets/Scripts/EventWorkClass/EventWorkClassBase.cs @@ -0,0 +1,12 @@ +using Base; +using UnityEngine; + +namespace EventWorkClass +{ + public abstract class EventWorkClassBase + { + public abstract void Init(string value); + + public abstract void Run(string dimensionID); + } +} \ No newline at end of file diff --git a/Client/Assets/Scripts/EventWorkClass/EventWorkClassBase.cs.meta b/Client/Assets/Scripts/EventWorkClass/EventWorkClassBase.cs.meta new file mode 100644 index 0000000..bd901d1 --- /dev/null +++ b/Client/Assets/Scripts/EventWorkClass/EventWorkClassBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1258c84f5c82460ead132b62741c0be3 +timeCreated: 1756786734 \ No newline at end of file diff --git a/Client/Assets/Scripts/EventWorkClass/Event_EntityGenerater.cs b/Client/Assets/Scripts/EventWorkClass/Event_EntityGenerater.cs new file mode 100644 index 0000000..c1004e2 --- /dev/null +++ b/Client/Assets/Scripts/EventWorkClass/Event_EntityGenerater.cs @@ -0,0 +1,305 @@ +using System; +using Data; +using Managers; +using UnityEngine; +using Random = UnityEngine.Random; + +namespace EventWorkClass +{ + /// + /// Event_EntityGenerater 事件的配置数据结构。 + /// + [Serializable] + public class EntityGenerateConfig + { + /// + /// 要生成的实体定义名 (defName)。 + /// + public string EntityDefName; + /// + /// 要生成的实体定义的具体类型名,例如 "CharacterDef" 或 "MonsterDef"。 + /// 用于 DefineManager 的严格类型查找。 + /// + public string EntityDefTypeName; + /// + /// 生成位置类型。 + /// + public EntitySpawnLocationType LocationType; + // 以下是各种LocationType可能需要的配置参数 + /// + /// 用于 AroundSpecificCoordinates 类型:生成中心坐标。 + /// + public Vector3 CenterCoordinates; + /// + /// 用于 AroundSpecificCoordinates 或 AroundTargetEntity 类型:生成半径。 + /// + public float Radius = 10f; // 默认半径 + /// + /// 用于 InsideSpecificBuildingType 类型:目标建筑的类型ID。 + /// + public string BuildingTypeId; + /// + /// 用于 AroundTargetEntity 类型:目标派系的定义名 (factionDefName)。 + /// + public string TargetFactionDefName; + /// + /// 用于 AtPredefinedSpawnPoint 类型:预定义生成点的ID。 + /// + public string SpawnPointId; + /// + /// 用于 OffMap 类型:距离地图边界的额外偏移量。 + /// + public float OffMapOffset = 5f; + } + /// + /// 定义生成器生成地图实体的可能位置类型。 + /// + public enum EntitySpawnLocationType + { + /// + /// 未指定或无效的生成位置类型。 + /// + None = 0, + /// + /// 在地图的可玩区域边界之外生成实体。 + /// 例如:用于在地图边缘或不可见区域生成物体,然后开始移动进入地图。 + /// + OffMap, + /// + /// 在指定类型建筑的内部或附近生成实体。 + /// 例如:在 "工厂"、"商店"、"居住区" 等建筑内或其出入口。 + /// 需要一个标识符来指定建筑类型。 + /// + InsideSpecificBuildingType, + /// + /// 在指定坐标点的周围区域内生成实体。 + /// 需要额外的坐标参数和半径/范围参数。 + /// + AroundSpecificCoordinates, + /// + /// 在特定派系(或其他指定目标实体,例如NPC或特定对象)的周围区域内生成实体。 + /// 需要一个标识符来指定目标派系的定义名,以及一个半径/范围参数。 + /// + AroundTargetEntity, + /// + /// 在地图上的随机可生成点生成实体。 + /// + RandomlyOnMap, + /// + /// 在预定义的生成点(Spawn Point)生成实体。 + /// 这些点通常由地图设计者放置,并带有唯一的ID或名称。 + /// + AtPredefinedSpawnPoint + } + public class Event_EntityGenerater : EventWorkClassBase + { + private EntityGenerateConfig _config; + private EntityDef _aimEntity; + + /// + /// 初始化实体生成器事件。 + /// + /// 包含事件配置的JSON字符串。 + public override void Init(string value) + { + if (string.IsNullOrEmpty(value)) + { + Debug.LogError("初始化值为空或null。请提供一个JSON配置字符串。"); + return; + } + try + { + _config = JsonUtility.FromJson(value); + if (_config == null) + { + Debug.LogError($"无法解析配置JSON: {value}"); + return; + } + if (string.IsNullOrEmpty(_config.EntityDefTypeName)) + { + Debug.LogError($"实体定义类型名为空或null (实体定义名: '{_config.EntityDefName}')。无法查找实体定义。"); + return; + } + _aimEntity = (EntityDef)DefineManager.Instance.FindDefine(_config.EntityDefTypeName,_config.EntityDefName); + if (_aimEntity == null) + { + Debug.LogError($"未找到实体定义 (名称: '{_config.EntityDefName}', 类型: '{_config.EntityDefTypeName}')。请检查配置。"); + } + } + catch (Exception ex) + { + Debug.LogError($"解析配置JSON时出错: {value}。异常信息: {ex.Message}"); + } + } + + /// + /// 运行实体生成器事件,在指定维度生成实体。 + /// + /// 要生成实体的维度ID。 + public override void Run(string dimensionID) + { + if (_config == null) + { + Debug.LogError("事件配置(_config)为空。Init()可能失败了。"); + return; + } + if (_aimEntity == null) + { + Debug.LogError($"目标实体定义为空 (名称: {_config.EntityDefName}, 类型: {_config.EntityDefTypeName})。无法生成实体。"); + return; + } + var position = GetPosition(dimensionID); + // 检查 GetPosition 是否返回了有效的非零位置,除非它是 AroundSpecificCoordinates 且中心点就是 Vector3.zero + if (position == Vector3.zero && (_config.LocationType != EntitySpawnLocationType.AroundSpecificCoordinates || _config.CenterCoordinates != Vector3.zero)) + { + Debug.LogWarning($"未能为类型 {_config.LocationType} 获取有效的生成位置。实体可能在原点 (0,0,0) 生成。"); + } + + if (_aimEntity is CharacterDef characterDef) + { + EntityManage.Instance.GenerateEntity(dimensionID, characterDef, position); + Debug.Log($"已在维度 {dimensionID} 的 {position} 位置生成角色 '{characterDef.defName}'。"); + return; + } + + if (_aimEntity is MonsterDef monsterDef) + { + EntityManage.Instance.GenerateMonsterEntity(dimensionID, monsterDef, position); + Debug.Log($"已在维度 {dimensionID} 的 {position} 位置生成怪物 '{monsterDef.defName}'。"); + return; + } + Debug.LogWarning($"目标实体 '{_aimEntity.defName}' (类型: {_aimEntity.GetType().Name}) 既不是 CharacterDef 也不是 MonsterDef。" + + $"如果你想生成其他类型,EntityManage需要一个通用的生成实体方法。没有生成任何实体。"); + } + + /// + /// 根据配置获取实体生成位置。 + /// + /// 要获取位置的维度ID。 + /// 计算出的生成位置,如果失败则返回 Vector3.zero。 + private Vector3 GetPosition(string dimensionID) + { + if (_config == null) + { + Debug.LogError("获取位置时配置为空。返回 Vector3.zero。"); + return Vector3.zero; + } + var dimension = Program.Instance.GetDimension(dimensionID); + if (dimension == null) + { + Debug.LogError($"未找到维度 '{dimensionID}'。无法确定生成位置。"); + return Vector3.zero; + } + var mapGenerator = dimension.mapGenerator; + if (mapGenerator == null) + { + Debug.LogError($"维度 '{dimensionID}' 的地图生成器为空。无法确定生成位置。"); + return Vector3.zero; + } + switch (_config.LocationType) + { + case EntitySpawnLocationType.OffMap: + { + var size = mapGenerator.GetSize(); + var dir = Random.Range(0, 4); // 0:上, 1:下, 2:左, 3:右 + Vector2Int gridCoord; // 地图网格坐标 + Vector2Int worldCoord2D; // GetWorldCoordinates 返回的 Vector2Int + Vector3 worldPos3D; // 最终的 Vector3 世界坐标 + var offset = _config.OffMapOffset; + switch (dir) + { + case 0: // Top border (max Y) + gridCoord = new Vector2Int(Random.Range(0, size.x), size.y); + worldCoord2D = mapGenerator.GetWorldCoordinates(gridCoord); + worldPos3D = new Vector3(worldCoord2D.x, worldCoord2D.y, 0f); // 转换为 Vector3 + worldPos3D.y += offset; + break; + case 1: // Bottom border (min Y) + gridCoord = new Vector2Int(Random.Range(0, size.x), 0); + worldCoord2D = mapGenerator.GetWorldCoordinates(gridCoord); + worldPos3D = new Vector3(worldCoord2D.x, worldCoord2D.y, 0f); // 转换为 Vector3 + worldPos3D.y -= offset; + break; + case 2: // Left border (min X) + gridCoord = new Vector2Int(0, Random.Range(0, size.y)); + worldCoord2D = mapGenerator.GetWorldCoordinates(gridCoord); + worldPos3D = new Vector3(worldCoord2D.x, worldCoord2D.y, 0f); // 转换为 Vector3 + worldPos3D.x -= offset; + break; + case 3: // Right border (max X) + gridCoord = new Vector2Int(size.x, Random.Range(0, size.y)); + worldCoord2D = mapGenerator.GetWorldCoordinates(gridCoord); + worldPos3D = new Vector3(worldCoord2D.x, worldCoord2D.y, 0f); // 转换为 Vector3 + worldPos3D.x += offset; + break; + default: + Debug.LogError("OffMap 生成方向无效。不应该发生此情况。"); + return Vector3.zero; + } + worldPos3D.x += Random.Range(-offset / 2f, offset / 2f); + worldPos3D.y += Random.Range(-offset / 2f, offset / 2f); + return worldPos3D; + } + case EntitySpawnLocationType.AroundSpecificCoordinates: + { + var center = _config.CenterCoordinates; + var radius = _config.Radius; + var randomOffset = Random.insideUnitCircle * radius; + return new Vector3(center.x + randomOffset.x, center.y + randomOffset.y, center.z); + } + case EntitySpawnLocationType.AroundTargetEntity: + { + if (string.IsNullOrEmpty(_config.TargetFactionDefName)) + { + Debug.LogWarning($"配置了 'AroundTargetEntity',但 'TargetFactionDefName' 为空或null。无法找到派系实体。将在原点生成。"); + return Vector3.zero; + } + var factionEntities = EntityManage.Instance.FindEntitiesByFaction(dimensionID, _config.TargetFactionDefName); + if (factionEntities == null || factionEntities.Length == 0) + { + Debug.LogWarning($"在维度 '{dimensionID}' 中未找到派系 '{_config.TargetFactionDefName}' 的任何实体。将在原点生成。"); + return Vector3.zero; + } + var randomIndex = Random.Range(0, factionEntities.Length); + var targetEntityPrefab = factionEntities[randomIndex]; + if (targetEntityPrefab == null || targetEntityPrefab.transform == null) + { + Debug.LogWarning($"从派系 '{_config.TargetFactionDefName}' 中随机选择的实体为空或没有Transform组件。将在原点生成。"); + return Vector3.zero; + } + var center = targetEntityPrefab.transform.position; + var radius = _config.Radius; + var randomOffset = Random.insideUnitCircle * radius; + + Debug.Log($"围绕派系 '{_config.TargetFactionDefName}' 的实体 (世界坐标: {center}) 生成。生成的偏移量: {randomOffset}。"); + return new Vector3(center.x + randomOffset.x, center.y + randomOffset.y, center.z); + } + case EntitySpawnLocationType.RandomlyOnMap: + { + var size = mapGenerator.GetSize(); + var randomGridPos = new Vector2Int(Random.Range(0, size.x), Random.Range(0, size.y)); + + var worldCoord2D = mapGenerator.GetWorldCoordinates(randomGridPos); + var worldPos3D = new Vector3(worldCoord2D.x, worldCoord2D.y, 0f); + + Debug.Log($"随机地图生成位置: {worldPos3D} (网格坐标: {randomGridPos})。"); + return worldPos3D; + } + case EntitySpawnLocationType.InsideSpecificBuildingType: + { + Debug.LogWarning($"类型为 'InsideSpecificBuildingType' ({_config.BuildingTypeId}) 的生成逻辑尚未实现。返回 Vector3.zero。"); + return Vector3.zero; + } + case EntitySpawnLocationType.AtPredefinedSpawnPoint: + { + Debug.LogWarning($"类型为 'AtPredefinedSpawnPoint' ({_config.SpawnPointId}) 的生成逻辑尚未实现。返回 Vector3.zero。"); + return Vector3.zero; + } + case EntitySpawnLocationType.None: + default: + Debug.LogWarning($"未知或不支持的生成位置类型: {_config.LocationType}。返回 Vector3.zero。"); + return Vector3.zero; + } + } + } +} diff --git a/Client/Assets/Scripts/EventWorkClass/Event_EntityGenerater.cs.meta b/Client/Assets/Scripts/EventWorkClass/Event_EntityGenerater.cs.meta new file mode 100644 index 0000000..241a6a8 --- /dev/null +++ b/Client/Assets/Scripts/EventWorkClass/Event_EntityGenerater.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: aea1fb7d2e1c45e4ac62da4ae8f81393 +timeCreated: 1756789875 \ No newline at end of file diff --git a/Client/Assets/Scripts/EventWorkClass/Event_GiveHediff.cs b/Client/Assets/Scripts/EventWorkClass/Event_GiveHediff.cs new file mode 100644 index 0000000..793e428 --- /dev/null +++ b/Client/Assets/Scripts/EventWorkClass/Event_GiveHediff.cs @@ -0,0 +1,273 @@ +using System; +using System.Collections.Generic; +using Data; +using Managers; +using UnityEngine; +using System.Linq; +using Entity; +using Map; // 用于 LINQ + +namespace EventWorkClass +{ + /// + /// Event_GiveHediff 事件的配置数据结构。 + /// + [Serializable] + public class GiveHediffConfig + { + /// + /// 要添加或移除的 Hediff 的定义名 (defName)。 + /// + public string HediffDefName; + /// + /// 要添加或移除的 Hediff 定义的具体类型名,例如 "HediffDef" 或其子类名。 + /// 用于 DefineManager 的严格类型查找。 + /// + public string HediffDefTypeName; + /// + /// 要执行的操作类型:添加或移除 Hediff。 + /// + public HediffActionType ActionType; + /// + /// 目标实体选择类型。 + /// + public TargetEntitySelectionType TargetSelectionType; + // 以下是各种 TargetSelectionType 可能需要的配置参数 + + /// + /// 用于 SpecificEntityById 类型:目标实体的唯一ID。 + /// + public string TargetEntityId; + /// + /// 用于 AllEntitiesInFaction 或 TargetSpecificFactionLeader 类型:目标派系的定义名 (factionDefName)。 + /// + public string TargetFactionDefName; + /// + /// 用于 AroundSpecificCoordinates 类型:生成中心坐标。 + /// + public Vector3 CenterCoordinates; + /// + /// 用于 AroundSpecificCoordinates 类型:搜索半径。 + /// + public float Radius = 10f; // 默认半径 + } + + /// + /// 定义针对 Hediff 的操作类型。 + /// + public enum HediffActionType + { + /// + /// 添加 Hediff。 + /// + Add, + /// + /// 移除 Hediff。 + /// + Remove + } + + /// + /// 定义目标实体选择的类型。 + /// + public enum TargetEntitySelectionType + { + /// + /// 未指定或无效的目标选择类型。 + /// + None = 0, + /// + /// 目标是当前玩家(如果存在)。 + /// + Player, + /// + /// 目标是指定派系的所有活动实体。 + /// + AllEntitiesInFaction, + /// + /// 目标是指定坐标周围半径内的所有生物。 + /// + AroundSpecificCoordinates + } + + /// + /// Event_GiveHediff 事件类:用于给予或移除健康状态 (Hediff)。 + /// + public class Event_GiveHediff : EventWorkClassBase + { + private GiveHediffConfig _config; + private HediffDef _aimHediffDef; + + /// + /// 初始化 Hediff 给予/移除事件。 + /// + /// 包含事件配置的JSON字符串。 + public override void Init(string value) + { + if (string.IsNullOrEmpty(value)) + { + Debug.LogError("Event_GiveHediff: 初始化值为空或null。请提供一个JSON配置字符串。"); + return; + } + try + { + _config = JsonUtility.FromJson(value); + if (_config == null) + { + Debug.LogError($"Event_GiveHediff: 无法解析配置JSON: {value}"); + return; + } + + if (string.IsNullOrEmpty(_config.HediffDefTypeName) || string.IsNullOrEmpty(_config.HediffDefName)) + { + Debug.LogError($"Event_GiveHediff: Hediff定义类型名或名称为空或null (名称: '{_config.HediffDefName}', 类型: '{_config.HediffDefTypeName}')。无法查找Hediff定义。"); + return; + } + + _aimHediffDef = (HediffDef)DefineManager.Instance.FindDefine(_config.HediffDefTypeName, _config.HediffDefName); + if (_aimHediffDef == null) + { + Debug.LogError($"Event_GiveHediff: 未找到Hediff定义 (名称: '{_config.HediffDefName}', 类型: '{_config.HediffDefTypeName}')。请检查配置。"); + } + } + catch (Exception ex) + { + Debug.LogError($"Event_GiveHediff: 解析配置JSON时出错: {value}。异常信息: {ex.Message}"); + } + } + + /// + /// 运行 Hediff 给予/移除事件。 + /// + /// 目标实体所在的维度ID。 + public override void Run(string dimensionID) + { + if (_config == null) + { + Debug.LogError("Event_GiveHediff: 事件配置(_config)为空。Init()可能失败了。"); + return; + } + if (_aimHediffDef == null) + { + Debug.LogError($"Event_GiveHediff: 目标Hediff定义为空 (名称: {_config.HediffDefName}, 类型: {_config.HediffDefTypeName})。无法执行操作。"); + return; + } + + var targetEntities = GetTargetEntities(dimensionID); + if (targetEntities == null || targetEntities.Count == 0) + { + Debug.LogWarning($"Event_GiveHediff: 在维度 '{dimensionID}' 中未找到符合条件的目标实体 (选择类型: {_config.TargetSelectionType})。"); + return; + } + + var successCount = 0; + var failedCount = 0; + var hediffInstance = new Hediff(_aimHediffDef); // 创建 Hediff 实例 + + foreach (var entity in targetEntities) + { + if (entity is LivingEntity livingEntity) + { + try + { + if (_config.ActionType == HediffActionType.Add) + { + livingEntity.AddHediff(hediffInstance); + Debug.Log($"Event_GiveHediff: 已向实体 '{livingEntity.name}' 添加 Hediff '{_aimHediffDef.defName}'。"); + successCount++; + } + else if (_config.ActionType == HediffActionType.Remove) + { + livingEntity.RemoveHediff(hediffInstance); + Debug.Log($"Event_GiveHediff: 已从实体 '{livingEntity.name}' 移除 Hediff '{_aimHediffDef.defName}'。"); + successCount++; + } + } + catch (Exception ex) + { + Debug.LogError($"Event_GiveHediff: 对实体 '{entity.name}' 执行 Hediff 操作时出错: {ex.Message}"); + failedCount++; + } + } + else + { + Debug.LogWarning($"Event_GiveHediff: 实体 '{entity.name}' (类型: {entity.GetType().Name}) 不是 LivingEntity,无法添加/移除 Hediff。"); + failedCount++; + } + } + Debug.Log($"Event_GiveHediff: 完成操作。成功: {successCount},失败: {failedCount} (Hediff: {_aimHediffDef.defName}, 操作: {_config.ActionType})。"); + } + + /// + /// 根据配置获取目标实体列表。 + /// + /// 维度ID。 + /// 符合条件的目标实体列表。 + private List GetTargetEntities(string dimensionID) + { + var entities = new List(); + var dimension = Program.Instance.GetDimension(dimensionID); + + if (dimension == null) + { + Debug.LogError($"Event_GiveHediff: 未找到维度 '{dimensionID}'。无法获取目标实体。"); + return entities; + } + + switch (_config.TargetSelectionType) + { + case TargetEntitySelectionType.Player: + // 假设 PlayerManager.Instance.GetPlayerEntity(dimensionID) 返回 LivingEntity + // 或者你的玩家实体本身就是 LivingEntity + var player = dimension.focusEntity as LivingEntity; // 假设玩家是维度的一部分且是LivingEntity + if (player != null) + { + entities.Add(player); + } + else + { + Debug.LogWarning($"Event_GiveHediff: 未能找到维度 '{dimensionID}' 中的玩家实体或玩家不是 LivingEntity。"); + } + break; + + case TargetEntitySelectionType.AllEntitiesInFaction: + if (string.IsNullOrEmpty(_config.TargetFactionDefName)) + { + Debug.LogWarning("Event_GiveHediff: 配置了 'AllEntitiesInFaction',但 'TargetFactionDefName' 为空。"); + return entities; + } + + entities.AddRange(EntityManage.Instance + .FindEntitiesByFaction(dimensionID, _config.TargetFactionDefName) + .Select(item => item.entity)); + break; + + case TargetEntitySelectionType.AroundSpecificCoordinates: + // 假设 EntityManage 提供了根据位置和半径查找实体的方法 + // 或者可以直接通过场景查询(例如 Physics.OverlapSphere 或者自定义管理系统) + // 为了简化,我将假设 EntityManage 提供 FindEntitiesAroundRadius 方法 + var allEntitiesInDimension = EntityManage.Instance.GetAllEntities(dimensionID) + .Select(item => item.entity); + var center = _config.CenterCoordinates; + var radius = _config.Radius; + + foreach (var ent in allEntitiesInDimension) + { + // 确保实体有 Transform 且在半径内 + if (ent != null && ent.transform != null && Vector3.Distance(ent.transform.position, center) <= radius) + { + entities.Add(ent); + } + } + break; + + case TargetEntitySelectionType.None: + default: + Debug.LogWarning($"Event_GiveHediff: 未知或不支持的目标实体选择类型: {_config.TargetSelectionType}。"); + break; + } + + return entities; + } + } +} diff --git a/Client/Assets/Scripts/EventWorkClass/Event_GiveHediff.cs.meta b/Client/Assets/Scripts/EventWorkClass/Event_GiveHediff.cs.meta new file mode 100644 index 0000000..f873a67 --- /dev/null +++ b/Client/Assets/Scripts/EventWorkClass/Event_GiveHediff.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2e8b013e0825473e9dbba1f7f393e66f +timeCreated: 1756860849 \ No newline at end of file diff --git a/Client/Assets/Scripts/Item/ItemBase.cs b/Client/Assets/Scripts/Item/ItemBase.cs deleted file mode 100644 index e51160a..0000000 --- a/Client/Assets/Scripts/Item/ItemBase.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace Item -{ - public class ItemBase - { - public ItemResource resource; - - public int count = 0; - - } -} \ No newline at end of file diff --git a/Client/Assets/Scripts/Item/ItemBase.cs.meta b/Client/Assets/Scripts/Item/ItemBase.cs.meta deleted file mode 100644 index 2033845..0000000 --- a/Client/Assets/Scripts/Item/ItemBase.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 01a2843d5856483fa5b6967e2e01db62 -timeCreated: 1755061705 \ No newline at end of file diff --git a/Client/Assets/Scripts/Item/ItemResource.cs b/Client/Assets/Scripts/Item/ItemResource.cs index 0cc10ef..4f0827f 100644 --- a/Client/Assets/Scripts/Item/ItemResource.cs +++ b/Client/Assets/Scripts/Item/ItemResource.cs @@ -49,13 +49,6 @@ namespace Item $"ItemResource: Failed to load sprite for texture '{texture}' for item '{def.defName}'."); } } - else - { - // 仅当 textures 为 null 时警告,因为它可能是预期的数据状态(无图标) - Debug.LogWarning( - $"ItemResource: ItemDef '{def.defName}' has a null textures array. No icons will be loaded."); - } - // 逻辑修改:Icon 属性现在是 IReadOnlyList 类型,确保外部只读访问 Icon = sprites.AsReadOnly(); // 使用 AsReadOnly() 获得一个只读包装器 } diff --git a/Client/Assets/Scripts/Logging/LogCapturer.cs b/Client/Assets/Scripts/Logging/LogCapturer.cs index edbadba..fcc0c0c 100644 --- a/Client/Assets/Scripts/Logging/LogCapturer.cs +++ b/Client/Assets/Scripts/Logging/LogCapturer.cs @@ -14,14 +14,21 @@ namespace Logging public string Message; public string StackTrace; - public override string ToString() => - $"[{Timestamp:HH:mm:ss}] [{Type}] {Message}" + - (Type == LogType.Exception ? $"\n{StackTrace}" : ""); + public override string ToString() + { + // 逻辑修改:扩展条件,使LogType.Error和LogType.Assert也能显示堆栈信息 + if (Type == LogType.Exception || Type == LogType.Error || Type == LogType.Assert) + { + return $"[{Timestamp:HH:mm:ss}] [{Type}] {Message}\n{StackTrace}"; + } + return $"[{Timestamp:HH:mm:ss}] [{Type}] {Message}"; + } } private static readonly Queue _logs = new Queue(); private static readonly object _lock = new object(); // 线程锁 private static int _maxLogs = 1000; // 默认容量 + private static bool _isInitialized = false; // 逻辑修改:添加一个私有标志来跟踪是否已初始化 // 最大日志容量属性 public static int MaxLogs @@ -37,10 +44,40 @@ namespace Logging } } - static LogCapturer() + // 逻辑修改:添加 [RuntimeInitializeOnLoadMethod] 特性,确保 Init() 方法在 Unity 启动时自动执行 + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterAssembliesLoaded)] + public static void Init() { - // 注册全局日志回调 - Application.logMessageReceivedThreaded += HandleLog; + // 确保线程安全地检查和设置初始化状态 + lock (_lock) + { + if (_isInitialized) + { + Debug.LogWarning("[LogCapturer] Init() called multiple times. LogCapturer is already initialized."); + return; + } + + Application.logMessageReceivedThreaded += HandleLog; + _isInitialized = true; + } + } + + // 逻辑修改:添加一个 Shutdown 方法来解除事件注册和清理 + public static void Shutdown() + { + // 确保线程安全地检查和解除注册 + lock (_lock) + { + if (!_isInitialized) + { + Debug.LogWarning("[LogCapturer] Shutdown() called but LogCapturer was not initialized."); + return; + } + + Application.logMessageReceivedThreaded -= HandleLog; + _isInitialized = false; + _logs.Clear(); // 逻辑修改:在关闭时清空所有捕获的日志,确保下次启用时是全新状态。 + } } // 日志处理回调 @@ -90,4 +127,4 @@ namespace Logging } } } -} \ No newline at end of file +} diff --git a/Client/Assets/Scripts/Managers/AudioManager.cs b/Client/Assets/Scripts/Managers/AudioManager.cs new file mode 100644 index 0000000..c6e9626 --- /dev/null +++ b/Client/Assets/Scripts/Managers/AudioManager.cs @@ -0,0 +1,232 @@ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using Data; +using UnityEngine; + +namespace Managers +{ + /// + /// 音频管理器,负责加载、管理和提供从定义数据中解析出的音频剪辑。 + /// + /// + /// 该管理器是一个单例,并在启动过程中实现 ILaunchManager 接口, + /// 用于处理游戏或应用启动时音频资源的加载和初始化。 + /// + public class AudioManager : Utils.Singleton, ILaunchManager + { + /// + /// 默认音频剪辑,在找不到对应音频时返回。 + /// + public AudioClip defaultAudioClip; + + /// + /// 存储所有已加载的音频剪辑,按音频名称(全局唯一的DefName)索引。 + /// + public Dictionary audioClips = new(); + + /// + /// 获取当前启动步骤的描述。 + /// + public string StepDescription { get; private set; } = "音频管理器正在准备中..."; + + /// + /// 初始化音频管理器,加载默认音频剪辑并处理所有 AudioDef 定义。 + /// + public void Init() + { + if (audioClips.Count > 0) + { + // 如果已经有数据,则跳过初始化,防止重复加载。 + return; + } + defaultAudioClip = Resources.Load("Default/DefaultAudio"); // 假设存在一个默认音频路径 + if (defaultAudioClip == null) + { + Debug.LogWarning("AudioManager: 无法加载默认音频 'Resources/Default/DefaultAudio'。请确保文件存在。"); + } + InitAudioDef(); + } + + /// + /// 根据 AudioDef 定义初始化并加载所有音频剪辑。 + /// + public void InitAudioDef() + { + // 缓存已加载的物理文件路径对应的 AudioClip,避免重复加载 + var audioCache = new Dictionary(); + var audioDefs = Managers.DefineManager.Instance.QueryDefinesByType(); + + if (audioDefs == null || !audioDefs.Any()) + { + Debug.Log($"AudioManager: 在定义管理器中未找到任何音频定义。({nameof(AudioDef)})"); + return; + } + + foreach (var audioDef in audioDefs) + { + if (string.IsNullOrEmpty(audioDef.path) || string.IsNullOrEmpty(audioDef.defName)) + { + Debug.LogWarning($"AudioManager: 跳过音频定义 (DefName: '{audioDef?.defName ?? "未知"}'),因为它包含空路径或DefName。(路径: '{audioDef?.path ?? ""}')"); + continue; + } + + try + { + string cacheKey; + AudioClip audioClip = null; + + if (audioDef.path.StartsWith("res:")) + { + // 处理 Unity Resources 路径 + var resPath = audioDef.path.Substring(4).Replace('\\', '/').TrimStart('/'); + cacheKey = "res://" + resPath.ToLower(); // 缓存键使用小写路径 + + // 检查音频缓存 + if (!audioCache.TryGetValue(cacheKey, out audioClip)) + { + var cleanPath = Path.ChangeExtension(resPath, null); // 去掉扩展名 + audioClip = Resources.Load(cleanPath); + if (audioClip) + audioCache[cacheKey] = audioClip; + } + } + else if (audioDef.path.Contains(':')) // 包含 PackageID:Path 或其他自定义前缀 + { + var splitIndex = audioDef.path.IndexOf(':'); + var packageID = audioDef.path.Substring(0, splitIndex); + var relativePath = audioDef.path.Substring(splitIndex + 1); + + var packageRoot = Managers.DefineManager.Instance.GetPackagePath(packageID); + if (string.IsNullOrEmpty(packageRoot)) + { + Debug.LogWarning($"AudioManager: 音频定义 '{audioDef.defName}' (路径: '{audioDef.path}'): 引用的包ID '{packageID}' 未找到或没有根路径。跳过音频加载。"); + continue; + } + + var fullPath = Path.Combine(packageRoot, relativePath).Replace('\\', '/'); + cacheKey = "file://" + fullPath.ToLower(); // 缓存键使用小写路径 + + // 检查音频缓存 + if (!audioCache.TryGetValue(cacheKey, out audioClip)) + { + // === 重要的实现细节 === + // 在真实的 Unity 项目中,直接从文件系统同步加载 AudioClip 通常不推荐, + // 且 Unity 不提供直接的同步方法。通常会使用 UnityWebRequest.GetAudioClip (异步) + // 或 Asset Bundles。为了与 ImageManager 的 ConfigProcessor.LoadTextureByIO + // 保持一致的同步风格,此处我们假设 Configs.ConfigProcessor 存在一个同步的 + // LoadAudioClipByIO 方法。 + audioClip = Configs.ConfigProcessor.LoadAudioByIO(fullPath).Result; + if (audioClip) + audioCache[cacheKey] = audioClip; + } + } + else + { + // 无前缀:使用当前定义所在包的路径 + var pack = Managers.DefineManager.Instance.GetDefinePackage(audioDef); + if (pack == null) + { + Debug.LogError($"AudioManager: 音频定义 '{audioDef.defName}' (路径: '{audioDef.path}'): 源音频未找到对应的定义包。无法确定完整路径。跳过。"); + continue; + } + var fullPath = Path.Combine(pack.packRootPath, audioDef.path).Replace('\\', '/'); + cacheKey = "file://" + fullPath.ToLower(); // 缓存键使用小写路径 + + // 检查音频缓存 + if (!audioCache.TryGetValue(cacheKey, out audioClip)) + { + audioClip = Configs.ConfigProcessor.LoadAudioByIO(fullPath).Result; + if (audioClip) + audioCache[cacheKey] = audioClip; + } + } + + // 资源加载失败 + if (audioClip == null) + { + Debug.LogError($"AudioManager: 未能加载音频定义关联的音频剪辑: '{audioDef.defName}' (路径: '{audioDef.path}')。请验证路径和文件是否存在。"); + continue; + } + + audioClips[audioDef.defName] = audioClip; // 使用 DefName 作为唯一键存储 + } + catch (Exception ex) + { + Debug.LogError( + $"AudioManager: 处理音频定义时出错: '{audioDef.defName}' (路径: '{audioDef.path}')。异常: {ex.GetType().Name}: {ex.Message}\n堆栈跟踪: {ex.StackTrace}"); + } + } + } + + /// + /// 清理所有已加载的音频剪辑数据。 + /// + /// + /// 此方法会清空 字典,释放对 AudioClip 对象的引用。 + /// 它不会卸载 ,因为它通常通过 Resources.Load 加载, + /// 其生命周期由 Unity 的资源管理系统控制,当不再被引用时会自动卸载。 + /// 对于通过 ConfigProcessor.LoadAudioClipByIO 加载的 AudioClip,如果它们不是通过 Unity API + /// 创建的 Unity.Object 类型,则可能需要额外的内存释放逻辑,但在本示例中,我们假设 + /// ConfigProcessor 会返回一个被 Unity 管理的 AudioClip。 + /// + public void Clear() + { + // 如果需要显式卸载从 Resources.Load 或外部文件加载的 AssetBundle 资源, + // 可能需要 Resources.UnloadAsset(clip) 或 AssetBundle.UnloadAllAssets(true)。 + // 但对于单独的 AudioClip 引用,通常在不再被引用时Unity会自动清理。 + audioClips.Clear(); + StepDescription = "音频管理器数据已清理。"; // 更新状态 + } + + /// + /// 重新加载所有音频数据。 + /// + /// + /// 此方法会首先调用 清理所有数据,然后调用 重新初始化。 + /// + public void Reload() + { + Clear(); + Init(); + } + + /// + /// 根据 对象获取对应的音频剪辑。 + /// + /// 包含音频名称的 对象。 + /// 如果找到对应的音频剪辑,则返回该剪辑;否则返回 + public AudioClip GetAudioClip(AudioDef audioDef) + { + if (audioDef == null) + { + Debug.LogWarning("AudioManager: 请求的 AudioDef 为空。返回默认音频。"); + return defaultAudioClip; + } + return GetAudioClip(audioDef.defName); + } + + /// + /// 根据音频名称(全局唯一的DefName)获取对应的音频剪辑。 + /// + /// 音频剪辑的名称。 + /// 如果找到对应的音频剪辑,则返回该剪辑;否则返回 + public AudioClip GetAudioClip(string name) + { + if (string.IsNullOrEmpty(name)) + { + Debug.LogWarning("AudioManager: 请求的音频名称为空或null。返回默认音频。"); + return defaultAudioClip; + } + + if (audioClips.TryGetValue(name, out var clip)) + return clip; + + // 如果未找到,返回默认音频剪辑 + Debug.LogWarning($"AudioManager: 未找到名称为 '{name}' 的音频剪辑。返回默认音频。"); + return defaultAudioClip; + } + } +} diff --git a/Client/Assets/Scripts/Managers/AudioManager.cs.meta b/Client/Assets/Scripts/Managers/AudioManager.cs.meta new file mode 100644 index 0000000..d23db8b --- /dev/null +++ b/Client/Assets/Scripts/Managers/AudioManager.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 42bb2c7fdd494670bc464905def6952f +timeCreated: 1756549944 \ No newline at end of file diff --git a/Client/Assets/Scripts/Managers/DefineManager.cs b/Client/Assets/Scripts/Managers/DefineManager.cs index 48cb107..cd485bf 100644 --- a/Client/Assets/Scripts/Managers/DefineManager.cs +++ b/Client/Assets/Scripts/Managers/DefineManager.cs @@ -67,17 +67,73 @@ namespace Managers if (packs.Count > 0) return; - // 获取所有定义包的文件夹路径 + // // 获取所有定义包的文件夹路径 + // var packFolder = Configs.ConfigProcessor.GetSubFolders(new(dataSetFilePath)); + // foreach (var folder in packFolder) + // { + // var pack = new DefinePack(); + // if (pack.LoadPack(folder)) + // { + // packs.Add(pack.packID, pack); + // } + // } var packFolder = Configs.ConfigProcessor.GetSubFolders(new(dataSetFilePath)); + + // 获取当前的加载顺序 + var currentOrder = Base.Setting.Instance.CurrentSettings.loadOrder; // 假设为 string[] + var isFirstLaunch = currentOrder == null || currentOrder.Length == 0; + + var newOrder = new List(); // 用于最终写回 + foreach (var folder in packFolder) { var pack = new DefinePack(); if (pack.LoadPack(folder)) { + // 根据加载顺序设置 priority + int priority; + + if (isFirstLaunch) + { + // 第一次启动,按遍历顺序设置 priority + // 暂时使用新增时的顺序作为 priority,顺序从 newOrder 的索引确定 + priority = newOrder.Count; + // 记录该 pack 的 ID,后续写回 loadOrder + newOrder.Add(pack.packID); + } + else + { + // 非首次启动,使用现有 loadOrder 中的位置来设置 priority + var idx = Array.IndexOf(currentOrder, pack.packID); + if (idx >= 0) + { + priority = idx; + } + else + { + // 未出现在现有顺序中,放在末尾 + priority = currentOrder.Length; + // 可选:也将其加入 newOrder 以更新 loadOrder + } + } + + pack.priority = priority; packs.Add(pack.packID, pack); } } +// 如果是第一次启动,写回 loadOrder(顺序为 newOrder) + if (isFirstLaunch) + { + // 将 newOrder 转换为 string[],并写回设置 + Base.Setting.Instance.CurrentSettings.loadOrder = new string[newOrder.Count]; + newOrder.CopyTo(Base.Setting.Instance.CurrentSettings.loadOrder); + // 可能需要保存设置到磁盘/持久化 + // Example: Settings.Save(Base.Setting.Instance.CurrentSettings); + } + + + // 字段信息缓存,用于优化反射性能。 Dictionary fieldCache = new(); @@ -130,6 +186,7 @@ namespace Managers anonymousDefines.Add(typeName, new List()); anonymousDefines[typeName].Add(defRef); } + ProcessDefine(defRef); } } @@ -208,7 +265,8 @@ namespace Managers var value = FindDefine(defRef.Item3.description, defRef.Item3.defName); if (value == null) { - Debug.LogError($"未找到引用,出错的定义:定义类型:{defRef.Item1.GetType().Name}, 定义名:{defRef.Item1.defName} ; 类型:{defRef.Item3.description}, 定义名:{defRef.Item3.defName}"); + Debug.LogError( + $"未找到引用,出错的定义:定义类型:{defRef.Item1.GetType().Name}, 定义名:{defRef.Item1.defName} ; 类型:{defRef.Item3.description}, 定义名:{defRef.Item3.defName}"); continue; } @@ -352,7 +410,6 @@ namespace Managers // 如果结果为空,则返回 null。 if (result.Count == 0) { - Debug.LogWarning($"查询失败:未找到定义类型 '{defineType}'"); return null; } diff --git a/Client/Assets/Scripts/Managers/EntityManage.cs b/Client/Assets/Scripts/Managers/EntityManage.cs index be49657..e06af34 100644 --- a/Client/Assets/Scripts/Managers/EntityManage.cs +++ b/Client/Assets/Scripts/Managers/EntityManage.cs @@ -51,31 +51,44 @@ namespace Managers /// 默认实体的预制体,用于生成失败时的回退。 public EntityPrefab defaultEntityPrefab; - + public EntityPrefab[] GetAllEntities(string dimensionId) + { + if (!_dimensionFactionEntities.ContainsKey(dimensionId)) + { + Debug.LogWarning($"实体管理器:尝试在维度 '{dimensionId}' 中查找实体,但其内部存储未初始化。"); + return null; + } + // 获取对应维度的内层字典 + var factionEntitiesForDimension = _dimensionFactionEntities[dimensionId]; + // 使用 LINQ 的 SelectMany 方法来扁平化所有 LinkedList 中的 EntityPrefab + return factionEntitiesForDimension.Values // 获取所有 LinkedList 的集合 + .SelectMany(linkedList => linkedList) // 将每个 LinkedList 中的元素展开到一个单一的序列中 + .ToArray(); // 将该序列转换为一个数组 + } /// /// 在指定维度中,根据派系键查找所有实体。 /// /// 维度的唯一标识符。 /// 派系键。 /// 指定派系下的实体列表,如果未找到则返回空列表。 - public LinkedList FindEntitiesByFaction(string dimensionId, string factionKey) + public EntityPrefab[] FindEntitiesByFaction(string dimensionId, string factionKey) { // 如果在场景加载前或维度未在Program中注册,_dimensionFactionEntities可能还没有该维度ID的条目。 if (!_dimensionFactionEntities.ContainsKey(dimensionId)) { Debug.LogWarning($"实体管理器:尝试在维度 '{dimensionId}' 中查找实体,但其内部存储未初始化。"); - return new LinkedList(); + return null; } if (_dimensionFactionEntities.TryGetValue(dimensionId, out var factionDict)) { if (factionDict.TryGetValue(factionKey, out var entities)) { - return entities; + return entities.ToArray(); } } - return new LinkedList(); // 如果未找到,返回一个空列表 + return null; // 如果未找到,返回一个空列表 } /// diff --git a/Client/Assets/Scripts/Managers/EventManager.cs b/Client/Assets/Scripts/Managers/EventManager.cs index a39a6cd..b0b287c 100644 --- a/Client/Assets/Scripts/Managers/EventManager.cs +++ b/Client/Assets/Scripts/Managers/EventManager.cs @@ -1,181 +1,154 @@ -using Data; +using System; using System.Collections.Generic; +using System.Reflection; +using Data; +using EventWorkClass; +using Utils; using UnityEngine; -using EventType = Data.EventType; namespace Managers { - // 新增私有结构体,用于在事件队列中存储事件定义及其运行时上下文 - public struct EventPayload // Make it public if EventManager exposes it directly + /// + /// 事件管理器,负责事件的加载、注册和执行。 + /// 遵循单例模式,并在启动流程中扮演一个管理器角色。 + /// + class EventManager : Singleton, ILaunchManager { - public string DimensionId; - public EventDef EventDefinition; - public Vector3 Position; // 适用于 Character, Bullet, Pickup, DefaultEntity - public Vector3 Direction; // 仅适用于 Bullet - public Entity.Entity SourceEntity; // 仅适用于 Bullet (发射源) - public Vector3Int GridPosition; // 仅适用于 Building - } - - public class EventManager : Utils.MonoSingleton - { - private Queue _eventQueue = new Queue(); - - private EventManager() - { - /* Private constructor for singleton */ - } - - // =================================== - // 公共入队方法 - // =================================== - public void EnqueueCharacterSpawnEvent(string dimensionId, EventDef eventDef, Vector3 pos) - { - if (eventDef == null || eventDef.eventType != EventType.SpawnCharacter || - eventDef.entityDef_Character == null) - { - Debug.LogError( - $"EnqueueCharacterSpawnEvent: Invalid EventDef, mismatched EventType ({eventDef?.eventType}), or missing characterDef for event '{eventDef?.defName ?? "Unknown"}'."); - return; - } - - _eventQueue.Enqueue(new EventPayload - { - DimensionId = dimensionId, - EventDefinition = eventDef, - Position = pos, - }); - Debug.Log($"Event '{eventDef.defName}' (SpawnCharacter) enqueued for dimension {dimensionId} at {pos}."); - } - - public void EnqueueBuildingSpawnEvent(string dimensionId, EventDef eventDef, Vector3Int gridPos) - { - if (eventDef == null || eventDef.eventType != EventType.SpawnBuilding || - eventDef.entityDef_Building == null) - { - Debug.LogError( - $"EnqueueBuildingSpawnEvent: Invalid EventDef, mismatched EventType ({eventDef?.eventType}), or missing buildingDef for event '{eventDef?.defName ?? "Unknown"}'."); - return; - } - - _eventQueue.Enqueue(new EventPayload - { - DimensionId = dimensionId, - EventDefinition = eventDef, - GridPosition = gridPos, - }); - Debug.Log($"Event '{eventDef.defName}' (SpawnBuilding) enqueued for dimension {dimensionId} at grid {gridPos}."); - } - - public void EnqueueBulletSpawnEvent(string dimensionId, EventDef eventDef, Vector3 pos, Vector3 dir, - Entity.Entity source = null) - { - if (eventDef == null || eventDef.eventType != EventType.SpawnBullet || eventDef.entityDef_Bullet == null) - { - Debug.LogError( - $"EnqueueBulletSpawnEvent: Invalid EventDef, mismatched EventType ({eventDef?.eventType}), or missing bulletDef for event '{eventDef?.defName ?? "Unknown"}'."); - return; - } - - _eventQueue.Enqueue(new EventPayload - { - DimensionId = dimensionId, - EventDefinition = eventDef, - Position = pos, - Direction = dir, - SourceEntity = source, - }); - Debug.Log($"Event '{eventDef.defName}' (SpawnBullet) enqueued for dimension {dimensionId} at {pos}, dir {dir}."); - } - - public void EnqueuePickupSpawnEvent(string dimensionId, EventDef eventDef, Vector3 pos) - { - if (eventDef == null || eventDef.eventType != EventType.SpawnPickup || eventDef.entityDef_Pickup == null) - { - Debug.LogError( - $"EnqueuePickupSpawnEvent: Invalid EventDef, mismatched EventType ({eventDef?.eventType}), or missing itemDef for event '{eventDef?.defName ?? "Unknown"}'."); - return; - } - - _eventQueue.Enqueue(new EventPayload - { - DimensionId = dimensionId, - EventDefinition = eventDef, - Position = pos, - }); - Debug.Log($"Event '{eventDef.defName}' (SpawnPickup) enqueued for dimension {dimensionId} at {pos}."); - } - - public void EnqueueDefaultEntitySpawnEvent(string dimensionId, EventDef eventDef, Vector3 pos) - { - if (eventDef == null || eventDef.eventType != EventType.SpawnDefaultEntity) - { - Debug.LogError( - $"EnqueueDefaultEntitySpawnEvent: Invalid EventDef or mismatched EventType ({eventDef?.eventType}) for event '{eventDef?.defName ?? "Unknown"}'."); - return; - } - - _eventQueue.Enqueue(new EventPayload - { - DimensionId = dimensionId, - EventDefinition = eventDef, - Position = pos, - }); - Debug.Log($"Event '{eventDef.defName}' (SpawnDefaultEntity) enqueued for dimension {dimensionId} at {pos}."); - } - - // =================================== - // 事件处理方法 - // =================================== /// - /// 处理所有在队列中的待处理事件。 + /// 存储所有已加载的事件定义,键为事件名称,值为对应的事件工作类实例。 /// - public void ProcessEvents() + public Dictionary EventDefs { get; private set; } = null; + + /// + /// 获取当前加载步骤的描述,用于启动流程的进度显示。 + /// + public string StepDescription => "正在载入事件"; + + /// + /// 初始化事件管理器,从定义管理器中加载所有事件定义并实例化其工作类。 + /// + public void Init() { - while (_eventQueue.Count > 0) + // 如果事件定义已经加载,则直接返回,避免重复初始化。 + if (EventDefs != null) + return; + + var defs = DefineManager.Instance.QueryDefinesByType(); + EventDefs = new Dictionary(); + foreach (var def in defs) { - EventPayload eventData = _eventQueue.Dequeue(); - if (!Program.Instance.GetDimension(eventData.DimensionId)) + if (EventDefs.ContainsKey(def.defName)) { - Debug.LogWarning( - $"Event '{eventData.EventDefinition.defName}' for dimension {eventData.DimensionId} dropped as dimension is no longer active."); + Debug.LogWarning($"警告:事件名称重复,已跳过加载名称为 {def.defName} 的事件定义。"); continue; } - - // 核心:调用 EntityManage.Instance 的现有公共方法 - switch (eventData.EventDefinition.eventType) + var eventWorker = GetAndInstantiateEventWorker(def.workClass); + if (eventWorker == null) { - case EventType.SpawnCharacter: - EntityManage.Instance.GenerateEntity(eventData.DimensionId, - eventData.EventDefinition.entityDef_Character, eventData.Position); - break; - case EventType.SpawnBuilding: - EntityManage.Instance.GenerateBuildingEntity(eventData.DimensionId, - eventData.EventDefinition.entityDef_Building, eventData.GridPosition); - break; - case EventType.SpawnBullet: - EntityManage.Instance.GenerateBulletEntity(eventData.DimensionId, - eventData.EventDefinition.entityDef_Bullet, eventData.Position, eventData.Direction, - eventData.SourceEntity); - break; - case EventType.SpawnPickup: - EntityManage.Instance.GeneratePickupEntity(eventData.DimensionId, - eventData.EventDefinition.entityDef_Pickup, eventData.Position); - break; - case EventType.SpawnDefaultEntity: - EntityManage.Instance.GenerateDefaultEntity(eventData.DimensionId, eventData.Position); - break; - case EventType.None: - default: - Debug.LogWarning( - $"EventManager: Unhandled or invalid event type: {eventData.EventDefinition.eventType} for event '{eventData.EventDefinition.defName}'."); - break; + Debug.LogWarning($"警告:未能找到或实例化名称为 '{def.workClass}' 的事件工作类,已跳过加载名称为 '{def.defName}' 的事件定义。"); + continue; } + eventWorker.Init(def.value); + EventDefs.Add(def.defName, eventWorker); + } + Debug.Log($"事件管理器初始化完成,共载入 {EventDefs.Count} 个事件。"); + } + + /// + /// 清理事件管理器,释放所有已加载的事件定义。 + /// + public void Clear() + { + EventDefs = null; + Debug.Log("事件管理器已清理。"); + } + + /// + /// 执行指定名称的事件。 + /// + /// 要执行的事件的名称。 + /// 事件执行的维度ID,如果为null,将使用当前焦点的维度ID。 + public void Action(string eventName, string dimensionID = null) + { + if (EventDefs == null) + { + Debug.LogError($"错误:事件管理器尚未初始化或已被清理。无法执行事件 '{eventName}'。"); + return; + } + + if (!EventDefs.ContainsKey(eventName)) + { + Debug.LogWarning($"警告:未能找到名称为 '{eventName}' 的事件定义,已跳过执行该事件。"); + return; + } + // 假设 Program.Instance 和 FocusedDimensionId 存在且可访问。 + // 如果 dimensionID 为 null,则使用当前焦点维度ID。 + dimensionID ??= Program.Instance.FocusedDimensionId; + EventDefs[eventName].Run(dimensionID); + } + + /// + /// 根据类名从指定命名空间和程序集下获取并实例化一个 的子类。 + /// + /// 要实例化的类的短名称(不包含命名空间)。 + /// 目标类所在的完整命名空间。 + /// 要搜索的程序集。如果为 null,将搜索 所在的程序集。 + /// 实例化后的 对象,如果找不到或不符合条件则返回 null。 + public static EventWorkClassBase GetAndInstantiateEventWorker( + string className, + string targetNamespace = "EventWorkClass", // 默认命名空间 + Assembly assemblyToSearch = null) // 默认程序集 + { + // 1. 确定要搜索的程序集。 + if (assemblyToSearch == null) + { + // 默认从 EventWorkClassBase 所在的程序集查找,通常其实现类也会在这个程序集。 + assemblyToSearch = typeof(EventWorkClassBase).Assembly; + } + + // 2. 构造完整的类型名称。 + string fullTypeName = $"{targetNamespace}.{className}"; + Type targetType = null; + + // 3. 尝试直接从程序集获取类型。 + targetType = assemblyToSearch.GetType(fullTypeName); + + // 4. 进行类型检查。 + if (targetType == null) + { + Debug.LogError($"错误:在程序集 '{assemblyToSearch.FullName}' 的命名空间 '{targetNamespace}' 中未找到类 '{className}'。"); + return null; + } + // 检查是否是 EventWorkClassBase 的子类。 + if (!typeof(EventWorkClassBase).IsAssignableFrom(targetType)) + { + Debug.LogError($"错误:类 '{fullTypeName}' 不是 '{typeof(EventWorkClassBase).FullName}' 的子类。"); + return null; + } + // 检查是否可以实例化(非抽象类,非接口)。 + if (targetType.IsAbstract || targetType.IsInterface) + { + Debug.LogError($"错误:类 '{fullTypeName}' 是抽象类或接口,不能直接实例化。"); + return null; + } + + // 5. 实例化对象。 + try + { + // 使用 Activator.CreateInstance 实例化对象。它默认调用无参公共构造函数。 + object instance = Activator.CreateInstance(targetType); + return instance as EventWorkClassBase; + } + catch (MissingMethodException ex) + { + Debug.LogError($"错误:类 '{fullTypeName}' 没有公共的无参构造函数。详情: {ex.Message}"); + return null; + } + catch (Exception ex) + { + Debug.LogError($"实例化类 '{fullTypeName}' 时发生未知错误。详情: {ex.Message}"); + return null; } } - - protected override void OnStart() - { - throw new System.NotImplementedException(); - } } -} \ No newline at end of file +} diff --git a/Client/Assets/Scripts/Managers/ILaunchManager.cs b/Client/Assets/Scripts/Managers/ILaunchManager.cs index 3b70db6..d47d3ad 100644 --- a/Client/Assets/Scripts/Managers/ILaunchManager.cs +++ b/Client/Assets/Scripts/Managers/ILaunchManager.cs @@ -3,6 +3,7 @@ namespace Managers public interface ILaunchManager { string StepDescription { get; } // 获取当前加载步骤的描述 + void Init(); // 初始化管理器 void Clear(); // 清理管理器,用于重载 } diff --git a/Client/Assets/Scripts/Managers/PackagesImageManager.cs b/Client/Assets/Scripts/Managers/PackagesImageManager.cs index 7528ec5..00035c5 100644 --- a/Client/Assets/Scripts/Managers/PackagesImageManager.cs +++ b/Client/Assets/Scripts/Managers/PackagesImageManager.cs @@ -22,20 +22,14 @@ namespace Managers public Sprite defaultSprite; /// - /// 存储所有已加载的纹理,按包ID和图像名称索引。 + /// 存储所有已加载的纹理,按图像名称(全局唯一的DefName)索引。 /// - /// - /// 外层字典键是包ID,内层字典键是图像名称。 - /// - public Dictionary> packagesImages = new(); + public Dictionary packagesImages = new(); /// - /// 存储所有已创建的精灵,按包ID和精灵名称索引。 + /// 存储所有已创建的精灵,按精灵名称(全局唯一的DefName或其带索引后缀)索引。 /// - /// - /// 外层字典键是包ID,内层字典键是精灵名称(如果纹理被分割,会包含索引后缀)。 - /// - public Dictionary> sprites = new(); + public Dictionary sprites = new(); /// /// 获取当前启动步骤的描述。 @@ -49,21 +43,15 @@ namespace Managers { if (packagesImages.Count > 0) { - // 如果已经加载过,直接返回。 - StepDescription = "包图像管理器已初始化。"; - return; + // 如果已经有数据,则跳过初始化,防止重复加载。 + return; } - - StepDescription = "正在加载默认精灵..."; // 更新加载步骤描述 defaultSprite = Resources.Load("Default/DefaultImage"); if (defaultSprite == null) { Debug.LogWarning("无法加载默认精灵 'Resources/Default/DefaultImage'。请确保文件存在。"); } - - StepDescription = "正在处理图像定义并创建精灵..."; // 更新加载步骤描述 InitImageDef(); - StepDescription = "包图像管理器初始化完成。"; // 完成加载 } /// @@ -76,7 +64,7 @@ namespace Managers if (imageDef == null || !imageDef.Any()) { - Debug.Log($"在 DefineManager 中未找到任何 ImageDef 定义。({typeof(ImageDef).Name})"); + Debug.Log($"在定义管理器中未找到任何图像定义。({nameof(ImageDef)})"); return; } @@ -84,7 +72,7 @@ namespace Managers { if (string.IsNullOrEmpty(ima.path) || string.IsNullOrEmpty(ima.packID)) { - Debug.LogWarning($"跳过图像定义 '{ima?.name ?? "未知"}',因为它包含空路径或包ID。(路径: '{ima?.path ?? ""}', 包ID: '{ima?.packID ?? ""}')"); + Debug.LogWarning($"跳过图像定义 '{ima?.defName ?? "未知"}',因为它包含空路径或包ID。(路径: '{ima?.path ?? ""}', 包ID: '{ima?.packID ?? ""}')"); continue; } @@ -119,7 +107,7 @@ namespace Managers var packageRoot = Managers.DefineManager.Instance.GetPackagePath(packageID); if (string.IsNullOrEmpty(packageRoot)) { - Debug.LogWarning($"图像定义 '{ima.name}' (包ID: {ima.packID}): 引用的包ID '{packageID}' 未找到或没有根路径。跳过图像加载。"); + Debug.LogWarning($"图像定义 '{ima.defName}' (包ID: {ima.packID}): 引用的包ID '{packageID}' 未找到或没有根路径。跳过图像加载。"); continue; } @@ -140,7 +128,7 @@ namespace Managers var pack = Managers.DefineManager.Instance.GetDefinePackage(ima); if (pack == null) { - Debug.LogError($"图像定义 '{ima.name}' (包ID: {ima.packID}): 源图像未找到对应的定义包。无法确定 '{ima.path}' 的完整路径。跳过。"); + Debug.LogError($"图像定义 '{ima.defName}' (包ID: {ima.packID}): 源图像未找到对应的定义包。无法确定 '{ima.path}' 的完整路径。跳过。"); continue; } var fullPath = Path.Combine(pack.packRootPath, ima.path).Replace('\\', '/'); @@ -158,31 +146,20 @@ namespace Managers // 资源加载失败 if (!texture) { - Debug.LogError($"未能加载图像定义所在的纹理: '{ima.name}' (路径: '{ima.path}', 包ID: '{ima.packID}')。请验证路径和文件是否存在。"); + Debug.LogError($"未能加载图像定义关联的纹理: '{ima.defName}' (路径: '{ima.path}', 包ID: '{ima.packID}')。请验证路径和文件是否存在。"); continue; } - // 存储到包纹理字典(使用定义自身的 packID) - var packId = ima.packID; - if (!packagesImages.ContainsKey(packId)) - packagesImages[packId] = new Dictionary(); - - // 警告:如果图片名重复,则覆盖 - if (packagesImages[packId].ContainsKey(ima.name)) - { - Debug.LogWarning($"包 '{packId}' 中名为 '{ima.name}' 的图像被多次定义。将覆盖之前的纹理引用。这可能表示配置错误。"); - } - packagesImages[packId][ima.name] = texture; // 覆盖或添加 - + packagesImages[ima.defName] = texture; // 切分精灵 - SplitTextureIntoSprites(packId, ima.name, texture, ima.hCount, ima.wCount, ima.pixelsPerUnit); + SplitTextureIntoSprites(ima.defName, texture, ima.hCount, ima.wCount, ima.pixelsPerUnit); } catch (Exception ex) { // 捕获异常并打印详细错误信息 Debug.LogError( - $"处理图像定义时出错: '{ima.name}' (路径: '{ima.path}', 包ID: '{ima.packID}')。异常: {ex.GetType().Name}: {ex.Message}\n堆栈跟踪: {ex.StackTrace}"); + $"处理图像定义时出错: '{ima.defName}' (路径: '{ima.path}', 包ID: '{ima.packID}')。异常: {ex.GetType().Name}: {ex.Message}\n堆栈跟踪: {ex.StackTrace}"); } } } @@ -190,14 +167,12 @@ namespace Managers /// /// 将纹理按指定行数和列数分割成多个精灵,并存储起来。 /// - /// 精灵所属的包ID。 - /// 精灵的基础名称。 + /// 精灵的基础名称(全局唯一的DefName)。 /// 要分割的 对象。 /// 水平分割的行数。 /// 垂直分割的列数。 /// 每个单元的像素数,用于Sprite.Create。 private void SplitTextureIntoSprites( - string packId, string baseName, Texture2D texture, int rows, @@ -206,7 +181,7 @@ namespace Managers { if (!texture) { - Debug.LogError($"SplitTextureIntoSprites: 包 '{packId}' 中 '{baseName}' 提供的纹理为空。无法分割。"); + Debug.LogError($"SplitTextureIntoSprites: '{baseName}' 提供的纹理为空。无法分割。"); return; } @@ -217,19 +192,11 @@ namespace Managers var textureWidth = texture.width; var textureHeight = texture.height; - if (!sprites.ContainsKey(packId)) - sprites[packId] = new Dictionary(); - - // 创建未分割的完整精灵,使用原始名称 + // 创建未分割的完整精灵,使用原始名称 (baseName,即 ImageDef.name) var fullSpriteRect = new Rect(0, 0, textureWidth, textureHeight); - // 警告:如果精灵名重复,则覆盖 - if (sprites[packId].ContainsKey(baseName)) - { - Debug.LogWarning($"包 '{packId}' 中名为 '{baseName}' 的精灵已存在。将覆盖之前的完整精灵定义。"); - } var fullSprite = Sprite.Create(texture, fullSpriteRect, new Vector2(0.5f, 0.5f), pixelsPerUnit); fullSprite.name = baseName; // 确保 Sprite.name 被设置 - sprites[packId][baseName] = fullSprite; + sprites[baseName] = fullSprite; // 如果不分割(rows和cols都为1),提前返回 if (rows == 1 && cols == 1) @@ -240,7 +207,7 @@ namespace Managers // 检查纹理尺寸是否可被分割数整除 if (textureWidth % cols != 0 || textureHeight % rows != 0) { - Debug.LogError($"包 '{packId}' 中 '{baseName}' 的纹理尺寸 ({textureWidth}x{textureHeight}) 不能被指定的行数 ({rows}) 和列数 ({cols}) 完美整除。子精灵将不会生成或可能不正确。仅显示完整精灵。"); + Debug.LogError($"'{baseName}' 的纹理尺寸 ({textureWidth}x{textureHeight}) 不能被指定的行数 ({rows}) 和列数 ({cols}) 完美整除。子精灵将不会生成或可能不正确。仅显示完整精灵。"); return; // 终止子精灵分割,只保留完整的精灵 } @@ -253,18 +220,11 @@ namespace Managers { Rect spriteRect = new(col * tileWidth, row * tileHeight, tileWidth, tileHeight); var sprite = Sprite.Create(texture, spriteRect, new Vector2(0.5f, 0.5f), pixelsPerUnit); - // 精灵索引计算方式 var index = (rows - row - 1) * cols + col; var spriteName = $"{baseName}_{index}"; sprite.name = spriteName; - - // 警告:如果子精灵名重复,则覆盖 - if (sprites[packId].ContainsKey(spriteName)) - { - Debug.LogWarning($"包 '{packId}' 中名为 '{spriteName}' 的精灵已存在。将覆盖之前的子精灵定义。这可能表示配置错误。"); - } - sprites[packId][spriteName] = sprite; + sprites[spriteName] = sprite; } } } @@ -299,36 +259,24 @@ namespace Managers /// /// 根据 对象获取对应的精灵。 /// - /// 包含精灵包ID和名称的 对象。 + /// 包含精灵名称的 对象。 /// 如果找到对应的精灵,则返回该精灵;否则返回 public Sprite GetSprite(ImageDef ima) { - if (ima == null) return defaultSprite; - return GetSprite(ima.packID, ima.name); + if (ima == null) return defaultSprite; + return GetSprite(ima.packID, ima.defName); } /// /// 根据包ID和精灵名称获取对应的精灵。 /// - /// 精灵所属的包ID。如果为空,则会遍历所有包查找。 - /// 精灵的名称。 + /// 精灵所属的包ID。此参数在此版本中已不再用于字典查找,但为保持兼容性而保留。 + /// 精灵的名称(全局唯一的DefName)。 /// 如果找到对应的精灵,则返回该精灵;否则返回 public Sprite GetSprite(string packID, string name) { - if (string.IsNullOrEmpty(packID)) - { - // 如果packID为空,遍历所有包以name查找 - foreach (var kvp in sprites) - { - if (kvp.Value.TryGetValue(name, out var sprite)) - return sprite; - } - } - else if (sprites.TryGetValue(packID, out var dict)) - { - if (dict.TryGetValue(name, out var sprite)) - return sprite; - } + if (sprites.TryGetValue(name, out var sprite)) + return sprite; // 如果未找到,返回默认精灵 return defaultSprite; @@ -337,14 +285,40 @@ namespace Managers /// /// 根据包ID、基础名称和索引获取被分割的子精灵。 /// - /// 精灵所属的包ID。 - /// 精灵的基础名称。 + /// 精灵所属的包ID。此参数在此版本中已不再用于字典查找,但为保持兼容性而保留。 + /// 精灵的基础名称(全局唯一的DefName)。 /// 子精灵的索引。 /// 如果找到对应的子精灵,则返回该精灵;否则返回 public Sprite GetSprite(string packID, string name, int index) { var fullName = $"{name}_{index}"; - return GetSprite(packID, fullName); + return GetSprite(packID, fullName); + } + + // ---------- 新增的查询接口 ---------- + + /// + /// 根据精灵名称(全局唯一的DefName)获取对应的精灵。 + /// + /// 精灵的名称。 + /// 如果找到对应的精灵,则返回该精灵;否则返回 + public Sprite GetSprite(string name) + { + if (sprites.TryGetValue(name, out var sprite)) + return sprite; + return defaultSprite; + } + + /// + /// 根据基础名称(全局唯一的DefName)和索引获取被分割的子精灵。 + /// + /// 精灵的基础名称。 + /// 子精灵的索引。 + /// 如果找到对应的子精灵,则返回该精灵;否则返回 + public Sprite GetSprite(string name, int index) + { + var fullName = $"{name}_{index}"; + return GetSprite(fullName); } } } diff --git a/Client/Assets/Scripts/Managers/SaveManager.cs b/Client/Assets/Scripts/Managers/SaveManager.cs new file mode 100644 index 0000000..302c8be --- /dev/null +++ b/Client/Assets/Scripts/Managers/SaveManager.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; +using Entity; + +namespace Managers +{ + public class SaveManager:Utils.Singleton + { + public List baseHediffs = new(); + } +} \ No newline at end of file diff --git a/Client/Assets/Scripts/Managers/SaveManager.cs.meta b/Client/Assets/Scripts/Managers/SaveManager.cs.meta new file mode 100644 index 0000000..5367d98 --- /dev/null +++ b/Client/Assets/Scripts/Managers/SaveManager.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: daa6e65f38a5495492e994e89eba53f4 +timeCreated: 1756655387 \ No newline at end of file diff --git a/Client/Assets/Scripts/Map/Dimension.cs b/Client/Assets/Scripts/Map/Dimension.cs index 16c9dba..6e86c6f 100644 --- a/Client/Assets/Scripts/Map/Dimension.cs +++ b/Client/Assets/Scripts/Map/Dimension.cs @@ -17,6 +17,8 @@ namespace Map [SerializeField] public MapGenerator mapGenerator; public Vector3 cameraPosition; + + public Entity.Entity focusEntity; /// /// 获取此维度的唯一标识符。 /// @@ -42,39 +44,27 @@ namespace Map private void Awake() { - // 1. 确保 DimensionId 已初始化,这会触发 DimensionId 属性的 getter 逻辑 var id = DimensionId; // 2. 创建一个用于存放此维度下所有实体的根GameObject,方便管理 var rootObj = new GameObject($"_Entities_{id}"); rootObj.transform.SetParent(this.transform); // 将其作为Dimension对象的子对象 DimensionRoot = rootObj.transform; - // 3. 注册此维度到 Program - if (Program.Instance != null) // 检查单例是否仍然存在 - { - Program.Instance.RegisterDimension(this); - } - else - { - Debug.LogError( - "[Dimension] Program.Instance is null during Dimension Awake. Cannot register dimension.", this); - } - + Program.Instance.RegisterDimension(this); + + mapGenerator.Init(); + var size = mapGenerator.baseMap.GetSize(); + cameraPosition = new Vector3(size.x / 2f, size.y / 2f, -10)+transform.position; // 5. 处理 defaultOpen 逻辑,设置Program的焦点维度 // 确保在自身注册到 Program 之后再设置焦点,这样 Program 内部才能找到它 - if (defaultOpen && Program.Instance != null) + if (defaultOpen) { Program.Instance.SetFocusedDimension(_dimensionId); } } - - private void Start() - { - var size = mapGenerator.baseMap.GetSize(); - cameraPosition = new Vector3(size.x / 2f, size.y / 2f, -10) + transform.position; - } + private void OnDestroy() { diff --git a/Client/Assets/Scripts/Map/MapGenerator.cs b/Client/Assets/Scripts/Map/MapGenerator.cs index e6b3b3a..9e97830 100644 --- a/Client/Assets/Scripts/Map/MapGenerator.cs +++ b/Client/Assets/Scripts/Map/MapGenerator.cs @@ -6,8 +6,8 @@ namespace Map public class MapGenerator : MonoBehaviour { public DoubleMap baseMap; - - private void Awake() + + public void Init() { Managers.DefineManager.Instance.Init(); Managers.PackagesImageManager.Instance.Init(); @@ -26,8 +26,16 @@ namespace Map } baseMap.RefreshAllTiles(); - CameraControl.CameraControl.Instance.SetPosition(new Vector3(size * 0.5f, size * 0.5f, -10)); } + public Vector2Int GetSize() + { + return baseMap.GetSize(); + } + + public Vector2Int GetWorldCoordinates(Vector2Int mapCoordinates) + { + return new Vector2Int((int)transform.position.x, (int)transform.position.y) + mapCoordinates; + } } } \ No newline at end of file diff --git a/Client/Assets/Scripts/Prefab/BaseAnimator.cs b/Client/Assets/Scripts/Prefab/BaseAnimator.cs new file mode 100644 index 0000000..584731e --- /dev/null +++ b/Client/Assets/Scripts/Prefab/BaseAnimator.cs @@ -0,0 +1,138 @@ +// Base/BaseAnimator.cs +using System; +using UnityEngine; +using Base; // 假设ITick接口在这个命名空间 + +namespace Base +{ + // 抽象基类,封装通用动画逻辑 + public abstract class BaseAnimator : MonoBehaviour, ITick + { + // 通用公开字段(可在编辑器中设置) + [SerializeField] protected Sprite[] _sprites; // 动画精灵序列 + [SerializeField] protected float _fps = 2; // 每秒帧数 + [SerializeField] protected Sprite _staticSprite; // 暂停时的静态精灵 + + // 通用内部状态 + protected bool _isPaused; // 暂停状态 + protected float _frameTimer; // 帧计时器 + protected int _currentFrameIndex; // 当前帧索引 + + // 抽象方法:子类必须实现以获取并验证其特有的显示组件 + protected abstract void ValidateComponent(); + + // 抽象方法:子类必须实现以设置实际显示组件的Sprite + protected abstract void SetDisplaySprite(Sprite sprite); + + protected virtual void Awake() + { + ValidateComponent(); // 子类获取组件 + ValidateStartFrame(); // 初始化第一帧 + } + + // ITick接口实现 + public void Tick() + { + var deltaTime = Time.deltaTime; + if (_isPaused) + { + HandlePausedState(); + return; + } + + PlayAnimation(deltaTime); + } + + protected void ValidateStartFrame() + { + // 确保有精灵时可显示有效帧 + if (_sprites != null && _sprites.Length > 0) + { + _currentFrameIndex = Mathf.Clamp(_currentFrameIndex, 0, _sprites.Length - 1); + SetDisplaySprite(_sprites[_currentFrameIndex]); // 调用抽象方法设置Sprite + } + else + { + SetDisplaySprite(null); // 调用抽象方法清空Sprite + } + } + + protected void HandlePausedState() + { + // 优先使用静态精灵,否则保持当前帧 + if (_staticSprite) + { + SetDisplaySprite(_staticSprite); // 调用抽象方法设置Sprite + } + // 否则,保持当前显示的Sprite,不需要额外操作(SetDisplaySprite已在NextFrame中设置) + } + + protected void PlayAnimation(float deltaTime) + { + if (_sprites == null || _sprites.Length == 0) + { + // 如果没有精灵,确保显示组件的Sprite被清除 + SetDisplaySprite(null); + return; + } + + // 更新帧计时器 + _frameTimer += deltaTime; + var frameDuration = 1f / _fps; + + // 检查帧切换条件 + while (_frameTimer >= frameDuration) + { + _frameTimer -= frameDuration; + NextFrame(); + } + } + + protected void NextFrame() + { + if (_sprites == null || _sprites.Length == 0) return; + + // 循环播放动画 + _currentFrameIndex = (_currentFrameIndex + 1) % _sprites.Length; + SetDisplaySprite(_sprites[_currentFrameIndex]); // 调用抽象方法更新Sprite + } + + // 外部控制方法 + public void SetPaused(bool paused) => _isPaused = paused; + + public void SetSprites(Sprite[] newSprites) + { + _sprites = newSprites; + + // 如果有新的精灵数组,则立即显示第一帧 + if (_sprites != null && _sprites.Length > 0) + { + _currentFrameIndex = 0; // 重置当前帧索引为第一帧 + SetDisplaySprite(_sprites[_currentFrameIndex]); // 立即显示第一帧 + } + else + { + SetDisplaySprite(null); // 如果没有精灵,则清空渲染器 + } + + // 重置帧计时器,以确保从头开始播放 + _frameTimer = 0f; + } + + public void Restore() + { + _currentFrameIndex = 0; + if (_sprites != null && _sprites.Length > 0) + { + SetDisplaySprite(_sprites[_currentFrameIndex]); // 恢复到第一帧 + } + else + { + SetDisplaySprite(null); + } + } + + public void SetFPS(float newFPS) => _fps = Mathf.Max(0.1f, newFPS); + public void SetStaticSprite(Sprite sprite) => _staticSprite = sprite; + } +} diff --git a/Client/Assets/Scripts/Prefab/BaseAnimator.cs.meta b/Client/Assets/Scripts/Prefab/BaseAnimator.cs.meta new file mode 100644 index 0000000..3a6c8ef --- /dev/null +++ b/Client/Assets/Scripts/Prefab/BaseAnimator.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 84dda25302c44253949e7818cd62b7e7 +timeCreated: 1756778358 \ No newline at end of file diff --git a/Client/Assets/Scripts/Prefab/BuffIconUI.cs b/Client/Assets/Scripts/Prefab/BuffIconUI.cs new file mode 100644 index 0000000..bba9550 --- /dev/null +++ b/Client/Assets/Scripts/Prefab/BuffIconUI.cs @@ -0,0 +1,10 @@ +using UI; +using UnityEngine; + +namespace Prefab +{ + public class BuffIconUI: MonoBehaviour + { + public UIImageAnimator icon; + } +} \ No newline at end of file diff --git a/Client/Assets/Scripts/Prefab/BuffIconUI.cs.meta b/Client/Assets/Scripts/Prefab/BuffIconUI.cs.meta new file mode 100644 index 0000000..7dc7161 --- /dev/null +++ b/Client/Assets/Scripts/Prefab/BuffIconUI.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 17587b13f9d4467dbff77cf9762dc8fe +timeCreated: 1756780876 \ No newline at end of file diff --git a/Client/Assets/Scripts/Prefab/SpriteAnimator.cs b/Client/Assets/Scripts/Prefab/SpriteAnimator.cs index 9448abe..bd8be9a 100644 --- a/Client/Assets/Scripts/Prefab/SpriteAnimator.cs +++ b/Client/Assets/Scripts/Prefab/SpriteAnimator.cs @@ -1,114 +1,36 @@ -using Base; using UnityEngine; +using Base; // 引入Base命名空间以使用BaseAnimator namespace Prefab { [RequireComponent(typeof(SpriteRenderer))] - public class SpriteAnimator : MonoBehaviour, ITick + public class SpriteAnimator : BaseAnimator { - // 公开字段(可在编辑器中设置) - [SerializeField] private Sprite[] _sprites; // 动画精灵序列 - [SerializeField] private float _fps = 2; // 每秒帧数 - [SerializeField] private Sprite _staticSprite; // 暂停时的静态精灵 - private SpriteRenderer _renderer; // 渲染器组件 - private bool _isPaused; // 暂停状态 - private float _frameTimer; // 帧计时器 - private int _currentFrameIndex; // 当前帧索引 - private void Awake() + protected override void ValidateComponent() { _renderer = GetComponent(); - ValidateStartFrame(); - } - - // ITick接口实现 - public void Tick() - { - var deltaTime = Time.deltaTime; - if (_isPaused) + if (_renderer == null) { - HandlePausedState(); - return; - } - - PlayAnimation(deltaTime); - } - - private void ValidateStartFrame() - { - // 确保有精灵时可显示有效帧 - if (_sprites != null && _sprites.Length > 0) - { - _currentFrameIndex = Mathf.Clamp(_currentFrameIndex, 0, _sprites.Length - 1); - _renderer.sprite = _sprites[_currentFrameIndex]; - } - else - { - _renderer.sprite = null; + Debug.LogError("SpriteAnimator requires a SpriteRenderer component.", this); + enabled = false; // 禁用脚本如果组件缺失 } } - private void HandlePausedState() + protected override void SetDisplaySprite(Sprite sprite) { - // 优先使用静态精灵,否则保持当前帧 - if (_staticSprite) + if (_renderer != null) { - _renderer.sprite = _staticSprite; + _renderer.sprite = sprite; } } - private void PlayAnimation(float deltaTime) - { - if (_sprites == null || _sprites.Length == 0) return; - - // 更新帧计时器 - _frameTimer += deltaTime; - var frameDuration = 1f / _fps; - - // 检查帧切换条件 - while (_frameTimer >= frameDuration) - { - _frameTimer -= frameDuration; - NextFrame(); - } - } - - private void NextFrame() - { - // 循环播放动画 - _currentFrameIndex = (_currentFrameIndex + 1) % _sprites.Length; - _renderer.sprite = _sprites[_currentFrameIndex]; - } - - // 外部控制方法 - public void SetPaused(bool paused) => _isPaused = paused; - public void SetSprites(Sprite[] newSprites) - { - _sprites = newSprites; - - // 如果有新的精灵数组,则立即显示第一帧 - if (_sprites != null && _sprites.Length > 0) - { - _currentFrameIndex = 0; // 重置当前帧索引为第一帧 - _renderer.sprite = _sprites[_currentFrameIndex]; // 立即显示第一帧 - } - else - { - _renderer.sprite = null; // 如果没有精灵,则清空渲染器 - } - - // 重置帧计时器,以确保从头开始播放 - _frameTimer = 0f; - } - - public void Restore() - { - _currentFrameIndex = 0; - _renderer.sprite = _sprites[_currentFrameIndex]; - } - - public void SetFPS(float newFPS) => _fps = Mathf.Max(0.1f, newFPS); - public void SetStaticSprite(Sprite sprite) => _staticSprite = sprite; + // [可选] 如果SpriteAnimator需要任何Awake后特有的初始化逻辑,可以在这里重写 + // protected override void Awake() + // { + // base.Awake(); // 确保调用基类的Awake + // // 子类特有的初始化 + // } } } \ No newline at end of file diff --git a/Client/Assets/Scripts/Prefab/UIImageAnimator.cs b/Client/Assets/Scripts/Prefab/UIImageAnimator.cs new file mode 100644 index 0000000..a5d2379 --- /dev/null +++ b/Client/Assets/Scripts/Prefab/UIImageAnimator.cs @@ -0,0 +1,38 @@ +// UI/UIImageAnimator.cs +using UnityEngine; +using UnityEngine.UI; +using Base; // 引入Base命名空间以使用BaseAnimator + +namespace UI +{ + [RequireComponent(typeof(Image))] + public class UIImageAnimator : BaseAnimator // 继承BaseAnimator + { + private Image _image; // UI Image组件 + + protected override void ValidateComponent() + { + _image = GetComponent(); + if (_image == null) + { + Debug.LogError("UIImageAnimator requires an Image component.", this); + enabled = false; // 禁用脚本如果组件缺失 + } + } + + protected override void SetDisplaySprite(Sprite sprite) + { + if (_image) + { + _image.sprite = sprite; + } + } + + // [可选] 如果UIImageAnimator需要任何Awake后特有的初始化逻辑,可以在这里重写 + // protected override void Awake() + // { + // base.Awake(); // 确保调用基类的Awake + // // 子类特有的初始化 + // } + } +} \ No newline at end of file diff --git a/Client/Assets/Scripts/Prefab/UIImageAnimator.cs.meta b/Client/Assets/Scripts/Prefab/UIImageAnimator.cs.meta new file mode 100644 index 0000000..b8ebcfb --- /dev/null +++ b/Client/Assets/Scripts/Prefab/UIImageAnimator.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c6f899d1c5ef450bb6f3e670fa55cffd +timeCreated: 1756778168 \ No newline at end of file diff --git a/Client/Assets/Scripts/Program.cs b/Client/Assets/Scripts/Program.cs index 1cb0735..6ec9842 100644 --- a/Client/Assets/Scripts/Program.cs +++ b/Client/Assets/Scripts/Program.cs @@ -5,6 +5,9 @@ using System.Linq; using UnityEngine; using Utils; + + + /// /// Program 类作为单例模式的核心管理器,负责维护和管理游戏或应用中的维度(Dimension)实例和焦点状态。 /// 它提供了维度注册、注销、获取以及焦点维度设置的功能。 @@ -205,6 +208,8 @@ public class Program : Singleton // 更新内部状态 FocusedEntity = entity; + if(FocusedDimension) + FocusedDimension.focusEntity=entity; // 触发事件,将新的焦点实体(或 null)作为参数传递。 OnFocusedEntityChanged?.Invoke(FocusedEntity); diff --git a/Client/Assets/Scripts/UI/AttackModeUI.cs b/Client/Assets/Scripts/UI/AttackModeUI.cs new file mode 100644 index 0000000..51a958c --- /dev/null +++ b/Client/Assets/Scripts/UI/AttackModeUI.cs @@ -0,0 +1,16 @@ +using System; +using UnityEngine; +using UnityEngine.UI; + +namespace UI +{ + public class AttackModeUI:MonoBehaviour + { + public UIImageAnimator icon; + + private void Start() + { + icon.gameObject.SetActive(false); + } + } +} \ No newline at end of file diff --git a/Client/Assets/Scripts/UI/AttackModeUI.cs.meta b/Client/Assets/Scripts/UI/AttackModeUI.cs.meta new file mode 100644 index 0000000..fd663b4 --- /dev/null +++ b/Client/Assets/Scripts/UI/AttackModeUI.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2d81179f82c542edb275daabff5bfe12 +timeCreated: 1756781456 \ No newline at end of file diff --git a/Client/Assets/Scripts/UI/BarUI.cs b/Client/Assets/Scripts/UI/BarUI.cs index e84fbc9..83ac949 100644 --- a/Client/Assets/Scripts/UI/BarUI.cs +++ b/Client/Assets/Scripts/UI/BarUI.cs @@ -7,10 +7,63 @@ namespace UI { [SerializeField] private Image image; + [Header("Progress Gradient")] [SerializeField] + private Gradient progressGradient; // 用于定义多色进度渐变 + + [Header("Editor Preview")] [SerializeField] [Range(0, 1)] + private float _editorProgressPreview = 0f; // 用于在编辑器中预览的进度值 + + /// + /// 获取或设置进度条的当前进度 (0-1)。 + /// 设置时会同时更新进度条的填充量和根据渐变更新颜色。 + /// public float Progress { get => image.fillAmount; - set => image.fillAmount = value; + set + { + // 在运行时检查image是否已赋值 + if (image == null) + { + Debug.LogWarning("BarUI: Image reference is not set! Cannot update progress or color.", this); + return; + } + + // 确保进度值在0到1之间,防止出现异常情况 + float clampedValue = Mathf.Clamp01(value); + image.fillAmount = clampedValue; + + // 使用Gradient的Evaluate方法根据进度值获取对应的渐变颜色 + // Unity编辑器会自动为Gradient字段初始化一个默认实例,但在某些特殊运行时情况下, + // 还是可以加一个null检查以增加健壮性。 + if (progressGradient != null) + { + image.color = progressGradient.Evaluate(clampedValue); + } + else + { + // 如果梯度未定义(极少发生),则使用默认颜色并发出警告 + Debug.LogWarning("BarUI: Progress Gradient is not set! Using default white color.", this); + image.color = Color.white; + } + } + } + + // OnValidate是Unity编辑器特有的方法,当脚本实例在编辑器中被加载或Inspector中的数据被修改时调用 + private void OnValidate() + { + // 只有当存在Image引用时才进行更新,避免在编辑器中因未赋值而引发NullReferenceException + if (image != null) + { + // 在编辑器中修改_editorProgressPreview时,同步更新实际的Progress + // 这会触发Progress属性的setter,进而更新fillAmount和color + Progress = _editorProgressPreview; + } + else + { + // 在编辑器中未分配Image时给出提示,防止用户迷惑 + Debug.LogWarning("BarUI: Image reference is not assigned. Editor preview disabled.", this); + } } } } \ No newline at end of file diff --git a/Client/Assets/Scripts/UI/BuffIconListUI.cs b/Client/Assets/Scripts/UI/BuffIconListUI.cs new file mode 100644 index 0000000..1e84ac5 --- /dev/null +++ b/Client/Assets/Scripts/UI/BuffIconListUI.cs @@ -0,0 +1,20 @@ +using System; +using Prefab; +using UnityEngine; + +namespace UI +{ + public class BuffIconListUI: MonoBehaviour + { + public BuffIconUI prefab; + public Transform container; + + private void Start() + { + foreach (Transform child in container) + { + Destroy(child.gameObject); + } + } + } +} \ No newline at end of file diff --git a/Client/Assets/Scripts/UI/BuffIconListUI.cs.meta b/Client/Assets/Scripts/UI/BuffIconListUI.cs.meta new file mode 100644 index 0000000..e6f2028 --- /dev/null +++ b/Client/Assets/Scripts/UI/BuffIconListUI.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8f6f033d6fe84e769e101fb355ef3ffa +timeCreated: 1756780958 \ No newline at end of file diff --git a/Client/Assets/Scripts/UI/Button3D.cs b/Client/Assets/Scripts/UI/Button3D.cs new file mode 100644 index 0000000..343aa2e --- /dev/null +++ b/Client/Assets/Scripts/UI/Button3D.cs @@ -0,0 +1,142 @@ + +using System.Linq; // 用于可能的LINQ操作,但在此版本中可能不直接使用 +using TMPro; // 用于 TextMeshPro 组件 +using UnityEngine; +using UnityEngine.Events; +using UnityEngine.Serialization; // 用于 UnityEvent + +namespace UI +{ + public class Button3D : MonoBehaviour + { + [Tooltip("当按钮被点击时触发的UnityEvent。可以在Inspector中配置.")] + public UnityEvent OnClick; + + [FormerlySerializedAs("renderer")] public MeshRenderer meshRenderer; // 请确保在Inspector中拖拽赋值 + public Material outlineMaterial; // 请确保在Inspector中拖拽赋值 + + public TMP_Text text; // 文本组件 + + private Material[] _originalMaterials; // 用于存储按钮的原始材质,以便正确添加和移除描边 + + private void Awake() + { + if (meshRenderer == null) + { + Debug.LogError("Button3D: MeshRenderer is not assigned. Please assign it in the Inspector.", this); + return; + } + + if (outlineMaterial == null) + { + Debug.LogWarning( + "Button3D: Outline Material is not assigned. Outline effect will not work. Please assign it in the Inspector.", + this); + } + + if (text == null) + { + Debug.LogWarning("Button3D: TMP_Text is not assigned. Text features will not work. Please assign it in the Inspector.", this); + // 这里不return,允许按钮无文本运行 + } + + + // 存储原始材质数组,以便在添加和移除描边时正确操作 + // .ToArray() 是为了确保我们拿到的是拷贝,而不是引用,防止外部意外修改 + _originalMaterials = meshRenderer.materials.ToArray(); + + // 确保初始化时没有边框材质 + // Important: 调用RemoveOutlineMaterialInternal()可能会清除_originalMaterials,所以要确保先保存 + RemoveOutlineMaterialInternal(); // 这一步会根据_originalMaterials重新设置renderer.materials + + // 初始时隐藏文本 + if (text != null) + { + text.gameObject.SetActive(false); + } + } + + private void Update() + { + // 文本始终朝向摄像机 + if (text != null && text.IsActive() && Camera.main != null) + { + text.transform.LookAt(text.transform.position + Camera.main.transform.rotation * Vector3.forward, + Camera.main.transform.rotation * Vector3.up); + } + } + + private void OnMouseEnter() + { + if (meshRenderer == null) return; + + // 鼠标进入时显示文本 + if (text != null) + { + text.gameObject.SetActive(true); + } + + // 如果没有描边材质,或者渲染器已经有描边材质,就没必要再添加了 + // 检查当前材质数组长度是否已经大于等于_originalMaterials的长度+1 + // 这样可以避免重复添加 + if (outlineMaterial == null || meshRenderer.materials.Length > _originalMaterials.Length) + { + return; + } + + // 如果当前材质数组和_originalMaterials不一致,说明可能被其他逻辑修改了, + // 稳妥起见,最好先恢复到_originalMaterials + if (!meshRenderer.materials.SequenceEqual(_originalMaterials)) + { + //Debug.LogWarning("Button3D: Renderer materials were unexpectedly modified before OnMouseEnter. Restoring original materials."); + // 通常不应该发生,除非有其他脚本在修改 + meshRenderer.materials = _originalMaterials; + } + + // 创建一个新数组,包含原始材质和描边材质 + var newMaterials = new Material[_originalMaterials.Length + 1]; + System.Array.Copy(_originalMaterials, newMaterials, _originalMaterials.Length); + newMaterials[_originalMaterials.Length] = outlineMaterial; + meshRenderer.materials = newMaterials; + } + + private void OnMouseExit() + { + if (meshRenderer == null) return; + + // 鼠标离开时隐藏文本 + if (text != null) + { + text.gameObject.SetActive(false); + } + + // 调用内部方法移除边框材质 + RemoveOutlineMaterialInternal(); + } + + private void OnMouseDown() + { + // 触发UnityEvent + OnClick.Invoke(); + } + + /// + /// 移除渲染器上的边框材质(如果存在),恢复到按钮的原始材质。 + /// + private void RemoveOutlineMaterialInternal() + { + if (meshRenderer == null) return; + // 即使_originalMaterials == null(因为Awake中的LogError),也可以安全赋值空数组 + // 但如果_originalMaterials确实是null,说明Awake有问题,后续操作也可能继续出错 + if (_originalMaterials == null) + { + Debug.LogError("Button3D: _originalMaterials is null. Cannot remove outline. Check Awake method.", this); + return; + } + + // 直接将渲染器材质恢复为_originalMaterials的副本 + meshRenderer.materials = _originalMaterials.ToArray(); // 使用ToArray()确保赋值一个副本,避免_originalMaterials被意外修改 + } + } +} + diff --git a/Client/Assets/Scripts/UI/Button3D.cs.meta b/Client/Assets/Scripts/UI/Button3D.cs.meta new file mode 100644 index 0000000..dfa0c02 --- /dev/null +++ b/Client/Assets/Scripts/UI/Button3D.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 0d5e1709fa6d5c54f93ac068f067e20b \ No newline at end of file diff --git a/Client/Assets/Scripts/UI/CoinCountUI.cs b/Client/Assets/Scripts/UI/CoinCountUI.cs new file mode 100644 index 0000000..c747d5e --- /dev/null +++ b/Client/Assets/Scripts/UI/CoinCountUI.cs @@ -0,0 +1,16 @@ +using System; +using TMPro; +using UnityEngine; + +namespace UI +{ + public class CoinCountUI:MonoBehaviour + { + public TMP_Text text; + + private void Start() + { + + } + } +} \ No newline at end of file diff --git a/Client/Assets/Scripts/UI/CoinCountUI.cs.meta b/Client/Assets/Scripts/UI/CoinCountUI.cs.meta new file mode 100644 index 0000000..bcdb434 --- /dev/null +++ b/Client/Assets/Scripts/UI/CoinCountUI.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 85cfb4a924a04c6e9f6f7801207dbee3 +timeCreated: 1756776391 \ No newline at end of file diff --git a/Client/Assets/Scripts/UI/DevMenuUI.cs b/Client/Assets/Scripts/UI/DevMenuUI.cs index 7c26411..1a0084e 100644 --- a/Client/Assets/Scripts/UI/DevMenuUI.cs +++ b/Client/Assets/Scripts/UI/DevMenuUI.cs @@ -5,7 +5,7 @@ using UnityEngine.SceneManagement; namespace UI { - public class DevMenuUI : UIBase + public class DevMenuUI : FullScreenUI { public GameObject menuContent; @@ -77,9 +77,8 @@ namespace UI InitDefineButtons( "事件菜单", "未定义任何事件", - // 假设 EventDef 也有 label 字段作为按钮文本 - def => def.label, - eventDef => + def => def.label, + eventDef => { // TODO: 在这里实现事件触发逻辑 Debug.Log($"触发事件: {eventDef.label}"); diff --git a/Client/Assets/Scripts/UI/EquipmentUI.cs b/Client/Assets/Scripts/UI/EquipmentUI.cs index 2e3fe9e..87f2fef 100644 --- a/Client/Assets/Scripts/UI/EquipmentUI.cs +++ b/Client/Assets/Scripts/UI/EquipmentUI.cs @@ -1,275 +1,15 @@ -using Base; -using Entity; -using System.Collections.Generic; using UnityEngine; -// 确保 Character 类在此命名空间下 + namespace UI { - /// - /// 负责管理和显示角色的装备用户界面。 - /// 该组件会监听当前关注实体的变化,并根据所关注角色的库存数据动态更新装备槽位的显示, - /// 同时采用对象池技术高效管理 ItemUI 实例的创建和复用。 - /// 除了显示,现在还支持通过滚轮选择物品,并同步更新焦点角色的 CurrentSelected 字段。 - /// - public class EquipmentUI : MonoBehaviour, ITick + + public class EquipmentUI : MonoBehaviour { - [SerializeField] - [Tooltip("所有 ItemUI 实例的父级 GameObject,用于布局。")] - private GameObject uiParent; - - [SerializeField] - [Tooltip("用于实例化装备槽位的 ItemUI 预制件。")] - private ItemUI itemUIPrefab; - - /// - /// 当前界面所关联和关注的角色实体。 - /// - private Character focusedEntity; - - /// - /// ItemUI 实例的对象池,用于高效管理和复用 ItemUI。 - /// - private List itemUIPool = new(); - - /// - /// MonoBehaviour 的 Start 生命周期方法。 - /// 在此方法中,注册当游戏主要程序中关注的实体发生变化时,调用 方法进行更新。 - /// - private void Start() - { - Program.Instance.OnFocusedEntityChanged += UpdateFocusedEntity; - uiParent.SetActive(false); - } - - /// - /// MonoBehaviour 的 OnDestroy 生命周期方法。 - /// 在此方法中,取消注册所有已订阅的事件监听器,并清理对象池中创建的所有 ItemUI 实例, - /// 以防止内存泄漏和不必要的引用。 - /// - private void OnDestroy() - { - Program.Instance.OnFocusedEntityChanged -= UpdateFocusedEntity; - - // 如果当前有关注的角色,取消注册其库存改变事件。 - // 确保 focusedEntity 不为 null 且 Inventory 不为 null。 - if (focusedEntity != null && focusedEntity.Inventory != null) - { - focusedEntity.Inventory.OnInventoryChanged -= UpdateUI; - } - - // 销毁对象池中所有 ItemUI 的 GameObject。 - foreach (var itemUI in itemUIPool) - { - if (itemUI != null && itemUI.gameObject != null) - { - Destroy(itemUI.gameObject); - } - } - itemUIPool.Clear(); - } - - /// - /// 当游戏程序中关注的实体发生变化时调用此方法。 - /// 该方法会更新当前 EquipmentUI 所关联的角色,并相应地注册或取消注册库存改变事件。 - /// - /// 新的关注实体,可能为 null 或非 Character 类型。 - private void UpdateFocusedEntity(Entity.Entity entity) - { - // 如果之前有关注的角色,先取消注册其库存改变事件。 - // 确保 focusedEntity 不为 null 且 Inventory 不为 null。 - if (focusedEntity != null && focusedEntity.Inventory != null) - { - focusedEntity.Inventory.OnInventoryChanged -= UpdateUI; - } - - // 尝试将新的实体转换为角色类型。 - Character newCharacter = entity as Character; - if (newCharacter != null) - { - focusedEntity = newCharacter; - } - else - { - // 如果传入的 entity 不是 Character 类型,或者为 null,则清除当前的 focusedEntity。 - focusedEntity = null; - } - - // 如果现在有关注的角色,注册其库存改变事件。 - if (focusedEntity != null) - { - focusedEntity.Inventory.OnInventoryChanged += UpdateUI; - } - - // 立即更新UI以反映新的关注实体(或没有关注实体)的状态。 - UpdateUI(); - - // 在更新UI后,确保UI的选中状态与角色当前选中字段同步 - // 只有当有焦点角色且库存不为空时才更新选中状态 - if (focusedEntity != null && focusedEntity.Inventory != null && focusedEntity.Inventory.Capacity > 0) - { - // 确保 CurrentSelected 在有效范围内,否则重置为0 - if (focusedEntity.CurrentSelected < 0 || focusedEntity.CurrentSelected >= focusedEntity.Inventory.Capacity) - { - focusedEntity.CurrentSelected = 0; - } - UpdateSelectionUI(focusedEntity.CurrentSelected); - } - else - { - // 如果没有焦点实体或库存为空,则清空所有选中状态 - UpdateSelectionUI(-1); // 传入一个无效索引以取消所有选中 - } - } - - /// - /// 根据当前关注角色的库存数据更新装备UI的显示。 - /// 该方法通过对象池机制高效地管理 ItemUI 实例的创建、复用和禁用。 - /// - private void UpdateUI() - { - // 如果没有关注的角色或其库存,则禁用所有 ItemUI。 - if (focusedEntity == null || focusedEntity.Inventory == null) - { - foreach (var itemUI in itemUIPool) - { - if (itemUI != null && itemUI.gameObject != null) - { - itemUI.gameObject.SetActive(false); - } - } - uiParent.SetActive(false); - return; - } - - // 检查用于创建物品UI的预制件是否已在 Inspector 中赋值。 - if (itemUIPrefab == null) - { - Debug.LogError("ItemUIPrefab 未在 EquipmentUI 中指定。无法创建物品用户界面。", this); - foreach (var itemUI in itemUIPool) itemUI.gameObject.SetActive(false); - uiParent.SetActive(false); // 确保父级也被禁用 - return; - } - - int requiredUIs = focusedEntity.Inventory.Capacity; - int currentUIPoolSize = itemUIPool.Count; // 当前对象池中 ItemUI 实例的总数。 - - // 遍历所有必要的物品槽位,复用对象池中的 ItemUI,或在不足时创建新的 ItemUI。 - for (int i = 0; i < requiredUIs; i++) - { - ItemUI itemUI; - if (i < currentUIPoolSize) - { - itemUI = itemUIPool[i]; - } - else - { - // 使用 Instantiate(GameObject, Transform) 以确保父级设置正确且避免转换问题。 - var itemObj = Instantiate(itemUIPrefab.gameObject, uiParent.transform); - itemUI = itemObj.GetComponent(); - itemUIPool.Add(itemUI); - currentUIPoolSize++; // 更新池的大小计数。 - } - - // 确保 ItemUI GameObject 处于激活状态,并使用当前物品槽位的数据进行初始化。 - itemUI.gameObject.SetActive(true); - itemUI.Init(focusedEntity.Inventory.GetSlot(i), i); - // 移除此处 itemUI.Select = false; 选中状态将由 UpdateSelectionUI 统一管理 - } - - // 如果库存槽位数量减少,禁用对象池中多余的 ItemUI 实例。 - for (int i = requiredUIs; i < currentUIPoolSize; i++) - { - if (itemUIPool[i] != null && itemUIPool[i].gameObject != null) - { - itemUIPool[i].gameObject.SetActive(false); - itemUIPool[i].Select = false; // 禁用时也确保清除选中状态 - } - } - uiParent.SetActive(true); - - // 首次更新UI时,或者当Inventory改变时,需要确保 CurrentSelected 的UI状态是正确的 - // 但如果 UpdateFocusedEntity 已经处理了,这里可以省略,或者确保只在必要时调用 - // 考虑到 UpdateUI 也会被 Inventory.OnInventoryChanged 调用,这里再次确保同步是合理的。 - if (focusedEntity != null && focusedEntity.Inventory != null && focusedEntity.Inventory.Capacity > 0) - { - UpdateSelectionUI(focusedEntity.CurrentSelected); - } - else - { - UpdateSelectionUI(-1); - } - } - - /// - /// 当当前选中物品改变时,更新所有 ItemUI 的选中状态。 - /// - /// 当前选中的物品索引。传入 -1 将取消所有 ItemUI 的选中状态。 - private void UpdateSelectionUI(int selectedItemIndex) - { - // 如果对象池为空,则无需更新 - if (itemUIPool == null || itemUIPool.Count == 0) - { - return; - } - - for (int i = 0; i < itemUIPool.Count; i++) - { - ItemUI itemUI = itemUIPool[i]; - if (itemUI != null && itemUI.gameObject != null) - { - // 只有在 ItemUI 激活状态下才设置其选中状态,避免对禁用UI的操作 - // 或者如果传入-1,即使激活也全部设置为false - if (itemUI.gameObject.activeSelf || selectedItemIndex == -1) // 确保当取消所有选中时,循环到所有激活的,甚至当前禁用的ItemUI - { - itemUI.Select = (i == selectedItemIndex && itemUI.gameObject.activeSelf); - } - } - } - } - - /// - /// 每帧调用的更新方法,用于处理滚轮输入以选择物品。 - /// - public void Tick() - { - // 如果没有焦点实体、没有库存或库存为空,不进行选择操作 - if (focusedEntity == null || focusedEntity.Inventory == null || focusedEntity.Inventory.Capacity == 0) - { - return; - } - - float scrollInput = Input.GetAxis("Mouse ScrollWheel"); - - if (scrollInput != 0) // 检测到滚轮输入 - { - int currentSelection = focusedEntity.CurrentSelected; - int inventoryCapacity = focusedEntity.Inventory.Capacity; - - if (scrollInput > 0) // 滚轮向上,选择前一个 - { - currentSelection--; - if (currentSelection < 0) - { - currentSelection = inventoryCapacity - 1; // 循环到最后一个 - } - } - else // 滚轮向下,选择后一个 - { - currentSelection++; - if (currentSelection >= inventoryCapacity) - { - currentSelection = 0; // 循环到第一个 - } - } - - // 如果选择发生变化,则更新焦点实体和UI - if (focusedEntity.CurrentSelected != currentSelection) - { - focusedEntity.CurrentSelected = currentSelection; - UpdateSelectionUI(currentSelection); // 更新UI选中状态 - } - } - } + public ItemUI currentUse; + public ItemUI two; + public ItemUI three; + + } } diff --git a/Client/Assets/Scripts/UI/FullScreenUI.cs b/Client/Assets/Scripts/UI/FullScreenUI.cs new file mode 100644 index 0000000..d4d8821 --- /dev/null +++ b/Client/Assets/Scripts/UI/FullScreenUI.cs @@ -0,0 +1,21 @@ +using Base; +using UnityEngine; + +namespace UI +{ + public class FullScreenUI:UIBase,ITickUI + { + public FullScreenUI() + { + isInputOccupied = true; + exclusive=true; + } + public virtual void TickUI() + { + if(!IsVisible) + return; + if (Input.GetKeyDown(KeyCode.Escape) || Input.GetKeyDown(actionButton)) + UIInputControl.Instance.Hide(this); + } + } +} \ No newline at end of file diff --git a/Client/Assets/Scripts/UI/FullScreenUI.cs.meta b/Client/Assets/Scripts/UI/FullScreenUI.cs.meta new file mode 100644 index 0000000..0643fbc --- /dev/null +++ b/Client/Assets/Scripts/UI/FullScreenUI.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 92b2dc3c0fc0475596413b883c51e9b2 \ No newline at end of file diff --git a/Client/Assets/Scripts/UI/ItemUI.cs b/Client/Assets/Scripts/UI/ItemUI.cs index 4b9c442..30547b6 100644 --- a/Client/Assets/Scripts/UI/ItemUI.cs +++ b/Client/Assets/Scripts/UI/ItemUI.cs @@ -1,91 +1,34 @@ -using Base; + using System; -using TMPro; +using System.Linq; using UnityEngine; -using UnityEngine.EventSystems; using UnityEngine.UI; + namespace UI { - public class ItemUI : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IPointerClickHandler, ITick + public class ItemUI:MonoBehaviour { - [SerializeField] private Image textureUI; - [SerializeField] private TMP_Text countUI; - [SerializeField] private TMP_Text nameUI; - [SerializeField] private GameObject selectedOutline; + public Entity.InventorySlot inventorySlot; + public UIImageAnimator icon; - private Entity.InventorySlot _item; - private float timer = 0; - private float switchTime = 0; - private int texturePtr = 0; - - public event Action OnPlayerSelect; - - public bool Select + private void Start() { - get => selectedOutline.activeSelf; - set => selectedOutline.SetActive(value); + icon.gameObject.SetActive(false); } - public int SlotIndex { get; private set; } = -1; - - public void Init(Entity.InventorySlot item, int index) + public void SetDisplayItem(Entity.InventorySlot slot) { - if (item == null) + inventorySlot = slot; + if (inventorySlot == null) { - switchTime = -1; - textureUI.gameObject.SetActive(false); - countUI.text = ""; - nameUI.text = ""; - return; - } - - textureUI.gameObject.SetActive(true); - _item = item; - textureUI.sprite = item.Item.Icon[0]; - countUI.text = item.Quantity.ToString(); - nameUI.text = item.Item.Name; - nameUI.gameObject.SetActive(false); - Select = false; - SlotIndex = index; - if (item.Item.FPS > 0) - { - switchTime = 1f / item.Item.FPS; + icon.gameObject.SetActive(false); } else { - switchTime = 0; + icon.gameObject.SetActive(true); + icon.SetSprites(inventorySlot.Item.Icon.ToArray()); } } - - public void OnPointerEnter(PointerEventData eventData) - { - nameUI.gameObject.SetActive(true); - } - - public void OnPointerExit(PointerEventData eventData) - { - nameUI.gameObject.SetActive(false); - } - public void OnPointerClick(PointerEventData eventData) - { - OnPlayerSelect?.Invoke(); - } - public void Tick() - { - if (switchTime > 0) - { - timer += Time.deltaTime; - if (timer >= switchTime) - { - timer -= switchTime; - texturePtr++; - texturePtr %= _item.Item.Icon.Count; - textureUI.sprite = _item.Item.Icon[texturePtr]; - } - } - } - - } } \ No newline at end of file diff --git a/Client/Assets/Scripts/UI/LogUI.cs b/Client/Assets/Scripts/UI/LogUI.cs index 677dfb2..159e17d 100644 --- a/Client/Assets/Scripts/UI/LogUI.cs +++ b/Client/Assets/Scripts/UI/LogUI.cs @@ -1,12 +1,12 @@ -using Prefab; -using System; using System.Collections.Generic; -using TMPro; +using Prefab; // 假设 TextPrefab 在 Prefab 命名空间下 +using TMPro; // 假设 TextPrefab 内部使用了 TextMeshPro + using UnityEngine; namespace UI { - public class LogUI : UIBase + public class LogUI : FullScreenUI { public Transform contentPanel; // 日志内容容器 public TextPrefab textPrefab; // 文本预制体引用 @@ -21,66 +21,80 @@ namespace UI { LogType.Assert, new Color(0.8f, 0.4f, 1f) } }; - private List _logItems = new List(); // 已创建的日志条目 + // 逻辑修改:将_logItems改为存储TextPrefab实例,避免频繁GetComponent + private List _logItems = new List(); // 已创建的日志条目 private int _lastLogCount = 0; // 上次显示的日志数量 + - private void Start() + // 逻辑修改:在Update中周期性检查日志数量变化并刷新UI + private void Update() { - Logging.LogCapturer.Clear(); + // 获取当前LogCapturer中的日志数量(最旧在前) + var currentCapturerLogCount = Logging.LogCapturer.GetLogs(reverseOrder: false).Count; + if (_lastLogCount != currentCapturerLogCount) + { + RefreshLogDisplay(); + } } public override void Show() { base.Show(); - RefreshLogDisplay(); + RefreshLogDisplay(); // 首次显示时刷新 } private void RefreshLogDisplay() { - var logs = Logging.LogCapturer.GetLogs(); + // 逻辑修改:获取"最旧在前,最新在后"的日志列表,与UI显示顺序匹配 + var currentLogsInCapturer = Logging.LogCapturer.GetLogs(reverseOrder: false); + var newLogCount = currentLogsInCapturer.Count; + var existingUiItemCount = _logItems.Count; - // 如果日志数量减少,清理多余的条目 - if (logs.Count < _lastLogCount) + // 逻辑修改:处理日志数量减少的情况(日志被从LogCapturer的队列前端移除,即最旧的日志) + if (newLogCount < existingUiItemCount) { - for (var i = logs.Count; i < _lastLogCount; i++) + // 计算需要移除的UI条目数量 + var itemsToRemove = existingUiItemCount - newLogCount; + // 从_logItems的开头移除(销毁最旧的UI元素) + for (var i = 0; i < itemsToRemove; i++) { + // 确保销毁对应的GameObject,避免内存泄露 Destroy(_logItems[i].gameObject); } - - _logItems.RemoveRange(logs.Count, _logItems.Count - logs.Count); + _logItems.RemoveRange(0, itemsToRemove); // 从列表中移除引用 } - - // 更新现有条目 - for (var i = 0; i < Math.Min(logs.Count, _logItems.Count); i++) + // 逻辑修改:处理日志数量增加的情况(LogCapturer中新增日志) + else if (newLogCount > existingUiItemCount) { - UpdateLogEntry(_logItems[i], logs[logs.Count - 1 - i]); - } - - // 添加新的条目 - if (logs.Count > _lastLogCount) - { - for (var i = _lastLogCount; i < logs.Count; i++) + // 从现有UI条目数量开始,创建新的UI条目,并添加到_logItems末尾 + for (var i = existingUiItemCount; i < newLogCount; i++) { - CreateLogEntry(logs[logs.Count - 1 - i]); + CreateLogEntry(currentLogsInCapturer[i]); // 创建并添加新的UI元素,会自动追加到_logItems } } - _lastLogCount = logs.Count; + // 逻辑修改:更新所有现有/剩余的UI条目内容,确保与LogCapturer中的数据一致 + // 这一步确保了UI元素能准确反映其对应的日志数据,处理了任何可能的日志内容更新或初始设置。 + for (var i = 0; i < newLogCount; i++) + { + UpdateLogEntry(_logItems[i], currentLogsInCapturer[i]); + } + + _lastLogCount = newLogCount; // 更新上次显示的日志数量 } private void CreateLogEntry(Logging.LogCapturer.LogEntry entry) { - // 实例化文本预制体 + // 实例化文本预制体,并将其添加到内容面板 var logItem = Instantiate(textPrefab, contentPanel); - _logItems.Add(logItem.transform); + _logItems.Add(logItem); // 逻辑修改:直接添加TextPrefab实例 - UpdateLogEntry(logItem.transform, entry); + UpdateLogEntry(logItem, entry); // 逻辑修改:直接传入TextPrefab实例进行更新 } - private void UpdateLogEntry(Transform logItemTransform, Logging.LogCapturer.LogEntry entry) + // 逻辑修改:UpdateLogEntry现在直接接收TextPrefab实例,更高效 + private void UpdateLogEntry(TextPrefab logItem, Logging.LogCapturer.LogEntry entry) { - var logItem = logItemTransform.GetComponent(); - // 设置文本内容 logItem.Label = entry.ToString(); @@ -96,5 +110,22 @@ namespace UI logItem.text.alignment = TextAlignmentOptions.TopLeft; } + + // 逻辑修改:添加OnDestroy方法来清理动态创建的UI元素 + private void OnDestroy() + { + if (_logItems != null) + { + foreach (var item in _logItems) + { + // 检查item及其gameObject是否仍有效,以防在其他地方已经被销毁或为空 + if (item != null && item.gameObject != null) + { + Destroy(item.gameObject); + } + } + _logItems.Clear(); // 清空列表引用 + } + } } -} \ No newline at end of file +} diff --git a/Client/Assets/Scripts/UI/PlayerStateUI.cs b/Client/Assets/Scripts/UI/PlayerStateUI.cs index 50326e4..575f7a6 100644 --- a/Client/Assets/Scripts/UI/PlayerStateUI.cs +++ b/Client/Assets/Scripts/UI/PlayerStateUI.cs @@ -1,3 +1,7 @@ +using System; +using Base; +using Map; +using TMPro; using UnityEngine; namespace UI @@ -6,7 +10,13 @@ namespace UI { [SerializeField] private BarUI focusedEntityHP; [SerializeField] private BarUI lastEntityHP; - + [SerializeField] private BarUI BaseBuildingHP; + [SerializeField] private MiniMap miniMap; + [SerializeField] private EquipmentUI equipmentUI; + [SerializeField] private CoinCountUI coinCountUI; + [SerializeField] private BuffIconListUI focuseEntityBuffIconList; + [SerializeField] private BuffIconListUI lastEntityBuffIconList; + [SerializeField] private AttackModeUI attackMode; public void Tick() { @@ -18,5 +28,52 @@ namespace UI } } + public void Show() + { + focusedEntityHP.gameObject.SetActive(true); + lastEntityHP.gameObject.SetActive(true); + BaseBuildingHP.gameObject.SetActive(true); + miniMap.gameObject.SetActive(true); + equipmentUI.gameObject.SetActive(true); + coinCountUI.gameObject.SetActive(true); + focuseEntityBuffIconList.gameObject.SetActive(true); + lastEntityBuffIconList.gameObject.SetActive(true); + attackMode.gameObject.SetActive(true); + } + + public void Hide() + { + focusedEntityHP.gameObject.SetActive(false); + lastEntityHP.gameObject.SetActive(false); + BaseBuildingHP.gameObject.SetActive(false); + miniMap.gameObject.SetActive(false); + equipmentUI.gameObject.SetActive(false); + coinCountUI.gameObject.SetActive(false); + focuseEntityBuffIconList.gameObject.SetActive(false); + lastEntityBuffIconList.gameObject.SetActive(false); + attackMode.gameObject.SetActive(false); + } + + private void Start() + { + UIInputControl.Instance.OnWindowVisibilityChanged += UIChange; + } + + private void OnDestroy() + { + UIInputControl.Instance.OnWindowVisibilityChanged -= UIChange; + } + + private void UIChange(UIBase ui, bool open) + { + if (ui.exclusive && open) + { + Hide(); + } + else + { + Show(); + } + } } } \ No newline at end of file diff --git a/Client/Assets/Scripts/UI/SettingUI.cs b/Client/Assets/Scripts/UI/SettingUI.cs index e009178..14b9603 100644 --- a/Client/Assets/Scripts/UI/SettingUI.cs +++ b/Client/Assets/Scripts/UI/SettingUI.cs @@ -6,7 +6,7 @@ using UnityEngine.UI; namespace UI { - public class SettingUI : UIBase + public class SettingUI : FullScreenUI { [SerializeField] private Scrollbar globalVolume; [SerializeField] private Toggle developerMode; @@ -47,6 +47,7 @@ namespace UI { windowResolution.value = 0; } + windowMode.value = (int)currentSettings.currentWindowMode; } public void CancelSettings() { diff --git a/Client/Assets/Settings/UniversalRenderPipelineGlobalSettings.asset b/Client/Assets/Settings/UniversalRenderPipelineGlobalSettings.asset index ba61f2c..33722f4 100644 --- a/Client/Assets/Settings/UniversalRenderPipelineGlobalSettings.asset +++ b/Client/Assets/Settings/UniversalRenderPipelineGlobalSettings.asset @@ -108,6 +108,8 @@ MonoBehaviour: references: version: 2 RefIds: + - rid: -2 + type: {class: , ns: , asm: } - rid: 6852985685364965376 type: {class: URPShaderStrippingSetting, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} data: @@ -121,6 +123,9 @@ MonoBehaviour: m_AutodeskInteractive: {fileID: 4800000, guid: 0e9d5a909a1f7e84882a534d0d11e49f, type: 3} m_AutodeskInteractiveTransparent: {fileID: 4800000, guid: 5c81372d981403744adbdda4433c9c11, type: 3} m_AutodeskInteractiveMasked: {fileID: 4800000, guid: 80aa867ac363ac043847b06ad71604cd, type: 3} + m_TerrainDetailLit: {fileID: 4800000, guid: f6783ab646d374f94b199774402a5144, type: 3} + m_TerrainDetailGrassBillboard: {fileID: 4800000, guid: 29868e73b638e48ca99a19ea58c48d90, type: 3} + m_TerrainDetailGrass: {fileID: 4800000, guid: e507fdfead5ca47e8b9a768b51c291a1, type: 3} m_DefaultSpeedTree7Shader: {fileID: 4800000, guid: 0f4122b9a743b744abe2fb6a0a88868b, type: 3} m_DefaultSpeedTree8Shader: {fileID: -6465566751694194690, guid: 9920c1f1781549a46ba081a2a15a16ec, type: 3} m_DefaultSpeedTree9Shader: {fileID: -6465566751694194690, guid: cbd3e1cc4ae141c42a30e33b4d666a61, type: 3} diff --git a/Client/Assets/Shader.meta b/Client/Assets/Shader.meta new file mode 100644 index 0000000..5a167ef --- /dev/null +++ b/Client/Assets/Shader.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8d4583fea28dea54cac2f29cde1b99c3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Shader/OutlineShader.shadergraph b/Client/Assets/Shader/OutlineShader.shadergraph new file mode 100644 index 0000000..117b9f3 --- /dev/null +++ b/Client/Assets/Shader/OutlineShader.shadergraph @@ -0,0 +1,910 @@ +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.GraphData", + "m_ObjectId": "4c4fc4006449490dbe343b50970f353c", + "m_Properties": [ + { + "m_Id": "966cc5eb0a8a4289b76db1c1fb9a20b4" + }, + { + "m_Id": "aee9bea820ab495ebea1fd16e6e4426d" + } + ], + "m_Keywords": [], + "m_Dropdowns": [], + "m_CategoryData": [ + { + "m_Id": "77b7ab57f4994f77bc06b85fd1862a13" + } + ], + "m_Nodes": [ + { + "m_Id": "59a780e466d342afa011b55a3d95b15b" + }, + { + "m_Id": "92c6bf1708bc4eefa9f708ccedf82e7b" + }, + { + "m_Id": "3da1fcb014254517857c0f1757f89dee" + }, + { + "m_Id": "275d38d75fd947068131f18e2ea8f88b" + }, + { + "m_Id": "9d575cc9818041d0b0b195bdab8bb293" + }, + { + "m_Id": "cd0010223c1344559b11ffc2f918a831" + }, + { + "m_Id": "1f4e07b0db3c459b906693c887f3e252" + }, + { + "m_Id": "d22f0b20543941d4b21cdb5780053b49" + }, + { + "m_Id": "23cf3544aed047c38359d49bc9bfd39c" + } + ], + "m_GroupDatas": [], + "m_StickyNoteDatas": [], + "m_Edges": [ + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "1f4e07b0db3c459b906693c887f3e252" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "59a780e466d342afa011b55a3d95b15b" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "23cf3544aed047c38359d49bc9bfd39c" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "275d38d75fd947068131f18e2ea8f88b" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "cd0010223c1344559b11ffc2f918a831" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "1f4e07b0db3c459b906693c887f3e252" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "d22f0b20543941d4b21cdb5780053b49" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "1f4e07b0db3c459b906693c887f3e252" + }, + "m_SlotId": 0 + } + } + ], + "m_VertexContext": { + "m_Position": { + "x": -95.0000228881836, + "y": 76.00000762939453 + }, + "m_Blocks": [ + { + "m_Id": "59a780e466d342afa011b55a3d95b15b" + }, + { + "m_Id": "92c6bf1708bc4eefa9f708ccedf82e7b" + }, + { + "m_Id": "3da1fcb014254517857c0f1757f89dee" + } + ] + }, + "m_FragmentContext": { + "m_Position": { + "x": -95.0000228881836, + "y": 286.0000305175781 + }, + "m_Blocks": [ + { + "m_Id": "275d38d75fd947068131f18e2ea8f88b" + }, + { + "m_Id": "9d575cc9818041d0b0b195bdab8bb293" + } + ] + }, + "m_PreviewData": { + "serializedMesh": { + "m_SerializedMesh": "{\"mesh\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "preventRotation": false + }, + "m_Path": "Shader Graphs", + "m_GraphPrecision": 1, + "m_PreviewMode": 2, + "m_OutputNode": { + "m_Id": "" + }, + "m_SubDatas": [], + "m_ActiveTargets": [ + { + "m_Id": "4cc1a064f7874a9b8aa521d595d5092d" + } + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "17ef39b9aa3f4f9b9b545bd0a4d867f5", + "m_Id": 0, + "m_DisplayName": "Color", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "1f4e07b0db3c459b906693c887f3e252", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -329.0, + "y": 76.0, + "width": 208.0, + "height": 302.0 + } + }, + "m_Slots": [ + { + "m_Id": "a89ab5333ae449e59da03aa1ab9d9022" + }, + { + "m_Id": "32a29b201337425ea089343d5247233d" + }, + { + "m_Id": "6785395363af428fbc58da381fe55359" + } + ], + "synonyms": [ + "multiplication", + "times", + "x" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "23cf3544aed047c38359d49bc9bfd39c", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -251.00001525878907, + "y": 325.0, + "width": 105.0, + "height": 34.000030517578128 + } + }, + "m_Slots": [ + { + "m_Id": "17ef39b9aa3f4f9b9b545bd0a4d867f5" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "aee9bea820ab495ebea1fd16e6e4426d" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "275d38d75fd947068131f18e2ea8f88b", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.BaseColor", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "64edbafd8dfd47a2ad97435827012ad2" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.BaseColor" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "32a29b201337425ea089343d5247233d", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "3da1fcb014254517857c0f1757f89dee", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Tangent", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "b4c90de2ecc947c0ba37d42e034cb369" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Tangent" +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.Rendering.Universal.ShaderGraph.UniversalTarget", + "m_ObjectId": "4cc1a064f7874a9b8aa521d595d5092d", + "m_Datas": [], + "m_ActiveSubTarget": { + "m_Id": "7d6d58b2f6734a4fa425de949a55a7c4" + }, + "m_AllowMaterialOverride": false, + "m_SurfaceType": 1, + "m_ZTestMode": 4, + "m_ZWriteControl": 0, + "m_AlphaMode": 0, + "m_RenderFace": 1, + "m_AlphaClip": false, + "m_CastShadows": true, + "m_ReceiveShadows": true, + "m_DisableTint": false, + "m_AdditionalMotionVectorMode": 0, + "m_AlembicMotionVectors": false, + "m_SupportsLODCrossFade": false, + "m_CustomEditorGUI": "", + "m_SupportVFX": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "59a780e466d342afa011b55a3d95b15b", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Position", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "673631bf98b24d6a9c127d8c2bbe71bc" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Position" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.ColorRGBMaterialSlot", + "m_ObjectId": "64edbafd8dfd47a2ad97435827012ad2", + "m_Id": 0, + "m_DisplayName": "Base Color", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "BaseColor", + "m_StageCapability": 2, + "m_Value": { + "x": 0.5, + "y": 0.5, + "z": 0.5 + }, + "m_DefaultValue": { + "x": 0.5, + "y": 0.5, + "z": 0.5 + }, + "m_Labels": [], + "m_ColorMode": 0, + "m_DefaultColor": { + "r": 0.5, + "g": 0.5, + "b": 0.5, + "a": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PositionMaterialSlot", + "m_ObjectId": "673631bf98b24d6a9c127d8c2bbe71bc", + "m_Id": 0, + "m_DisplayName": "Position", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Position", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "6785395363af428fbc58da381fe55359", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CategoryData", + "m_ObjectId": "77b7ab57f4994f77bc06b85fd1862a13", + "m_Name": "", + "m_ChildObjectList": [ + { + "m_Id": "966cc5eb0a8a4289b76db1c1fb9a20b4" + }, + { + "m_Id": "aee9bea820ab495ebea1fd16e6e4426d" + } + ] +} + +{ + "m_SGVersion": 2, + "m_Type": "UnityEditor.Rendering.Universal.ShaderGraph.UniversalUnlitSubTarget", + "m_ObjectId": "7d6d58b2f6734a4fa425de949a55a7c4" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.NormalMaterialSlot", + "m_ObjectId": "8169db28379542af9cdd62d5a1b89de0", + "m_Id": 0, + "m_DisplayName": "Normal", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Normal", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "92c6bf1708bc4eefa9f708ccedf82e7b", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Normal", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "8169db28379542af9cdd62d5a1b89de0" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Normal" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "936f470cf96b4c65a1750ba068d23d51", + "m_Id": 0, + "m_DisplayName": "Alpha", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Alpha", + "m_StageCapability": 2, + "m_Value": 1.0, + "m_DefaultValue": 1.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "966cc5eb0a8a4289b76db1c1fb9a20b4", + "m_Guid": { + "m_GuidSerialized": "05553a18-36ca-4f4b-8dcb-3d0622846b4c" + }, + "m_Name": "Scale", + "m_DefaultRefNameVersion": 1, + "m_RefNameGeneratedByDisplayName": "Scale", + "m_DefaultReferenceName": "_Scale", + "m_OverrideReferenceName": "", + "m_GeneratePropertyBlock": true, + "m_UseCustomSlotLabel": false, + "m_CustomSlotLabel": "", + "m_DismissedVersion": 0, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.0, + "m_FloatType": 0, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "9d575cc9818041d0b0b195bdab8bb293", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Alpha", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "936f470cf96b4c65a1750ba068d23d51" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Alpha" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "a89ab5333ae449e59da03aa1ab9d9022", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", + "m_ObjectId": "aee9bea820ab495ebea1fd16e6e4426d", + "m_Guid": { + "m_GuidSerialized": "79218567-43f6-4d23-b803-a064a7a527b0" + }, + "m_Name": "Color", + "m_DefaultRefNameVersion": 1, + "m_RefNameGeneratedByDisplayName": "Color", + "m_DefaultReferenceName": "_Color", + "m_OverrideReferenceName": "", + "m_GeneratePropertyBlock": true, + "m_UseCustomSlotLabel": false, + "m_CustomSlotLabel": "", + "m_DismissedVersion": 0, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "isMainColor": false, + "m_ColorMode": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.TangentMaterialSlot", + "m_ObjectId": "b4c90de2ecc947c0ba37d42e034cb369", + "m_Id": 0, + "m_DisplayName": "Tangent", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Tangent", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.PositionNode", + "m_ObjectId": "cd0010223c1344559b11ffc2f918a831", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Position", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -596.0, + "y": 123.00000762939453, + "width": 208.00003051757813, + "height": 314.00006103515627 + } + }, + "m_Slots": [ + { + "m_Id": "d1f1ce54627b45e1856f7d362b461a97" + } + ], + "synonyms": [ + "location" + ], + "m_Precision": 1, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 2, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Space": 0, + "m_PositionSource": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "d1f1ce54627b45e1856f7d362b461a97", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "d22f0b20543941d4b21cdb5780053b49", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -492.0, + "y": 89.0, + "width": 104.00003051757813, + "height": 34.00000762939453 + } + }, + "m_Slots": [ + { + "m_Id": "d7622898365f4568be7c6a1fd7941832" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "966cc5eb0a8a4289b76db1c1fb9a20b4" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "d7622898365f4568be7c6a1fd7941832", + "m_Id": 0, + "m_DisplayName": "Scale", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + diff --git a/Client/Assets/Shader/OutlineShader.shadergraph.meta b/Client/Assets/Shader/OutlineShader.shadergraph.meta new file mode 100644 index 0000000..e092a6b --- /dev/null +++ b/Client/Assets/Shader/OutlineShader.shadergraph.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 11268f83bf2cc2447b1f0e995112ca43 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 625f186215c104763be7675aa2d941aa, type: 3} diff --git a/Client/Assets/Shader/Shader Graphs_OutlineShader.mat b/Client/Assets/Shader/Shader Graphs_OutlineShader.mat new file mode 100644 index 0000000..4d79627 --- /dev/null +++ b/Client/Assets/Shader/Shader Graphs_OutlineShader.mat @@ -0,0 +1,60 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-2119912562947499068 +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: 10 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Shader Graphs_OutlineShader + m_Shader: {fileID: -6465566751694194690, guid: 11268f83bf2cc2447b1f0e995112ca43, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - 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: + - _QueueControl: 0 + - _QueueOffset: 0 + - _Scale: 1.05 + m_Colors: + - _Color: {r: 1.8490566, g: 1.6566842, b: 0.61925954, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Client/Assets/Shader/Shader Graphs_OutlineShader.mat.meta b/Client/Assets/Shader/Shader Graphs_OutlineShader.mat.meta new file mode 100644 index 0000000..b90fbc7 --- /dev/null +++ b/Client/Assets/Shader/Shader Graphs_OutlineShader.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7b32baf03e8f4bd448cf625f4299f5ce +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Data/Core/Define/Event/GenerateEventDef.xml b/Client/Data/Core/Define/Event/GenerateEventDef.xml new file mode 100644 index 0000000..bc52d11 --- /dev/null +++ b/Client/Data/Core/Define/Event/GenerateEventDef.xml @@ -0,0 +1,16 @@ + + + + MonsterAttack + + 生成一个怪物袭击事件 + Event_EntityGenerater + + { + "EntityDefName":"chicken", + "EntityDefTypeName":"MonsterDef", + "LocationType":"OffMap" + } + + + \ No newline at end of file diff --git a/Client/Data/Core/Define/Event/Story.xml b/Client/Data/Core/Define/Event/Story.xml new file mode 100644 index 0000000..46e7367 --- /dev/null +++ b/Client/Data/Core/Define/Event/Story.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Client/Data/Core/Define/Item/Weapon.xml b/Client/Data/Core/Define/Item/Weapon.xml index 1c020aa..0454aeb 100644 --- a/Client/Data/Core/Define/Item/Weapon.xml +++ b/Client/Data/Core/Define/Item/Weapon.xml @@ -94,4 +94,288 @@ 爪子 Claw + + + + MonsterA1Bullet + + 1 + 15 + + + + +
  • GenericBulletTexture
  • +
    +
    +
    +
    + + MonsterA2Bullet + + 1 + 18 + + + + +
  • GenericBulletTexture
  • +
    +
    +
    +
    + + MonsterD1Bullet + + 1 + 16 + + + + +
  • GenericBulletTexture
  • +
    +
    +
    +
    + + MonsterD2Bullet + + 1 + 19 + + + + +
  • GenericBulletTexture
  • +
    +
    +
    +
    + + BiologicalSnakeMonsterBullet + + 1 + 20 + + + + +
  • GenericBulletTexture
  • +
    +
    +
    +
    + + + + Weapon_MonsterA1 + + Ranged + + 612 + 0.333 + 10 + + MonsterA1Bullet + + + Weapon_MonsterA2 + + Ranged + + 408 + 0.555 + 12 + + MonsterA2Bullet + + + Weapon_MonsterB1 + + Melee + + 1148 + 0.2 + 1.5 + + + + Weapon_MonsterB2 + + Melee + + 1045 + 0.222 + 1.5 + + + + Weapon_MonsterC1 + + Melee + + 728 + 0.5 + 2 + + + + Weapon_MonsterC2 + + Melee + + 1078 + 0.333 + 2 + + + + + Weapon_MonsterD1 + + Ranged + + 646 + 0.333 + 11 + + MonsterD1Bullet + + + Weapon_MonsterD2 + + Ranged + + 412 + 0.555 + 13 + + MonsterD2Bullet + + + Weapon_MonsterE1 + + Melee + + 1622 + 0.125 + 1.5 + + + + Weapon_MonsterE2 + + Melee + + 1875 + 0.125 + 1.5 + + + + Weapon_MonsterF1 + + Melee + + 2048 + 0.238 + 2.5 + + + + Weapon_MonsterF2 + + Melee + + 2254 + 0.222 + 2.5 + + + + + Weapon_MaskMonster + + Melee + + 389 + 0.333 + 1.2 + + + + Weapon_MaskMonsterElite + + Melee + + 728 + 0.385 + 1.2 + + + + Weapon_HologramMonster + + Melee + + 666 + 0.166 + 1.8 + + + + Weapon_HologramMonsterElite + + Melee + + 1666 + 0.166 + 1.8 + + + + Weapon_SnakeMonster + + Ranged + + 125 + 1 + 8 + + BiologicalSnakeMonsterBullet + + + Weapon_SnakeMonsterElite + + Ranged + + 246 + 1 + 10 + + BiologicalSnakeMonsterBullet + + + Weapon_RatMonster + + Melee + + 11 + 1 + 0.8 + + + + Weapon_RatMonsterElite + + Melee + + 22 + 0.5 + 0.8 + + + + \ No newline at end of file diff --git a/Client/Data/Core/Define/Pawn/Monster.xml b/Client/Data/Core/Define/Pawn/Monster.xml index dd7922d..04c9141 100644 --- a/Client/Data/Core/Define/Pawn/Monster.xml +++ b/Client/Data/Core/Define/Pawn/Monster.xml @@ -5,7 +5,7 @@ chicken - + @@ -64,5 +64,828 @@ - + + + MonsterA1 + + 机械类型怪物,拥有远程攻击能力。击杀后掉落5能量。 + + + + + + + monster + + 4600 + 100 + 2.5 + + Weapon_MonsterA1 + + + +
  • MechanicalMonsterA1Texture
  • +
    +
    + + +
  • MechanicalMonsterA1Texture
  • +
    +
    + + +
  • MechanicalMonsterA1Texture
  • +
    +
    + + +
  • MechanicalMonsterA1Texture
  • +
    +
    +
    + 5 +
    + + MonsterA2 + + 更快的机械远程怪物。击杀后掉落5能量。 + + + + + + + monster + + 6000 + 10 + 4 + + Weapon_MonsterA2 + + + +
  • MechanicalMonsterA2Texture
  • +
    +
    + + +
  • MechanicalMonsterA2Texture
  • +
    +
    + + +
  • MechanicalMonsterA2Texture
  • +
    +
    + + +
  • MechanicalMonsterA2Texture
  • +
    +
    +
    + 5 +
    + + MonsterB1 + + 防御较高的机械近战怪物。击杀后掉落5能量。 + + + + + + + monster + + 5000 + 400 + 1 + + Weapon_MonsterB1 + + + +
  • MechanicalMonsterB1Texture
  • +
    +
    + + +
  • MechanicalMonsterB1Texture
  • +
    +
    + + +
  • MechanicalMonsterB1Texture
  • +
    +
    + + +
  • MechanicalMonsterB1Texture
  • +
    +
    +
    + 5 +
    + + MonsterB2 + + 高血高防的机械近战怪物。击杀后掉落5能量。 + + + + + + + monster + + 8000 + 500 + 1.5 + + Weapon_MonsterB2 + + + +
  • MechanicalMonsterB2Texture
  • +
    +
    + + +
  • MechanicalMonsterB2Texture
  • +
    +
    + + +
  • MechanicalMonsterB2Texture
  • +
    +
    + + +
  • MechanicalMonsterB2Texture
  • +
    +
    +
    + 5 +
    + + MonsterC1 + + 血量和防御极高的精英机械近战怪物。击杀后掉落10能量。 + + + + + + + monster + + 22000 + 800 + 1 + + Weapon_MonsterC1 + + + +
  • MechanicalMonsterC1Texture
  • +
    +
    + + +
  • MechanicalMonsterC1Texture
  • +
    +
    + + +
  • MechanicalMonsterC1Texture
  • +
    +
    + + +
  • MechanicalMonsterC1Texture
  • +
    +
    +
    + 10 +
    + + MonsterC2 + + 血量极高的精英机械近战怪物,攻击力强大。击杀后掉落10能量。 + + + + + + + monster + + 22000 + 450 + 2 + + Weapon_MonsterC2 + + + +
  • MechanicalMonsterC2Texture
  • +
    +
    + + +
  • MechanicalMonsterC2Texture
  • +
    +
    + + +
  • MechanicalMonsterC2Texture
  • +
    +
    + + +
  • MechanicalMonsterC2Texture
  • +
    +
    +
    + 10 +
    + + + MonsterD1 + + 混合类型怪物,拥有远程攻击能力。击杀后掉落5能量。 + + + + + + + monster + + 6400 + 50 + 2 + + Weapon_MonsterD1 + + + +
  • HybridMonsterD1Texture
  • +
    +
    + + +
  • HybridMonsterD1Texture
  • +
    +
    + + +
  • HybridMonsterD1Texture
  • +
    +
    + + +
  • HybridMonsterD1Texture
  • +
    +
    +
    + 5 +
    + + MonsterD2 + + 混合类型怪物,高速远程攻击。击杀后掉落5能量。 + + + + + + + monster + + 7200 + 0 + 3 + + Weapon_MonsterD2 + + + +
  • HybridMonsterD2Texture
  • +
    +
    + + +
  • HybridMonsterD2Texture
  • +
    +
    + + +
  • HybridMonsterD2Texture
  • +
    +
    + + +
  • HybridMonsterD2Texture
  • +
    +
    +
    + 5 +
    + + MonsterE1 + + 混合类型近战怪物,高速。击杀后掉落5能量。 + + + + + + + monster + + 6550 + 240 + 3 + + Weapon_MonsterE1 + + + +
  • HybridMonsterE1Texture
  • +
    +
    + + +
  • HybridMonsterE1Texture
  • +
    +
    + + +
  • HybridMonsterE1Texture
  • +
    +
    + + +
  • HybridMonsterE1Texture
  • +
    +
    +
    + 5 +
    + + MonsterE2 + + 更强大的混合类型近战怪物。击杀后掉落5能量。 + + + + + + + monster + + 9120 + 320 + 3 + + Weapon_MonsterE2 + + + +
  • HybridMonsterE2Texture
  • +
    +
    + + +
  • HybridMonsterE2Texture
  • +
    +
    + + +
  • HybridMonsterE2Texture
  • +
    +
    + + +
  • HybridMonsterE2Texture
  • +
    +
    +
    + 5 +
    + + MonsterF1 + + 关卡BOSS,血量和防御极高,近战爆发强。击杀后掉落50能量。 + + + + + + + monster + + 42000 + 770 + 2 + + Weapon_MonsterF1 + + + +
  • HybridMonsterF1Texture
  • +
    +
    + + +
  • HybridMonsterF1Texture
  • +
    +
    + + +
  • HybridMonsterF1Texture
  • +
    +
    + + +
  • HybridMonsterF1Texture
  • +
    +
    +
    + 50 +
    + + MonsterF2 + + 终极关卡BOSS,超高血量和攻击力。击杀后掉落50能量。 + + + + + + + monster + + 48000 + 560 + 2 + + Weapon_MonsterF2 + + + +
  • HybridMonsterF2Texture
  • +
    +
    + + +
  • HybridMonsterF2Texture
  • +
    +
    + + +
  • HybridMonsterF2Texture
  • +
    +
    + + +
  • HybridMonsterF2Texture
  • +
    +
    +
    + 50 +
    + + + MaskMonster1 + + 快速生物近战怪物。击杀后掉落5能量。 + + + + + + + monster + + 4800 + 66 + 8 + + Weapon_MaskMonster + + + +
  • BiologicalMaskMonster1Texture
  • +
    +
    + + +
  • BiologicalMaskMonster1Texture
  • +
    +
    + + +
  • BiologicalMaskMonster1Texture
  • +
    +
    + + +
  • BiologicalMaskMonster1Texture
  • +
    +
    +
    + 5 +
    + + MaskMonster4 + + 更强大的快速精英生物近战怪物。击杀后掉落10能量。 + + + + + + + monster + + 9600 + 132 + 8 + + Weapon_MaskMonsterElite + + + +
  • BiologicalMaskMonster4Texture
  • +
    +
    + + +
  • BiologicalMaskMonster4Texture
  • +
    +
    + + +
  • BiologicalMaskMonster4Texture
  • +
    +
    + + +
  • BiologicalMaskMonster4Texture
  • +
    +
    +
    + 10 +
    + + HologramMonster1 + + 特殊的生物近战怪物,无移动速度。击杀后掉落5能量。 + + + + + + + monster + + 6666 + -66 + 0 + + Weapon_HologramMonster + + + +
  • BiologicalHologramMonster1Texture
  • +
    +
    + + +
  • BiologicalHologramMonster1Texture
  • +
    +
    + + +
  • BiologicalHologramMonster1Texture
  • +
    +
    + + +
  • BiologicalHologramMonster1Texture
  • +
    +
    +
    + 5 +
    + + HologramMonster3 + + 更强大的精英生物近战怪物,无移动速度。击杀后掉落10能量。 + + + + + + + monster + + 16666 + -166 + 0 + + Weapon_HologramMonsterElite + + + +
  • BiologicalHologramMonster3Texture
  • +
    +
    + + +
  • BiologicalHologramMonster3Texture
  • +
    +
    + + +
  • BiologicalHologramMonster3Texture
  • +
    +
    + + +
  • BiologicalHologramMonster3Texture
  • +
    +
    +
    + 10 +
    + + SnakeMonster1 + + 生物远程怪物。击杀后掉落5能量。 + + + + + + + monster + + 5630 + 78 + 2 + + Weapon_SnakeMonster + + + +
  • BiologicalSnakeMonster1Texture
  • +
    +
    + + +
  • BiologicalSnakeMonster1Texture
  • +
    +
    + + +
  • BiologicalSnakeMonster1Texture
  • +
    +
    + + +
  • BiologicalSnakeMonster1Texture
  • +
    +
    +
    + 5 +
    + + SnakeMonster4 + + 更强大的精英生物远程怪物。击杀后掉落10能量。 + + + + + + + monster + + 11260 + 156 + 2 + + Weapon_SnakeMonsterElite + + + +
  • BiologicalSnakeMonster4Texture
  • +
    +
    + + +
  • BiologicalSnakeMonster4Texture
  • +
    +
    + + +
  • BiologicalSnakeMonster4Texture
  • +
    +
    + + +
  • BiologicalSnakeMonster4Texture
  • +
    +
    +
    + 10 +
    + + RatMonster1 + + 弱小的生物近战怪物,每11秒移动一次。击杀后掉落1能量。 + + + + + + + monster + + 111 + 1 + 11 + + Weapon_RatMonster + + + +
  • BiologicalRatMonster1Texture
  • +
    +
    + + +
  • BiologicalRatMonster1Texture
  • +
    +
    + + +
  • BiologicalRatMonster1Texture
  • +
    +
    + + +
  • BiologicalRatMonster1Texture
  • +
    +
    +
    + 1 +
    + + RatMonster2 + + 更强大的精英生物近战怪物,每22秒移动一次。击杀后掉落2能量。 + + + + + + + monster + + 222 + 2 + 22 + + Weapon_RatMonsterElite + + + +
  • BiologicalRatMonster2Texture
  • +
    +
    + + +
  • BiologicalRatMonster2Texture
  • +
    +
    + + +
  • BiologicalRatMonster2Texture
  • +
    +
    + + +
  • BiologicalRatMonster2Texture
  • +
    +
    +
    + 2 +
    + \ No newline at end of file diff --git a/Client/Data/Core/Define/Pawn/MonsterTextures.xml b/Client/Data/Core/Define/Pawn/MonsterTextures.xml new file mode 100644 index 0000000..3b50257 --- /dev/null +++ b/Client/Data/Core/Define/Pawn/MonsterTextures.xml @@ -0,0 +1,136 @@ + + + + + MechanicalMonsterA1Texture + res:Texture/Monster/机械/A怪物1 + 1 + 1 + + + MechanicalMonsterA2Texture + res:Texture/Monster/机械/A怪物2 + 1 + 1 + + + MechanicalMonsterB1Texture + res:Texture/Monster/机械/B怪物1 + 1 + 1 + + + MechanicalMonsterB2Texture + res:Texture/Monster/机械/B怪物2 + 1 + 1 + + + MechanicalMonsterC1Texture + res:Texture/Monster/机械/C怪物1 + 1 + 1 + + + MechanicalMonsterC2Texture + res:Texture/Monster/机械/C怪物2 + 1 + 1 + + + + + HybridMonsterD1Texture + res:Texture/Monster/混合/D怪物1 + 1 + 1 + + + HybridMonsterD2Texture + res:Texture/Monster/混合/D怪物2 + 1 + 1 + + + HybridMonsterE1Texture + res:Texture/Monster/混合/E怪物1 + 1 + 1 + + + HybridMonsterE2Texture + res:Texture/Monster/混合/E怪物2 + 1 + 1 + + + HybridMonsterF1Texture + res:Texture/Monster/混合/F怪物1 + 1 + 1 + + + HybridMonsterF2Texture + res:Texture/Monster/混合/F怪物2 + 1 + 1 + + + + + BiologicalMaskMonster1Texture + res:Texture/Monster/生物/面具1 + 1 + 1 + + + + BiologicalHologramMonster1Texture + res:Texture/Monster/生物/全息1 + 1 + 1 + + + + BiologicalSnakeMonster1Texture + res:Texture/Monster/生物/蛇1 + 1 + 1 + + + + + + GenericBulletTexture + res:Texture/Bullet/GenericBullet + 1 + 1 + + + \ No newline at end of file diff --git a/Client/Packages/manifest.json b/Client/Packages/manifest.json index 4183d75..084e6e3 100644 --- a/Client/Packages/manifest.json +++ b/Client/Packages/manifest.json @@ -13,6 +13,7 @@ "com.unity.test-framework": "1.5.1", "com.unity.timeline": "1.8.9", "com.unity.ugui": "2.0.0", + "com.unity.vectorgraphics": "2.0.0-preview.25", "com.unity.visualscripting": "1.9.8", "com.unity.modules.accessibility": "1.0.0", "com.unity.modules.ai": "1.0.0", diff --git a/Client/Packages/packages-lock.json b/Client/Packages/packages-lock.json index 76e1efc..4c5998d 100644 --- a/Client/Packages/packages-lock.json +++ b/Client/Packages/packages-lock.json @@ -20,8 +20,8 @@ "depth": 0, "source": "registry", "dependencies": { - "com.unity.modules.tilemap": "1.0.0", "com.unity.2d.tilemap": "1.0.0", + "com.unity.modules.tilemap": "1.0.0", "com.unity.modules.jsonserialize": "1.0.0" }, "url": "https://packages.unity.com" @@ -36,7 +36,7 @@ "url": "https://packages.unity.com" }, "com.unity.burst": { - "version": "1.8.24", + "version": "1.8.23", "depth": 2, "source": "registry", "dependencies": { @@ -53,14 +53,13 @@ "url": "https://packages.unity.com" }, "com.unity.collections": { - "version": "2.5.7", + "version": "2.5.1", "depth": 2, "source": "registry", "dependencies": { - "com.unity.burst": "1.8.19", - "com.unity.mathematics": "1.3.2", - "com.unity.nuget.mono-cecil": "1.11.5", - "com.unity.test-framework": "1.4.6", + "com.unity.burst": "1.8.17", + "com.unity.test-framework": "1.4.5", + "com.unity.nuget.mono-cecil": "1.11.4", "com.unity.test-framework.performance": "3.0.3" }, "url": "https://packages.unity.com" @@ -114,14 +113,14 @@ } }, "com.unity.nuget.mono-cecil": { - "version": "1.11.5", + "version": "1.11.4", "depth": 3, "source": "registry", "dependencies": {}, "url": "https://packages.unity.com" }, "com.unity.render-pipelines.core": { - "version": "17.2.0", + "version": "17.1.0", "depth": 1, "source": "builtin", "dependencies": { @@ -136,12 +135,12 @@ } }, "com.unity.render-pipelines.universal": { - "version": "17.2.0", + "version": "17.1.0", "depth": 0, "source": "builtin", "dependencies": { - "com.unity.render-pipelines.core": "17.2.0", - "com.unity.shadergraph": "17.2.0", + "com.unity.render-pipelines.core": "17.1.0", + "com.unity.shadergraph": "17.1.0", "com.unity.render-pipelines.universal-config": "17.0.3" } }, @@ -171,11 +170,11 @@ "url": "https://packages.unity.com" }, "com.unity.shadergraph": { - "version": "17.2.0", + "version": "17.1.0", "depth": 1, "source": "builtin", "dependencies": { - "com.unity.render-pipelines.core": "17.2.0", + "com.unity.render-pipelines.core": "17.1.0", "com.unity.searcher": "4.9.3" } }, @@ -204,9 +203,9 @@ "depth": 0, "source": "registry", "dependencies": { + "com.unity.modules.audio": "1.0.0", "com.unity.modules.director": "1.0.0", "com.unity.modules.animation": "1.0.0", - "com.unity.modules.audio": "1.0.0", "com.unity.modules.particlesystem": "1.0.0" }, "url": "https://packages.unity.com" @@ -220,6 +219,25 @@ "com.unity.modules.imgui": "1.0.0" } }, + "com.unity.vectorgraphics": { + "version": "2.0.0-preview.25", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ugui": "1.0.0", + "com.unity.2d.sprite": "1.0.0", + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.animation": "1.0.0", + "com.unity.modules.physics2d": "1.0.0", + "com.unity.modules.uielements": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.unitywebrequestwww": "1.0.0", + "com.unity.modules.unitywebrequesttexture": "1.0.0" + }, + "url": "https://packages.unity.com" + }, "com.unity.visualscripting": { "version": "1.9.8", "depth": 0, @@ -378,8 +396,7 @@ "com.unity.modules.ui": "1.0.0", "com.unity.modules.imgui": "1.0.0", "com.unity.modules.jsonserialize": "1.0.0", - "com.unity.modules.hierarchycore": "1.0.0", - "com.unity.modules.physics": "1.0.0" + "com.unity.modules.hierarchycore": "1.0.0" } }, "com.unity.modules.umbra": { diff --git a/Client/ProjectSettings/ProjectSettings.asset b/Client/ProjectSettings/ProjectSettings.asset index 193ceb3..3ced676 100644 --- a/Client/ProjectSettings/ProjectSettings.asset +++ b/Client/ProjectSettings/ProjectSettings.asset @@ -141,7 +141,7 @@ PlayerSettings: loadStoreDebugModeEnabled: 0 visionOSBundleVersion: 1.0 tvOSBundleVersion: 1.0 - bundleVersion: 0.1.0 + bundleVersion: 0.2 preloadedAssets: - {fileID: -944628639613478452, guid: 052faaac586de48259a63d0c4782560b, type: 3} metroInputSource: 0 diff --git a/Client/ProjectSettings/ShaderGraphSettings.asset b/Client/ProjectSettings/ShaderGraphSettings.asset index ce8c243..e66042a 100644 --- a/Client/ProjectSettings/ShaderGraphSettings.asset +++ b/Client/ProjectSettings/ShaderGraphSettings.asset @@ -13,7 +13,6 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: shaderVariantLimit: 128 - overrideShaderVariantLimit: 0 customInterpolatorErrorThreshold: 32 customInterpolatorWarningThreshold: 16 customHeatmapValues: {fileID: 0} diff --git a/Tools/ProtoBuf/proto/message.proto b/Tools/ProtoBuf/proto/message.proto index e52936b..59d5465 100644 --- a/Tools/ProtoBuf/proto/message.proto +++ b/Tools/ProtoBuf/proto/message.proto @@ -33,3 +33,260 @@ message SignupResponse { RequestResult result = 1; string message = 2; } + +// 导入 google/protobuf/empty.proto 用于不需要参数或返回值的 RPC +import "google/protobuf/empty.proto"; +// 导入 google/protobuf/timestamp.proto 用于时间戳 +import "google/protobuf/timestamp.proto"; +// 可以根据需要导入其他标准 Protobuf 类型 +// =================================================================== +// 1. 基础公共类型和枚举 +// =================================================================== +// 表示一个唯一的实体ID +message EntityID { + string value = 1; // 例如:UUID, "player_123", "enemy_A_45" +} +// 2D 向量(位置或方向) +message Vec2D { + float x = 1; + float y = 2; +} +// 房间状态枚举 +enum RoomStatus { + UNKNOWN_ROOM_STATUS = 0; // 未知状态,通常作为默认值 + WAITING = 1; // 等待玩家加入 + IN_GAME = 2; // 游戏进行中 + FINISHED = 3; // 游戏已结束,等待结算 +} +// 游戏版本信息 +message GameVersion { + uint32 major = 1; // 主版本号 + uint32 minor = 2; // 次版本号 + uint32 patch = 3; // 补丁版本号 +} +// 包信息 (用于核对客户端资源包) +message PackageInfo { + string package_id = 1; // 包的唯一ID (如 "map_pack_001", "character_skins") + GameVersion version = 2; // 包的版本 + string checksum = 3; // 包的校验和 (MD5, SHA256等),用于完整性检查 +} +// =================================================================== +// 2. 身份验证与连接服务 (Authentication and Connection Service) +// 用于客户端连接、核对版本和资源包 +// =================================================================== +service AuthService { + // 客户端连接服务器时进行初始化认证 + rpc Authenticate (AuthRequest) returns (AuthResponse); +} +// 认证请求 +message AuthRequest { + string client_id = 1; // 客户端唯一ID (如设备ID或用户ID) + GameVersion game_version = 2; // 客户端的游戏版本 + repeated PackageInfo client_packages = 3; // 客户端拥有的资源包列表及其版本和校验和 + string auth_token = 4; // 可选:OAuth token 或其他认证凭证 +} +// 认证响应 +message AuthResponse { + bool success = 1; // 是否认证成功 + optional string message = 2; // 认证失败时的错误消息 + // 如果认证失败,可能需要提供不匹配的包信息 + repeated PackageInfo mismatched_packages = 3; // 服务器端不匹配或过时的包信息 + // 注意:此处可以考虑更详细的错误码系统 + // 如果成功,可能返回一些会话信息 + optional string session_id = 4; // 会话ID,用于后续请求 +} +// =================================================================== +// 3. 房间管理服务 (Room Management Service) +// 用于查询、建立、加入和离开房间 +// =================================================================== +service RoomService { + // 查询可用房间列表 + rpc ListRooms (ListRoomsRequest) returns (ListRoomsResponse); + // 创建一个新房间 + rpc CreateRoom (CreateRoomRequest) returns (CreateRoomResponse); + // 加入一个现有房间 + rpc JoinRoom (JoinRoomRequest) returns (JoinRoomResponse); + // 离开当前房间 + rpc LeaveRoom (LeaveRoomRequest) returns (google.protobuf.Empty); // 无需特定响应体 + // 撤销一个房间 (通常由房主或服务器管理员操作) + rpc DisbandRoom (DisbandRoomRequest) returns (google.protobuf.Empty); +} +// 房间信息(公共可见部分) +message RoomInfo { + string room_id = 1; + string room_name = 2; + RoomStatus status = 3; + uint32 current_players = 4; + uint32 max_players = 5; + string map_id = 6; // 当前房间使用的地图ID + bool is_private = 7; // 是否是私人房间,需要密码或邀请 + string host_player_id = 8; // 房主ID + google.protobuf.Timestamp created_at = 9; // 房间创建时间 + GameVersion game_version = 10; // 房间创建时使用的游戏版本,确保一致性 +} +// 查询房间请求 +message ListRoomsRequest { + // 可以根据不同的过滤条件查询房间 + optional string map_id_filter = 1; + optional RoomStatus status_filter = 2; + bool only_available = 3; // 只返回可加入的房间 + uint32 max_results = 4; // 最大返回数量 +} +// 查询房间响应 +message ListRoomsResponse { + repeated RoomInfo rooms = 1; +} +// 创建房间请求 +message CreateRoomRequest { + string room_name = 1; + uint32 max_players = 2; + string map_id = 3; + optional string password = 4; // 私人房间密码 + bool is_private = 5; + string player_id = 6; // 创建者的玩家ID +} +// 创建房间响应 +message CreateRoomResponse { + bool success = 1; + optional string message = 2; + optional RoomInfo room_info = 3; // 成功创建后返回房间信息 +} +// 加入房间请求 +message JoinRoomRequest { + string room_id = 1; + string player_id = 2; + optional string password = 3; // 如果是私人房间,需要提供密码 +} +// 加入房间响应 +message JoinRoomResponse { + bool success = 1; + optional string message = 2; + optional RoomInfo room_info = 3; // 成功加入后返回房间信息 + optional string player_session_token = 4; // 玩家在房间内的会话令牌 +} +// 离开房间请求 +message LeaveRoomRequest { + string room_id = 1; + string player_id = 2; +} +// 撤销房间请求 +message DisbandRoomRequest { + string room_id = 1; + string player_id = 2; // 执行撤销的玩家ID (需验证权限) +} +// =================================================================== +// 4. 游戏同步服务 (Game Synchronization Service) +// 用于游戏内实体、地图、状态等数据的同步 +// 这是一个双向流RPC,客户端和服务器可以持续发送更新 +// =================================================================== +service GameSyncService { + // Bi-directional streaming RPC for real-time game state synchronization + // 客户端和服务器持续发送 GameSyncMessage + rpc SyncGame (stream GameSyncMessage) returns (stream GameSyncMessage); +} +// 实体属性(运行时属性,例如血量、能量等) +message EntityRuntimeProperties { + map string_properties = 1; // 字符串属性 (例如 "state": "idle", "team_id": "blue") + map int_properties = 2; // 整型属性 (例如 "health": 100, "attack": 10) + map float_properties = 3; // 浮点型属性 (例如 "speed": 5.5, "mana_regen": 1.2) + map bool_properties = 4; // 布尔属性 (例如 "is_dead": false, "can_move": true) + // 可以添加更多常用类型或更复杂的嵌套消息来表示特定属性 +} +// 实体信息 +message Entity { + EntityID id = 1; // 实体的唯一运行时ID + string def_name = 2; // 实体的定义名称 (例如 "PlayerCharacterA", "GoblinWarrior", "HealthPotion") + Vec2D position = 3; // 位置 + Vec2D orientation = 4; // 朝向 (归一化向量) + // 运行时属性 + EntityRuntimeProperties properties = 5; + // 实体所属的维度ID (例如 "world_0", "dungeon_level_1", "instance_arena_3") + string dimension_id = 6; + // 实体创建时间 (可选) + optional google.protobuf.Timestamp created_at = 7; +} +// 维度信息 (例如一个地图区域,一个副本实例) +message Dimension { + string id = 1; // 维度ID (如 "main_world", "dungeon_level_1") + string map_id = 2; // 维度所使用的地图静态ID + // 其他维度相关的状态,例如天气,时间OfDay等 + map custom_data = 3; +} +// 单个游戏状态更新包 +message GameStateUpdate { + string room_id = 1; // 房间ID + google.protobuf.Timestamp timestamp = 2; // 更新时间戳 + // 实体更新 + repeated Entity entities_to_add = 3; // 要添加或完全更新的实体 + repeated Entity entities_to_update = 4; // 要更新的实体(可能是部分更新,根据实现) + repeated EntityID entities_to_remove = 5; // 要移除的实体ID + // 维度更新 + repeated Dimension dimensions_to_add = 6; + repeated Dimension dimensions_to_update = 7; + repeated string dimensions_to_remove = 8; // 移除维度的ID + // 其他全局游戏状态(例如游戏阶段、得分、时间限制等) + map global_state_properties = 9; +} +// 游戏事件 +message GameEvent { + enum EventType { + UNKNOWN_EVENT = 0; + PLAYER_HIT = 1; + ITEM_PICKUP = 2; + ENTITY_KILLED = 3; + SKILL_CAST = 4; + // ... 更多事件类型 + } + EventType type = 1; + string room_id = 2; + google.protobuf.Timestamp timestamp = 3; + string source_entity_id = 4; // 导致事件的实体ID + optional string target_entity_id = 5; // 事件影响的实体ID + // 事件的具体数据,使用 oneof 模式更优雅 + oneof event_data { + PlayerHitEvent player_hit = 6; + ItemPickupEvent item_pickup = 7; + // ... 更多事件的详细数据 + } +} +// 具体的事件数据示例 +message PlayerHitEvent { + int32 damage_dealt = 1; + string weapon_id = 2; +} +message ItemPickupEvent { + string item_def_name = 1; + int32 quantity = 2; +} +// 通用游戏同步消息(客户端和服务器双向) +message GameSyncMessage { + string room_id = 1; // 当前消息所属的房间ID + string player_id = 2; // 发送消息的玩家ID (客户端发送时) 或目标玩家ID (服务器发送时) + // 使用 oneof 来区分消息类型 + oneof content { + GameStateUpdate state_update = 3; // 服务器发送完整的游戏状态或增量更新 + GameEvent client_event = 4; // 客户端发送的游戏操作事件 (如移动、攻击) + GameEvent server_event = 5; // 服务器发送的游戏事件 (如伤害、物品掉落) + ClientHeartbeat heartbeat = 6; // 客户端发送的心跳包 + ServerPing ping = 7; // 服务器发送的ping消息 + ClientInput input = 8; // 客户端的输入 (键盘/鼠标/手柄) + } +} +// 客户端心跳 +message ClientHeartbeat { + google.protobuf.Timestamp client_time = 1; // 客户端本地时间 +} +// 服务器 ping (用于延迟计算) +message ServerPing { + google.protobuf.Timestamp server_time = 1; // 服务器发送时间 +} +// 客户端输入(示例,可以更复杂) +message ClientInput { + // 按键状态,例如:map keys_pressed; + repeated string keys_pressed = 1; // 当前按下的键名列表 + Vec2D mouse_position = 2; // 鼠标屏幕坐标 + bool left_mouse_click = 3; + bool right_mouse_click = 4; + Vec2D movement_direction = 5; // 玩家移动的期望方向向量 + // 可以添加更多输入相关的数据 +} \ No newline at end of file