比较提交

...
此合并请求有变更与目标分支冲突。
/Assets/BossRoom/Prefabs/Character/CharacterSet.prefab
/Assets/BossRoom/Scenes/DungeonTest.unity
/Assets/BossRoom/Scripts/Client/Game/Character/ModelSwap.cs
/Assets/BossRoom

4 次代码提交

作者 SHA1 备注 提交日期
eheimburg 934cfc7e changes to address PR problems 4 年前
eheimburg 429bd773 comment/logging cleanup 4 年前
eheimburg 59528a23 Update EmptySliceBehavior.cs 4 年前
eheimburg 2b8c0818 Character-select screen basic functionality 4 年前
共有 327 个文件被更改,包括 6065 次插入1701 次删除
  1. 2
      Packages/manifest.json
  2. 47
      Packages/packages-lock.json
  3. 2
      ProjectSettings/ProjectSettings.asset
  4. 116
      ProjectSettings/GraphicsSettings.asset
  5. 2
      Assets/BossRoom/Prefabs/Dungeon/Dungeon Pieces/Door.prefab
  6. 7
      Assets/BossRoom/Prefabs/Dungeon/Dungeon Pieces/torch.prefab
  7. 3
      Assets/BossRoom/Prefabs/Character/Boss.prefab
  8. 5
      Assets/BossRoom/Prefabs/Character/Imp.prefab
  9. 514
      Assets/BossRoom/Prefabs/Character/CharacterSet.prefab
  10. 13
      Assets/BossRoom/Prefabs/Enemy.prefab
  11. 13
      Assets/BossRoom/Prefabs/Imp.prefab
  12. 2
      Assets/BossRoom/Material/Characters/Enemy_Eyes_sheet.mat
  13. 9
      Assets/BossRoom/Material/Characters/Enemy_Mouth_sheet.mat
  14. 3
      Assets/BossRoom/Material/Characters/Hero_Eyes_sheet.mat
  15. 8
      Assets/BossRoom/Material/Characters/Hero_Mouth_sheet.mat
  16. 9
      Assets/BossRoom/Material/Characters/ToonTest/Hair_Archer_Boy.mat
  17. 9
      Assets/BossRoom/Material/Characters/ToonTest/Hair_Archer_Girl.mat
  18. 13
      Assets/BossRoom/Material/Characters/ToonTest/Hair_Mage_Boy.mat
  19. 11
      Assets/BossRoom/Material/Characters/ToonTest/Hair_Mage_Girl.mat
  20. 13
      Assets/BossRoom/Material/Characters/ToonTest/Hair_Rogue_Boy.mat
  21. 9
      Assets/BossRoom/Material/Characters/ToonTest/Hair_Rogue_Girl.mat
  22. 11
      Assets/BossRoom/Material/Characters/ToonTest/Hair_Tank_Boy.mat
  23. 9
      Assets/BossRoom/Material/Characters/ToonTest/Hair_Tank_Girl.mat
  24. 11
      Assets/BossRoom/Material/Characters/ToonTest/Head_Archer_Boy.mat
  25. 11
      Assets/BossRoom/Material/Characters/ToonTest/Head_Archer_Girl.mat
  26. 10
      Assets/BossRoom/Material/Characters/ToonTest/Head_Boss.mat
  27. 10
      Assets/BossRoom/Material/Characters/ToonTest/Head_Imp.mat
  28. 11
      Assets/BossRoom/Material/Characters/ToonTest/Head_Mage_Boy.mat
  29. 11
      Assets/BossRoom/Material/Characters/ToonTest/Head_Mage_Girl.mat
  30. 11
      Assets/BossRoom/Material/Characters/ToonTest/Head_Rogue_Boy.mat
  31. 11
      Assets/BossRoom/Material/Characters/ToonTest/Head_Rogue_Girl.mat
  32. 11
      Assets/BossRoom/Material/Characters/ToonTest/Head_Tank_Boy.mat
  33. 13
      Assets/BossRoom/Material/Characters/ToonTest/Head_Tank_Girl.mat
  34. 13
      Assets/BossRoom/Material/Characters/ToonTest/Torso_Archer.mat
  35. 9
      Assets/BossRoom/Material/Characters/ToonTest/Torso_Boss.mat
  36. 12
      Assets/BossRoom/Material/Characters/ToonTest/Torso_Imp.mat
  37. 11
      Assets/BossRoom/Material/Characters/ToonTest/Torso_Mage_Boy.mat
  38. 11
      Assets/BossRoom/Material/Characters/ToonTest/Torso_Mage_Girl.mat
  39. 11
      Assets/BossRoom/Material/Characters/ToonTest/Torso_Rogue.mat
  40. 7
      Assets/BossRoom/Material/Characters/ToonTest/Torso_Tank.mat
  41. 13
      Assets/BossRoom/Material/Characters/ToonTest/Weapons_Archer.mat
  42. 13
      Assets/BossRoom/Material/Characters/ToonTest/Weapons_Mage.mat
  43. 13
      Assets/BossRoom/Material/Characters/ToonTest/Weapons_Rogue.mat
  44. 7
      Assets/BossRoom/Material/Characters/ToonTest/Weapons_Tank.mat
  45. 3
      Assets/BossRoom/Material/Dungeon/lava.mat
  46. 3
      Assets/BossRoom/Material/Dungeon/deco_dungeon.mat
  47. 958
      Assets/BossRoom/Models/DungeonPieces.FBX
  48. 25
      Assets/BossRoom/Models/BossSetController.controller
  49. 27
      Assets/BossRoom/Models/CharacterSet.fbx.meta
  50. 548
      Assets/BossRoom/Models/CharacterSetController.controller
  51. 8
      Assets/BossRoom/PostProcessing/PostProcessVolume Profile.asset
  52. 2
      Assets/BossRoom/Textures/Characters/Tank_Weapon_CLR.tga
  53. 4
      Assets/BossRoom/Textures/Environment/deco_dungeon.png
  54. 942
      Assets/BossRoom/Scenes/DungeonTest.unity
  55. 992
      Assets/BossRoom/Scenes/CharSelect.unity
  56. 22
      Assets/BossRoom/Scripts/Server/Game/Action/Action.cs
  57. 52
      Assets/BossRoom/Scripts/Server/Game/Action/ActionPlayer.cs
  58. 42
      Assets/BossRoom/Scripts/Server/Game/Action/ChaseAction.cs
  59. 80
      Assets/BossRoom/Scripts/Server/Game/Action/MeleeAction.cs
  60. 56
      Assets/BossRoom/Scripts/Server/Game/Character/AIBrain.cs
  61. 120
      Assets/BossRoom/Scripts/Server/Game/Character/ServerCharacter.cs
  62. 44
      Assets/BossRoom/Scripts/Server/Game/State/ServerBossRoomState.cs
  63. 189
      Assets/BossRoom/Scripts/Server/Game/State/ServerCharSelectState.cs
  64. 5
      Assets/BossRoom/Scripts/Shared/BossRoom.Shared.asmdef
  65. 126
      Assets/BossRoom/Scripts/Shared/Game/Action/ActionRequestData.cs
  66. 135
      Assets/BossRoom/Scripts/Shared/Game/State/CharSelectData.cs
  67. 4
      Assets/BossRoom/Scripts/Shared/Game/State/GameStateBehaviour.cs
  68. 10
      Assets/BossRoom/Scripts/Client/Game/Character/ClientCharacter.cs
  69. 11
      Assets/BossRoom/Scripts/Client/Game/Character/ModelSwap.cs
  70. 45
      Assets/BossRoom/Scripts/Client/Game/State/ClientCharSelectState.cs
  71. 76
      .editorconfig
  72. 39
      README.md
  73. 0
      InitCodeMarker
  74. 8
      Packages/com.unity.multiplayer.samples.coop/.npmignore
  75. 11
      Packages/com.unity.multiplayer.samples.coop/CHANGELOG.md
  76. 7
      Packages/com.unity.multiplayer.samples.coop/CHANGELOG.md.meta
  77. 315
      Packages/com.unity.multiplayer.samples.coop/Documentation~/images/example.png
  78. 67
      Packages/com.unity.multiplayer.samples.coop/Documentation~/images/gitlab_ci_secret_variables.png
  79. 555
      Packages/com.unity.multiplayer.samples.coop/Documentation~/images/gitlab_pipeline_download.png
  80. 483
      Packages/com.unity.multiplayer.samples.coop/Documentation~/images/gitlab_pipelines.png
  81. 448
      Packages/com.unity.multiplayer.samples.coop/Documentation~/images/template_in_new_project.png
  82. 137
      Packages/com.unity.multiplayer.samples.coop/Documentation~/index.md
  83. 5
      Packages/com.unity.multiplayer.samples.coop/LICENSE.md
  84. 7
      Packages/com.unity.multiplayer.samples.coop/LICENSE.md.meta
  85. 26
      Packages/com.unity.multiplayer.samples.coop/QAReport.md
  86. 7
      Packages/com.unity.multiplayer.samples.coop/QAReport.md.meta
  87. 39
      Packages/com.unity.multiplayer.samples.coop/README.md
  88. 7
      Packages/com.unity.multiplayer.samples.coop/README.md.meta
  89. 8
      Packages/com.unity.multiplayer.samples.coop/Tests.meta
  90. 8
      Packages/com.unity.multiplayer.samples.coop/Tests/Editor.meta

2
Packages/manifest.json


{
"dependencies": {
"com.unity.learn.iet-framework": "1.2.1",
"com.unity.cinemachine": "2.6.3",
"com.unity.collab-proxy": "1.3.9",
"com.unity.ide.rider": "2.0.7",

"com.unity.multiplayer.multipie": "https://github.com/Unity-Technologies/com.unity.multiplayer.multipie.git#ec513520a8bba970366c572e88613664a2054353",
"com.unity.postprocessing": "2.3.0",
"com.unity.test-framework": "1.1.19",
"com.unity.textmeshpro": "3.0.1",

47
Packages/packages-lock.json


},
"url": "https://packages.unity.com"
},
"com.unity.editorcoroutines": {
"version": "1.0.0",
"depth": 1,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.com"
},
"com.unity.ext.nunit": {
"version": "1.0.5",
"depth": 1,

"dependencies": {},
"url": "https://packages.unity.com"
},
"com.unity.learn.iet-framework": {
"version": "1.2.1",
"depth": 0,
"source": "registry",
"dependencies": {
"com.unity.editorcoroutines": "1.0.0",
"com.unity.settings-manager": "1.0.2"
},
"url": "https://packages.unity.com"
},
"com.unity.mathematics": {
"version": "1.2.1",
"depth": 3,

},
"hash": "726b77f90f2bb2879303cf72a22048ac0abf4084"
},
"com.unity.multiplayer.multipie": {
"version": "https://github.com/Unity-Technologies/com.unity.multiplayer.multipie.git#ec513520a8bba970366c572e88613664a2054353",
"depth": 0,
"source": "git",
"dependencies": {},
"hash": "ec513520a8bba970366c572e88613664a2054353"
},
"com.unity.multiplayer.samples.coop": {
"version": "file:com.unity.multiplayer.samples.coop",
"depth": 0,
"source": "embedded",
"dependencies": {
"com.unity.learn.iet-framework": "1.2.1",
"com.unity.multiplayer.mlapi": "0.0.1-preview.1",
"com.unity.test-framework": "1.1.19",
"com.unity.modules.ai": "1.0.0",
"com.unity.modules.animation": "1.0.0",
"com.unity.modules.particlesystem": "1.0.0",
"com.unity.modules.physics": "1.0.0",
"com.unity.modules.physics2d": "1.0.0",
"com.unity.modules.ui": "1.0.0"
}
},
"com.unity.multiplayer.transport.litenet": {
"version": "file:com.unity.multiplayer.transport.litenet",
"depth": 0,

"com.unity.postprocessing": {
"version": "2.3.0",
"depth": 0,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.com"
},
"com.unity.settings-manager": {
"version": "1.0.2",
"depth": 1,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.com"

2
ProjectSettings/ProjectSettings.asset


defaultScreenWidthWeb: 960
defaultScreenHeightWeb: 600
m_StereoRenderingPath: 0
m_ActiveColorSpace: 0
m_ActiveColorSpace: 1
m_MTRendering: 1
mipStripping: 0
numberOfMipsStripped: 0

116
ProjectSettings/GraphicsSettings.asset
文件差异内容过多而无法显示
查看文件

2
Assets/BossRoom/Prefabs/Dungeon/Dungeon Pieces/Door.prefab


m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:

m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!65 &4897062626467851486
BoxCollider:
m_ObjectHideFlags: 0

7
Assets/BossRoom/Prefabs/Dungeon/Dungeon Pieces/torch.prefab


m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4371491365999748502}
m_LocalRotation: {x: 0.000000021855694, y: 0.00000011920929, z: -2.6054018e-15,
w: 1}
m_LocalPosition: {x: 0.2620883, y: 0, z: 17.00224}
m_LocalRotation: {x: 0.000000021855694, y: 0.00000011920929, z: -2.6054018e-15, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}

m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:

m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}

3
Assets/BossRoom/Prefabs/Character/Boss.prefab


m_GameObject: {fileID: 6839301660383890230}
m_Enabled: 1
m_Avatar: {fileID: 9000000, guid: 2115c4661f55eff45a5a0f91fc0a12f0, type: 3}
m_Controller: {fileID: 9100000, guid: 259c0c92d6badb54bb032df749609d27, type: 2}
m_Controller: {fileID: 9100000, guid: 81ba9d484ee6d174a8aeb3af411babc4, type: 2}
m_CullingMode: 1
m_UpdateMode: 0
m_ApplyRootMotion: 0

m_Script: {fileID: 11500000, guid: 9520a47fc61d5ab4ca99cdac2d574909, type: 3}
m_Name:
m_EditorClassIdentifier:
m_ClientVisualsAnimator: {fileID: 0}
MinZoomDistance: 3
MaxZoomDistance: 30
ZoomSpeed: 3

5
Assets/BossRoom/Prefabs/Character/Imp.prefab


m_Script: {fileID: 11500000, guid: 9520a47fc61d5ab4ca99cdac2d574909, type: 3}
m_Name:
m_EditorClassIdentifier:
m_ClientVisualsAnimator: {fileID: 0}
MinZoomDistance: 3
MaxZoomDistance: 30
ZoomSpeed: 3

m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8397462235754238418}
m_LocalRotation: {x: -0.00000006657903, y: 4.432767e-15, z: -0.00000006657903, w: 1}
m_LocalRotation: {x: -0.27174827, y: 0.038688652, z: -0.0535553, w: 0.96009785}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_LocalEulerAnglesHint: {x: -31.176, y: 6.941, z: -8.324}
--- !u!33 &8731501901720154717
MeshFilter:
m_ObjectHideFlags: 0

514
Assets/BossRoom/Prefabs/Character/CharacterSet.prefab


- component: {fileID: 4547385851608601811}
- component: {fileID: 4199396739699390757}
- component: {fileID: 7943089997373843793}
- component: {fileID: 2962535016233727189}
m_Layer: 9
m_Name: CharacterSet
m_TagString: Untagged

m_Name:
m_EditorClassIdentifier:
m_ClientVisualsAnimator: {fileID: 4199396739699390757}
m_ModelSetter: {fileID: 2962535016233727189}
--- !u!114 &2962535016233727189
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3736552308919084700}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: aa17b16346702814286158f2a1378d10, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &3741846901656975085
GameObject:
m_ObjectHideFlags: 0

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: ac6c83cdac4b1c740951b39df73768fa, type: 3}
--- !u!1 &6384206623454602747 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 6630845041802794700, guid: ac6c83cdac4b1c740951b39df73768fa, type: 3}
m_PrefabInstance: {fileID: 332206951480292151}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 332206951480292151}
m_PrefabAsset: {fileID: 0}
--- !u!1 &6384206623454602747 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 6630845041802794700, guid: ac6c83cdac4b1c740951b39df73768fa, type: 3}
m_PrefabInstance: {fileID: 332206951480292151}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &454819820488923400

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 10b351404ac8a7f46bf58430e1cc8eef, type: 3}
--- !u!1 &1421799770502368504 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 1995826771073365337, guid: 10b351404ac8a7f46bf58430e1cc8eef, type: 3}
m_PrefabInstance: {fileID: 579177113187023265}
m_PrefabAsset: {fileID: 0}
--- !u!1 &1421799770502368504 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 1995826771073365337, guid: 10b351404ac8a7f46bf58430e1cc8eef, type: 3}
m_PrefabInstance: {fileID: 579177113187023265}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &728892584412951697
PrefabInstance:
m_ObjectHideFlags: 0

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: ed24796831d4621449bac9de9c857e31, type: 3}
--- !u!1 &4547385850944476164 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 3820746449368866965, guid: ed24796831d4621449bac9de9c857e31, type: 3}
m_PrefabInstance: {fileID: 728892584412951697}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 728892584412951697}
m_PrefabAsset: {fileID: 0}
--- !u!1 &4547385850944476164 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 3820746449368866965, guid: ed24796831d4621449bac9de9c857e31, type: 3}
m_PrefabInstance: {fileID: 728892584412951697}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &733550275437513568

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 1b7e977ff0655ae4cbdd17929b152e15, type: 3}
--- !u!1 &6193635572633873786 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 6883714035873258232, guid: 1b7e977ff0655ae4cbdd17929b152e15, type: 3}
m_PrefabInstance: {fileID: 753204829954258818}
m_PrefabAsset: {fileID: 0}
--- !u!1 &6193635572633873786 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 6883714035873258232, guid: 1b7e977ff0655ae4cbdd17929b152e15, type: 3}
m_PrefabInstance: {fileID: 753204829954258818}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &852324916834964655
PrefabInstance:
m_ObjectHideFlags: 0

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 38e0524ac233b6c40afb38c90691c4fa, type: 3}
--- !u!4 &2580354841388530375 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 2892914521110621208, guid: 38e0524ac233b6c40afb38c90691c4fa, type: 3}
m_PrefabInstance: {fileID: 858764088337110751}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 858764088337110751}
m_PrefabAsset: {fileID: 0}
--- !u!4 &2580354841388530375 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 2892914521110621208, guid: 38e0524ac233b6c40afb38c90691c4fa, type: 3}
m_PrefabInstance: {fileID: 858764088337110751}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &860493482025792141

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: b97a7eee3b3ee204d84d439863d57625, type: 3}
--- !u!1 &5485558108050409640 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 5175067299823254053, guid: b97a7eee3b3ee204d84d439863d57625, type: 3}
m_PrefabInstance: {fileID: 860493482025792141}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 860493482025792141}
m_PrefabAsset: {fileID: 0}
--- !u!1 &5485558108050409640 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 5175067299823254053, guid: b97a7eee3b3ee204d84d439863d57625, type: 3}
m_PrefabInstance: {fileID: 860493482025792141}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &946742905020422199

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: bdccc0f84e2d51440b93b29a121c0c7b, type: 3}
--- !u!1 &7080003993000648899 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 8026183889984403700, guid: bdccc0f84e2d51440b93b29a121c0c7b, type: 3}
m_PrefabInstance: {fileID: 946742905020422199}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 946742905020422199}
m_PrefabAsset: {fileID: 0}
--- !u!1 &7080003993000648899 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 8026183889984403700, guid: bdccc0f84e2d51440b93b29a121c0c7b, type: 3}
m_PrefabInstance: {fileID: 946742905020422199}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &959375327167680774

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 5d12ce98a47b50d4c8a8200298776161, type: 3}
--- !u!4 &7505134407724153699 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 8800453722438721035, guid: 5d12ce98a47b50d4c8a8200298776161, type: 3}
m_PrefabInstance: {fileID: 1298982770278458728}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 1298982770278458728}
m_PrefabAsset: {fileID: 0}
--- !u!4 &7505134407724153699 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 8800453722438721035, guid: 5d12ce98a47b50d4c8a8200298776161, type: 3}
m_PrefabInstance: {fileID: 1298982770278458728}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &1338131622577927935

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: b8030b4fc426af24bbe0f7beb34946c3, type: 3}
--- !u!4 &3596195561666825011 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 2556284620966837708, guid: b8030b4fc426af24bbe0f7beb34946c3, type: 3}
m_PrefabInstance: {fileID: 1338131622577927935}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 1338131622577927935}
m_PrefabAsset: {fileID: 0}
--- !u!4 &3596195561666825011 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 2556284620966837708, guid: b8030b4fc426af24bbe0f7beb34946c3, type: 3}
m_PrefabInstance: {fileID: 1338131622577927935}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &1373061141570302353

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: f3f30ec22ae42a24baf6c8a0c0391c95, type: 3}
--- !u!4 &2150341864517573137 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 599364752401762136, guid: f3f30ec22ae42a24baf6c8a0c0391c95, type: 3}
m_PrefabInstance: {fileID: 1551159777671028041}
m_PrefabAsset: {fileID: 0}
--- !u!4 &2150341864517573137 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 599364752401762136, guid: f3f30ec22ae42a24baf6c8a0c0391c95, type: 3}
m_PrefabInstance: {fileID: 1551159777671028041}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &1559570637484814041
PrefabInstance:
m_ObjectHideFlags: 0

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 536c048095afdf94eb5fe2d76b1eddac, type: 3}
--- !u!4 &5385782326741960938 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 6852949516830729779, guid: 536c048095afdf94eb5fe2d76b1eddac, type: 3}
m_PrefabInstance: {fileID: 1559570637484814041}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 1559570637484814041}
m_PrefabAsset: {fileID: 0}
--- !u!4 &5385782326741960938 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 6852949516830729779, guid: 536c048095afdf94eb5fe2d76b1eddac, type: 3}
m_PrefabInstance: {fileID: 1559570637484814041}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &1635758741189274712

objectReference: {fileID: 1385890853458294598}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: d607de369828e294f84db65de7e31daf, type: 3}
--- !u!4 &3874973950823841917 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 2555174517495098405, guid: d607de369828e294f84db65de7e31daf, type: 3}
m_PrefabInstance: {fileID: 1635758741189274712}
m_PrefabAsset: {fileID: 0}
--- !u!4 &3874973950823841917 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 2555174517495098405, guid: d607de369828e294f84db65de7e31daf, type: 3}
m_PrefabInstance: {fileID: 1635758741189274712}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &1748790218336742982
PrefabInstance:
m_ObjectHideFlags: 0

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: d07948daabd313d449f0f4c99aef7a1e, type: 3}
--- !u!4 &3336581218452436569 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 3838288550262042125, guid: d07948daabd313d449f0f4c99aef7a1e, type: 3}
m_PrefabInstance: {fileID: 1948297122739230804}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 1948297122739230804}
m_PrefabAsset: {fileID: 0}
--- !u!4 &3336581218452436569 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 3838288550262042125, guid: d07948daabd313d449f0f4c99aef7a1e, type: 3}
m_PrefabInstance: {fileID: 1948297122739230804}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &1977156738873174314

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 87d3fa966871a354ab69c7694d7df857, type: 3}
--- !u!4 &2332494599897491548 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 4585477292987236726, guid: 87d3fa966871a354ab69c7694d7df857, type: 3}
m_PrefabInstance: {fileID: 2304800906626459946}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 2304800906626459946}
m_PrefabAsset: {fileID: 0}
--- !u!4 &2332494599897491548 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 4585477292987236726, guid: 87d3fa966871a354ab69c7694d7df857, type: 3}
m_PrefabInstance: {fileID: 2304800906626459946}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &2332375452339634652

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: d953efb8e63e08a4e9a8569fd8b5897a, type: 3}
--- !u!4 &4547385851833940655 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 2253431811545332595, guid: d953efb8e63e08a4e9a8569fd8b5897a, type: 3}
m_PrefabInstance: {fileID: 2332375452339634652}
m_PrefabAsset: {fileID: 0}
--- !u!4 &4547385851833940655 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 2253431811545332595, guid: d953efb8e63e08a4e9a8569fd8b5897a, type: 3}
m_PrefabInstance: {fileID: 2332375452339634652}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &2497891176746094250
PrefabInstance:
m_ObjectHideFlags: 0

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: f2614cfe7ec25e04daab46ef6fe016db, type: 3}
--- !u!4 &6681215039063494845 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 9084388714526285335, guid: f2614cfe7ec25e04daab46ef6fe016db, type: 3}
m_PrefabInstance: {fileID: 2497891176746094250}
m_PrefabAsset: {fileID: 0}
--- !u!4 &6681215039063494845 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 9084388714526285335, guid: f2614cfe7ec25e04daab46ef6fe016db, type: 3}
m_PrefabInstance: {fileID: 2497891176746094250}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &2551460648612136281
PrefabInstance:
m_ObjectHideFlags: 0

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 9595d49816059ba4180a551ca688e4af, type: 3}
--- !u!1 &3197879114731797047 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 1083606013360258926, guid: 9595d49816059ba4180a551ca688e4af, type: 3}
m_PrefabInstance: {fileID: 2551460648612136281}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 2551460648612136281}
m_PrefabAsset: {fileID: 0}
--- !u!1 &3197879114731797047 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 1083606013360258926, guid: 9595d49816059ba4180a551ca688e4af, type: 3}
m_PrefabInstance: {fileID: 2551460648612136281}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &2552637127853507512

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: f5529f8d35a95534f8758203ddd51329, type: 3}
--- !u!1 &3056500194282619590 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 650232806790545790, guid: f5529f8d35a95534f8758203ddd51329, type: 3}
m_PrefabInstance: {fileID: 2552637127853507512}
m_PrefabAsset: {fileID: 0}
--- !u!1 &3056500194282619590 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 650232806790545790, guid: f5529f8d35a95534f8758203ddd51329, type: 3}
m_PrefabInstance: {fileID: 2552637127853507512}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &2559759718550300145
PrefabInstance:
m_ObjectHideFlags: 0

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 911190f1bbf61c34294081b77f6680f7, type: 3}
--- !u!4 &4782661555799005955 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 7032222739674234600, guid: 911190f1bbf61c34294081b77f6680f7, type: 3}
m_PrefabInstance: {fileID: 2578332822568035819}
m_PrefabAsset: {fileID: 0}
--- !u!4 &4782661555799005955 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 7032222739674234600, guid: 911190f1bbf61c34294081b77f6680f7, type: 3}
m_PrefabInstance: {fileID: 2578332822568035819}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &2676281989898900403
PrefabInstance:
m_ObjectHideFlags: 0

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 0620affdd221fee4c920d5162afcf52a, type: 3}
--- !u!1 &2664582909841472669 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 201844337772534149, guid: 0620affdd221fee4c920d5162afcf52a, type: 3}
m_PrefabInstance: {fileID: 2753837178931275032}
m_PrefabAsset: {fileID: 0}
--- !u!1 &2664582909841472669 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 201844337772534149, guid: 0620affdd221fee4c920d5162afcf52a, type: 3}
m_PrefabInstance: {fileID: 2753837178931275032}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &2772185692000239163
PrefabInstance:
m_ObjectHideFlags: 0

objectReference: {fileID: 8495415076674091646}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: e68d12b3ef24a434b9cbca2853581437, type: 3}
--- !u!1 &3309616343003613770 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 414692744000754765, guid: e68d12b3ef24a434b9cbca2853581437, type: 3}
m_PrefabInstance: {fileID: 2895628046655954439}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 2895628046655954439}
m_PrefabAsset: {fileID: 0}
--- !u!1 &3309616343003613770 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 414692744000754765, guid: e68d12b3ef24a434b9cbca2853581437, type: 3}
m_PrefabInstance: {fileID: 2895628046655954439}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &3079460002134734451

objectReference: {fileID: 9197077968316907432}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 5381f310736a7ee4299e4357a80bed5e, type: 3}
--- !u!4 &3229698751595907325 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 463379732019691150, guid: 5381f310736a7ee4299e4357a80bed5e, type: 3}
m_PrefabInstance: {fileID: 3079460002134734451}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 3079460002134734451}
m_PrefabAsset: {fileID: 0}
--- !u!4 &3229698751595907325 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 463379732019691150, guid: 5381f310736a7ee4299e4357a80bed5e, type: 3}
m_PrefabInstance: {fileID: 3079460002134734451}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &3133333727875434760

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: a1ca400ab2423004b882142da178f6ed, type: 3}
--- !u!1 &8805814283378961913 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 6153388255771542989, guid: a1ca400ab2423004b882142da178f6ed, type: 3}
m_PrefabInstance: {fileID: 3409703666122221620}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 3409703666122221620}
m_PrefabAsset: {fileID: 0}
--- !u!1 &8805814283378961913 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 6153388255771542989, guid: a1ca400ab2423004b882142da178f6ed, type: 3}
m_PrefabInstance: {fileID: 3409703666122221620}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &3777335569244496007

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, type: 3}
--- !u!1 &4547385850965649145 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 824235669658650238, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, type: 3}
m_PrefabInstance: {fileID: 3777335569244496007}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 3777335569244496007}
m_PrefabAsset: {fileID: 0}
--- !u!1 &4547385850965649145 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 824235669658650238, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, type: 3}
m_PrefabInstance: {fileID: 3777335569244496007}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &3837232923765061116

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 452b37393fff45a4190db85c07db5091, type: 3}
--- !u!1 &1382085230529991733 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 3126280509331847267, guid: 452b37393fff45a4190db85c07db5091, type: 3}
m_PrefabInstance: {fileID: 4056864475129474134}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 4056864475129474134}
m_PrefabAsset: {fileID: 0}
--- !u!1 &1382085230529991733 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 3126280509331847267, guid: 452b37393fff45a4190db85c07db5091, type: 3}
m_PrefabInstance: {fileID: 4056864475129474134}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &4124759619680181128

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: f20e664f7ca7fe34f95a1ff9da56a56e, type: 3}
--- !u!4 &6169262293128850976 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 7933657354263531807, guid: f20e664f7ca7fe34f95a1ff9da56a56e, type: 3}
m_PrefabInstance: {fileID: 4289568740189880127}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 4289568740189880127}
m_PrefabAsset: {fileID: 0}
--- !u!4 &6169262293128850976 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 7933657354263531807, guid: f20e664f7ca7fe34f95a1ff9da56a56e, type: 3}
m_PrefabInstance: {fileID: 4289568740189880127}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &4592565681611793841

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 703f3506e74a649469495ada5e8e464f, type: 3}
--- !u!4 &534770833101321263 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 4645868414553896214, guid: 703f3506e74a649469495ada5e8e464f, type: 3}
m_PrefabInstance: {fileID: 5121317938826002745}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 5121317938826002745}
m_PrefabAsset: {fileID: 0}
--- !u!4 &534770833101321263 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 4645868414553896214, guid: 703f3506e74a649469495ada5e8e464f, type: 3}
m_PrefabInstance: {fileID: 5121317938826002745}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &5171542828428279513

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 262c3bed68fd4cd4992491e302590de6, type: 3}
--- !u!4 &7338646148094174711 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 2458148490952219438, guid: 262c3bed68fd4cd4992491e302590de6, type: 3}
m_PrefabInstance: {fileID: 5171542828428279513}
m_PrefabAsset: {fileID: 0}
--- !u!4 &7338646148094174711 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 2458148490952219438, guid: 262c3bed68fd4cd4992491e302590de6, type: 3}
m_PrefabInstance: {fileID: 5171542828428279513}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &5199179225619728242
PrefabInstance:
m_ObjectHideFlags: 0

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 44230123ba61ad348a74bf921fb43f55, type: 3}
--- !u!1 &3208043950912929606 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 7251484847085385780, guid: 44230123ba61ad348a74bf921fb43f55, type: 3}
m_PrefabInstance: {fileID: 5199179225619728242}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 5199179225619728242}
m_PrefabAsset: {fileID: 0}
--- !u!1 &3208043950912929606 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 7251484847085385780, guid: 44230123ba61ad348a74bf921fb43f55, type: 3}
m_PrefabInstance: {fileID: 5199179225619728242}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &5341351849974814149

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 47674e55d0a657e449bda89ec0284444, type: 3}
--- !u!4 &6034350816615062860 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 1845940580957423753, guid: 47674e55d0a657e449bda89ec0284444, type: 3}
m_PrefabInstance: {fileID: 5341351849974814149}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 5341351849974814149}
m_PrefabAsset: {fileID: 0}
--- !u!4 &6034350816615062860 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 1845940580957423753, guid: 47674e55d0a657e449bda89ec0284444, type: 3}
m_PrefabInstance: {fileID: 5341351849974814149}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &5352777419765239849

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 0d6b4bf1ad026a348b7ca6cd309b4664, type: 3}
--- !u!1 &6699397568312395898 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 1362178114493462303, guid: 0d6b4bf1ad026a348b7ca6cd309b4664, type: 3}
m_PrefabInstance: {fileID: 5629050180898783077}
m_PrefabAsset: {fileID: 0}
--- !u!1 &6699397568312395898 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 1362178114493462303, guid: 0d6b4bf1ad026a348b7ca6cd309b4664, type: 3}
m_PrefabInstance: {fileID: 5629050180898783077}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &5735955324776762991
PrefabInstance:
m_ObjectHideFlags: 0

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 68025b7ccf083b74d874690d0f00dc19, type: 3}
--- !u!1 &3315647717772617126 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 9215068552564892868, guid: 68025b7ccf083b74d874690d0f00dc19, type: 3}
m_PrefabInstance: {fileID: 5900010241816985954}
m_PrefabAsset: {fileID: 0}
--- !u!1 &3315647717772617126 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 9215068552564892868, guid: 68025b7ccf083b74d874690d0f00dc19, type: 3}
m_PrefabInstance: {fileID: 5900010241816985954}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &6024978955715288471
PrefabInstance:
m_ObjectHideFlags: 0

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 31e2d218bdea6484aa2444529536bd4f, type: 3}
--- !u!4 &4039519497099478242 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 7779303979955980379, guid: 31e2d218bdea6484aa2444529536bd4f, type: 3}
m_PrefabInstance: {fileID: 6051397901256363193}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 6051397901256363193}
m_PrefabAsset: {fileID: 0}
--- !u!4 &4039519497099478242 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 7779303979955980379, guid: 31e2d218bdea6484aa2444529536bd4f, type: 3}
m_PrefabInstance: {fileID: 6051397901256363193}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &6121439877142640174

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 9f5862b9eb9fdda49af566eb54c4c619, type: 3}
--- !u!1 &9050837806502146063 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 2983828450634303009, guid: 9f5862b9eb9fdda49af566eb54c4c619, type: 3}
m_PrefabInstance: {fileID: 6121439877142640174}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 6121439877142640174}
m_PrefabAsset: {fileID: 0}
--- !u!1 &9050837806502146063 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 2983828450634303009, guid: 9f5862b9eb9fdda49af566eb54c4c619, type: 3}
m_PrefabInstance: {fileID: 6121439877142640174}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &6222368100819943145

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 9b19e335c012acd4991a3b07812d4716, type: 3}
--- !u!1 &6121441642964187457 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 231439608630822926, guid: 9b19e335c012acd4991a3b07812d4716, type: 3}
m_PrefabInstance: {fileID: 6324610393801797967}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 6324610393801797967}
m_PrefabAsset: {fileID: 0}
--- !u!1 &6121441642964187457 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 231439608630822926, guid: 9b19e335c012acd4991a3b07812d4716, type: 3}
m_PrefabInstance: {fileID: 6324610393801797967}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &6325765763770940777

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 2658078643132ad4e948769858149171, type: 3}
--- !u!4 &8861105547073997969 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 2473108818245498025, guid: 2658078643132ad4e948769858149171, type: 3}
m_PrefabInstance: {fileID: 6389138726017988664}
m_PrefabAsset: {fileID: 0}
--- !u!4 &8861105547073997969 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 2473108818245498025, guid: 2658078643132ad4e948769858149171, type: 3}
m_PrefabInstance: {fileID: 6389138726017988664}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &6420593949926805718
PrefabInstance:
m_ObjectHideFlags: 0

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 702056046fec9a242b2aca3bdcf500bd, type: 3}
--- !u!1 &8534728331211606325 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 3417099743748970979, guid: 702056046fec9a242b2aca3bdcf500bd, type: 3}
m_PrefabInstance: {fileID: 6420593949926805718}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 6420593949926805718}
m_PrefabAsset: {fileID: 0}
--- !u!1 &8534728331211606325 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 3417099743748970979, guid: 702056046fec9a242b2aca3bdcf500bd, type: 3}
m_PrefabInstance: {fileID: 6420593949926805718}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &6505776418882712968

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: d46c92b0e8e59fd4588327d16d538b8f, type: 3}
--- !u!1 &7841305284959672188 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 3934106151804199668, guid: d46c92b0e8e59fd4588327d16d538b8f, type: 3}
m_PrefabInstance: {fileID: 6505776418882712968}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 6505776418882712968}
m_PrefabAsset: {fileID: 0}
--- !u!1 &7841305284959672188 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 3934106151804199668, guid: d46c92b0e8e59fd4588327d16d538b8f, type: 3}
m_PrefabInstance: {fileID: 6505776418882712968}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &6564140219370697799

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: de20aa000868a91418174947dcd6fd15, type: 3}
--- !u!1 &7583954262385114442 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 3967914386260491426, guid: de20aa000868a91418174947dcd6fd15, type: 3}
m_PrefabInstance: {fileID: 6786716989100507624}
m_PrefabAsset: {fileID: 0}
--- !u!1 &7583954262385114442 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 3967914386260491426, guid: de20aa000868a91418174947dcd6fd15, type: 3}
m_PrefabInstance: {fileID: 6786716989100507624}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &6839588286196653432
PrefabInstance:
m_ObjectHideFlags: 0

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: f0213ce5798f369469a216cc5724766f, type: 3}
--- !u!1 &7705283312386798936 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 684809618467943946, guid: f0213ce5798f369469a216cc5724766f, type: 3}
m_PrefabInstance: {fileID: 7164739790737376082}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 7164739790737376082}
m_PrefabAsset: {fileID: 0}
--- !u!1 &7705283312386798936 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 684809618467943946, guid: f0213ce5798f369469a216cc5724766f, type: 3}
m_PrefabInstance: {fileID: 7164739790737376082}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &7226082320440086571

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 962df0864142a254eaec4d4cb2785aa0, type: 3}
--- !u!4 &8021949320386496443 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 800378435743324048, guid: 962df0864142a254eaec4d4cb2785aa0, type: 3}
m_PrefabInstance: {fileID: 7226082320440086571}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 7226082320440086571}
m_PrefabAsset: {fileID: 0}
--- !u!4 &8021949320386496443 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 800378435743324048, guid: 962df0864142a254eaec4d4cb2785aa0, type: 3}
m_PrefabInstance: {fileID: 7226082320440086571}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &7247765245552551133

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 3e983bd9d10c8114b8c111165ff2d489, type: 3}
--- !u!4 &4547385851144630406 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 6020426494497837075, guid: 3e983bd9d10c8114b8c111165ff2d489, type: 3}
m_PrefabInstance: {fileID: 7824818163089416341}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 7824818163089416341}
m_PrefabAsset: {fileID: 0}
--- !u!4 &4547385851144630406 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 6020426494497837075, guid: 3e983bd9d10c8114b8c111165ff2d489, type: 3}
m_PrefabInstance: {fileID: 7824818163089416341}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &8109979917195724144

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 2226a66895e83f14e9e85c0940a35d51, type: 3}
--- !u!1 &6715786524771158821 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 3296401311353261653, guid: 2226a66895e83f14e9e85c0940a35d51, type: 3}
m_PrefabInstance: {fileID: 8109979917195724144}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 8109979917195724144}
m_PrefabAsset: {fileID: 0}
--- !u!1 &6715786524771158821 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 3296401311353261653, guid: 2226a66895e83f14e9e85c0940a35d51, type: 3}
m_PrefabInstance: {fileID: 8109979917195724144}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &8285655248222059531

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 9e4d9d7db79d480478283614b07db589, type: 3}
--- !u!4 &7166287806086859235 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 1613455296145824198, guid: 9e4d9d7db79d480478283614b07db589, type: 3}
m_PrefabInstance: {fileID: 8437460648559628325}
m_PrefabAsset: {fileID: 0}
--- !u!4 &7166287806086859235 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 1613455296145824198, guid: 9e4d9d7db79d480478283614b07db589, type: 3}
m_PrefabInstance: {fileID: 8437460648559628325}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &8619195299117345507
PrefabInstance:
m_ObjectHideFlags: 0

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 47609086cade114459272378dbd54c84, type: 3}
--- !u!4 &3093908146546913644 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 6733529486627085199, guid: 47609086cade114459272378dbd54c84, type: 3}
m_PrefabInstance: {fileID: 8619195299117345507}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 8619195299117345507}
m_PrefabAsset: {fileID: 0}
--- !u!4 &3093908146546913644 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 6733529486627085199, guid: 47609086cade114459272378dbd54c84, type: 3}
m_PrefabInstance: {fileID: 8619195299117345507}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &8760278354213475920

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 8f204097121b14e43bd73fc671797fb9, type: 3}
--- !u!4 &2995822706927088220 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 5765045536348447756, guid: 8f204097121b14e43bd73fc671797fb9, type: 3}
m_PrefabInstance: {fileID: 8760278354213475920}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 8760278354213475920}
m_PrefabAsset: {fileID: 0}
--- !u!4 &2995822706927088220 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 5765045536348447756, guid: 8f204097121b14e43bd73fc671797fb9, type: 3}
m_PrefabInstance: {fileID: 8760278354213475920}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &8872525669382660264

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 3ac8975790f363c449a5811b44f2c2dd, type: 3}
--- !u!1 &2767387628863870913 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 6721120468174862185, guid: 3ac8975790f363c449a5811b44f2c2dd, type: 3}
m_PrefabInstance: {fileID: 8872525669382660264}
m_PrefabAsset: {fileID: 0}
--- !u!1 &2767387628863870913 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 6721120468174862185, guid: 3ac8975790f363c449a5811b44f2c2dd, type: 3}
m_PrefabInstance: {fileID: 8872525669382660264}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &8890895197321617453
PrefabInstance:
m_ObjectHideFlags: 0

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 7d1ba64bc16129d4bb75541d7c49ec05, type: 3}
--- !u!4 &3698569048365922069 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 5628721195025659427, guid: 7d1ba64bc16129d4bb75541d7c49ec05, type: 3}
m_PrefabInstance: {fileID: 9029375231347491126}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 9029375231347491126}
m_PrefabAsset: {fileID: 0}
--- !u!4 &3698569048365922069 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 5628721195025659427, guid: 7d1ba64bc16129d4bb75541d7c49ec05, type: 3}
m_PrefabInstance: {fileID: 9029375231347491126}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &9036259825240657000

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 2ac46e815db5a5a49b0df4a3acc67549, type: 3}
--- !u!1 &1942619982609780376 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 7463217729639695088, guid: 2ac46e815db5a5a49b0df4a3acc67549, type: 3}
m_PrefabInstance: {fileID: 9036259825240657000}
m_PrefabAsset: {fileID: 0}
m_PrefabInstance: {fileID: 9036259825240657000}
m_PrefabAsset: {fileID: 0}
--- !u!1 &1942619982609780376 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 7463217729639695088, guid: 2ac46e815db5a5a49b0df4a3acc67549, type: 3}
m_PrefabInstance: {fileID: 9036259825240657000}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &9040556202868015762

objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 4e52a93e5e7209448906906efbaedad1, type: 3}
--- !u!4 &5921472453351408518 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 3281773030520282443, guid: 4e52a93e5e7209448906906efbaedad1, type: 3}
m_PrefabInstance: {fileID: 9198172320007184077}
m_PrefabAsset: {fileID: 0}
--- !u!4 &5921472453351408518 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 3281773030520282443, guid: 4e52a93e5e7209448906906efbaedad1, type: 3}
m_PrefabInstance: {fileID: 9198172320007184077}
m_PrefabAsset: {fileID: 0}

13
Assets/BossRoom/Prefabs/Enemy.prefab


- component: {fileID: -7347463593668903068}
- component: {fileID: -2661490869309078486}
- component: {fileID: -3025025970778375211}
- component: {fileID: -4759928719674634496}
m_Layer: 6
m_Name: Enemy
m_TagString: Untagged

m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 797d92969c575574d868e069887e8486, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!114 &-4759928719674634496
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4340979889802297118}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ae9a06a3585027044ababe9f9cb7b8e6, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1001 &1692449221005613434

13
Assets/BossRoom/Prefabs/Imp.prefab


- component: {fileID: 1241790024788381460}
- component: {fileID: 5774553290016453722}
- component: {fileID: 6717078508665899941}
- component: {fileID: 3887528011308980450}
m_Layer: 6
m_Name: Imp
m_TagString: Untagged

m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 797d92969c575574d868e069887e8486, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!114 &3887528011308980450
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3966945101575016302}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ae9a06a3585027044ababe9f9cb7b8e6, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &4344372015230948628

2
Assets/BossRoom/Material/Characters/Enemy_Eyes_sheet.mat


- _DetailNormalMapScale: 1
- _DstBlend: 0
- _GlossMapScale: 1
- _Glossiness: 0
- _Glossiness: 1
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 1

9
Assets/BossRoom/Material/Characters/Enemy_Mouth_sheet.mat


m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Enemy_Mouth_sheet
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_Shader: {fileID: 10751, guid: 0000000000000000f000000000000000, type: 0}
m_CustomRenderQueue: 2450
stringTagMap:
RenderType: TransparentCutout
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3

- _DetailNormalMapScale: 1
- _DstBlend: 0
- _GlossMapScale: 1
- _Glossiness: 0
- _Glossiness: 1
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 1

3
Assets/BossRoom/Material/Characters/Hero_Eyes_sheet.mat


- _DetailNormalMapScale: 1
- _DstBlend: 0
- _GlossMapScale: 1
- _Glossiness: 0
- _Glossiness: 1
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 1

m_Colors:
- _Color: {r: 0.5, g: 0.5, b: 0.5, a: 1}
- _EmissionColor: {r: 0.27450982, g: 0.27450982, b: 0.27450982, a: 1}
m_BuildTextureStacks: []

8
Assets/BossRoom/Material/Characters/Hero_Mouth_sheet.mat


m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Hero_Mouth_sheet
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_Shader: {fileID: 10751, guid: 0000000000000000f000000000000000, type: 0}
m_CustomRenderQueue: 2450
stringTagMap:
RenderType: TransparentCutout
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3

- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _RimColor: {r: 1, g: 1, b: 1, a: 1}
- _SpecularColor: {r: 0.9, g: 0.9, b: 0.9, a: 1}
m_BuildTextureStacks: []

9
Assets/BossRoom/Material/Characters/ToonTest/Hair_Archer_Boy.mat


- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimAmount: 0.771
- _RimThreshold: 0.257
- _RimThreshold: 0
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1

- _AmbientColor: {r: 0.5377358, g: 0.5250534, b: 0.5250534, a: 1}
- _Color: {r: 0.49056602, g: 0.49056602, b: 0.49056602, a: 1}
- _AmbientColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1}
- _SpecularColor: {r: 1.8039216, g: 1.8039216, b: 1.8039216, a: 1}
- _SpecularColor: {r: 3.6078432, g: 3.6078432, b: 3.6078432, a: 1}
m_BuildTextureStacks: []

9
Assets/BossRoom/Material/Characters/ToonTest/Hair_Archer_Girl.mat


- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimAmount: 0.32
- _RimAmount: 0.778
- _RimThreshold: 0
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1

m_Colors:
- _AmbientColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.49056602, g: 0.49056602, b: 0.49056602, a: 1}
- _Color: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1}
- _RimColor: {r: 1, g: 1, b: 1, a: 1}
- _SpecularColor: {r: 1.8039216, g: 1.8039216, b: 1.8039216, a: 1}
- _RimColor: {r: 4, g: 4, b: 4, a: 1}
- _SpecularColor: {r: 7.2156863, g: 7.2156863, b: 7.2156863, a: 1}
m_BuildTextureStacks: []

13
Assets/BossRoom/Material/Characters/ToonTest/Hair_Mage_Boy.mat


- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimAmount: 0.771
- _RimThreshold: 0.257
- _RimAmount: 0.778
- _RimThreshold: 0
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1

- _AmbientColor: {r: 0.6886792, g: 0.6886792, b: 0.6886792, a: 1}
- _Color: {r: 0.49056602, g: 0.49056602, b: 0.49056602, a: 1}
- _AmbientColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1}
- _RimColor: {r: 1, g: 1, b: 1, a: 1}
- _SpecularColor: {r: 1.8039216, g: 1.8039216, b: 1.8039216, a: 1}
- _RimColor: {r: 4, g: 4, b: 4, a: 1}
- _SpecularColor: {r: 7.2156863, g: 7.2156863, b: 7.2156863, a: 1}
m_BuildTextureStacks: []

11
Assets/BossRoom/Material/Characters/ToonTest/Hair_Mage_Girl.mat


- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimAmount: 0.32
- _RimAmount: 0.778
- _RimThreshold: 0
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1

m_Colors:
- _AmbientColor: {r: 0.5943396, g: 0.5943396, b: 0.5943396, a: 1}
- _Color: {r: 0.49056602, g: 0.49056602, b: 0.49056602, a: 1}
- _AmbientColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1}
- _RimColor: {r: 1, g: 1, b: 1, a: 1}
- _SpecularColor: {r: 1.8039216, g: 1.8039216, b: 1.8039216, a: 1}
- _RimColor: {r: 4, g: 4, b: 4, a: 1}
- _SpecularColor: {r: 7.2156863, g: 7.2156863, b: 7.2156863, a: 1}
m_BuildTextureStacks: []

13
Assets/BossRoom/Material/Characters/ToonTest/Hair_Rogue_Boy.mat


- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimAmount: 0.771
- _RimThreshold: 0.257
- _RimAmount: 0.778
- _RimThreshold: 0
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1

- _AmbientColor: {r: 0.509434, g: 0.509434, b: 0.509434, a: 1}
- _Color: {r: 0.49056602, g: 0.49056602, b: 0.49056602, a: 1}
- _AmbientColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1}
- _RimColor: {r: 1, g: 1, b: 1, a: 1}
- _SpecularColor: {r: 1.8039216, g: 1.8039216, b: 1.8039216, a: 1}
- _RimColor: {r: 4, g: 4, b: 4, a: 1}
- _SpecularColor: {r: 7.2156863, g: 7.2156863, b: 7.2156863, a: 1}
m_BuildTextureStacks: []

9
Assets/BossRoom/Material/Characters/ToonTest/Hair_Rogue_Girl.mat


- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimAmount: 0.32
- _RimAmount: 0.778
- _RimThreshold: 0
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1

m_Colors:
- _AmbientColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.49056602, g: 0.49056602, b: 0.49056602, a: 1}
- _Color: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1}
- _RimColor: {r: 1, g: 1, b: 1, a: 1}
- _SpecularColor: {r: 1.8039216, g: 1.8039216, b: 1.8039216, a: 1}
- _RimColor: {r: 4, g: 4, b: 4, a: 1}
- _SpecularColor: {r: 7.2156863, g: 7.2156863, b: 7.2156863, a: 1}
m_BuildTextureStacks: []

11
Assets/BossRoom/Material/Characters/ToonTest/Hair_Tank_Boy.mat


- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimAmount: 0.771
- _RimThreshold: 0.257
- _RimAmount: 0.778
- _RimThreshold: 0
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1

- _AmbientColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.49056602, g: 0.49056602, b: 0.49056602, a: 1}
- _Color: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1}
- _RimColor: {r: 1, g: 1, b: 1, a: 1}
- _SpecularColor: {r: 1.8039216, g: 1.8039216, b: 1.8039216, a: 1}
- _RimColor: {r: 4, g: 4, b: 4, a: 1}
- _SpecularColor: {r: 7.2156863, g: 7.2156863, b: 7.2156863, a: 1}
m_BuildTextureStacks: []

9
Assets/BossRoom/Material/Characters/ToonTest/Hair_Tank_Girl.mat


- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimAmount: 0.32
- _RimAmount: 0.588
- _RimThreshold: 0
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1

m_Colors:
- _AmbientColor: {r: 0.4528302, g: 0.4528302, b: 0.4528302, a: 1}
- _Color: {r: 0.49056602, g: 0.49056602, b: 0.49056602, a: 1}
- _AmbientColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1}
- _RimColor: {r: 1, g: 1, b: 1, a: 1}
- _RimColor: {r: 3.9999995, g: 3.9999995, b: 3.9999995, a: 1}
m_BuildTextureStacks: []

11
Assets/BossRoom/Material/Characters/ToonTest/Head_Archer_Boy.mat


- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimAmount: 0.667
- _RimThreshold: 0.23
- _RimThreshold: 0
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1

- _AmbientColor: {r: 0.4528302, g: 0.4528302, b: 0.4528302, a: 1}
- _Color: {r: 0.7169812, g: 0.7169812, b: 0.7169812, a: 1}
- _AmbientColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1}
- _RimColor: {r: 0.4245283, g: 0.4245283, b: 0.4245283, a: 1}
- _SpecularColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
- _RimColor: {r: 1.6941177, g: 1.6941177, b: 1.6941177, a: 1}
- _SpecularColor: {r: 2.0078433, g: 2.0078433, b: 2.0078433, a: 1}
m_BuildTextureStacks: []

11
Assets/BossRoom/Material/Characters/ToonTest/Head_Archer_Girl.mat


- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimAmount: 0.667
- _RimThreshold: 0.23
- _RimThreshold: 0
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1

- _AmbientColor: {r: 0.9056604, g: 0.9056604, b: 0.9056604, a: 1}
- _Color: {r: 0.7169812, g: 0.7169812, b: 0.7169812, a: 1}
- _AmbientColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1}
- _RimColor: {r: 0.4245283, g: 0.4245283, b: 0.4245283, a: 1}
- _SpecularColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
- _RimColor: {r: 3.3882349, g: 3.3882349, b: 3.3882349, a: 1}
- _SpecularColor: {r: 4.0156865, g: 4.0156865, b: 4.0156865, a: 1}
m_BuildTextureStacks: []

10
Assets/BossRoom/Material/Characters/ToonTest/Head_Boss.mat


- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimAmount: 0.667
- _RimThreshold: 0.23
- _RimThreshold: 0
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1

- _AmbientColor: {r: 0.4528302, g: 0.4528302, b: 0.4528302, a: 1}
- _Color: {r: 0.5, g: 0.5, b: 0.5, a: 1}
- _AmbientColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1}
- _RimColor: {r: 0.4245283, g: 0.4245283, b: 0.4245283, a: 1}
- _SpecularColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
- _RimColor: {r: 1.6941177, g: 1.6941177, b: 1.6941177, a: 1}
- _SpecularColor: {r: 4.0156865, g: 4.0156865, b: 4.0156865, a: 1}
m_BuildTextureStacks: []

10
Assets/BossRoom/Material/Characters/ToonTest/Head_Imp.mat


- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimAmount: 0.667
- _RimThreshold: 0.23
- _RimThreshold: 0
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1

- _AmbientColor: {r: 0.4528302, g: 0.4528302, b: 0.4528302, a: 1}
- _Color: {r: 0.5, g: 0.5, b: 0.5, a: 1}
- _AmbientColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1}
- _RimColor: {r: 0.4245283, g: 0.4245283, b: 0.4245283, a: 1}
- _SpecularColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
- _RimColor: {r: 1.6941177, g: 1.6941177, b: 1.6941177, a: 1}
- _SpecularColor: {r: 4.0156865, g: 4.0156865, b: 4.0156865, a: 1}
m_BuildTextureStacks: []

11
Assets/BossRoom/Material/Characters/ToonTest/Head_Mage_Boy.mat


- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimAmount: 0.667
- _RimThreshold: 0.23
- _RimThreshold: 0
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1

- _AmbientColor: {r: 0.6603774, g: 0.6603774, b: 0.6603774, a: 1}
- _Color: {r: 0.7169812, g: 0.7169812, b: 0.7169812, a: 1}
- _AmbientColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1}
- _RimColor: {r: 0.4245283, g: 0.4245283, b: 0.4245283, a: 1}
- _SpecularColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
- _RimColor: {r: 6.7764707, g: 6.7764707, b: 6.7764707, a: 1}
- _SpecularColor: {r: 4.0156865, g: 4.0156865, b: 4.0156865, a: 1}
m_BuildTextureStacks: []

11
Assets/BossRoom/Material/Characters/ToonTest/Head_Mage_Girl.mat


- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimAmount: 0.667
- _RimThreshold: 0.23
- _RimThreshold: 0
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1

- _AmbientColor: {r: 0.5188679, g: 0.5188679, b: 0.5188679, a: 1}
- _Color: {r: 0.7169812, g: 0.7169812, b: 0.7169812, a: 1}
- _AmbientColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1}
- _RimColor: {r: 0.4245283, g: 0.4245283, b: 0.4245283, a: 1}
- _SpecularColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
- _RimColor: {r: 1.6941177, g: 1.6941177, b: 1.6941177, a: 1}
- _SpecularColor: {r: 2.0078433, g: 2.0078433, b: 2.0078433, a: 1}
m_BuildTextureStacks: []

11
Assets/BossRoom/Material/Characters/ToonTest/Head_Rogue_Boy.mat


- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimAmount: 0.667
- _RimThreshold: 0.23
- _RimThreshold: 0
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1

- _AmbientColor: {r: 0.6981132, g: 0.6981132, b: 0.6981132, a: 1}
- _Color: {r: 0.7169812, g: 0.7169812, b: 0.7169812, a: 1}
- _AmbientColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1}
- _RimColor: {r: 0.4245283, g: 0.4245283, b: 0.4245283, a: 1}
- _SpecularColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
- _RimColor: {r: 3.3882353, g: 3.3882353, b: 3.3882353, a: 1}
- _SpecularColor: {r: 2.0078433, g: 2.0078433, b: 2.0078433, a: 1}
m_BuildTextureStacks: []

11
Assets/BossRoom/Material/Characters/ToonTest/Head_Rogue_Girl.mat


- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimAmount: 0.667
- _RimThreshold: 0.23
- _RimThreshold: 0
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1

- _AmbientColor: {r: 0.5754717, g: 0.5754717, b: 0.5754717, a: 1}
- _Color: {r: 0.7169812, g: 0.7169812, b: 0.7169812, a: 1}
- _AmbientColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1}
- _RimColor: {r: 0.4245283, g: 0.4245283, b: 0.4245283, a: 1}
- _SpecularColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
- _RimColor: {r: 3.3882349, g: 3.3882349, b: 3.3882349, a: 1}
- _SpecularColor: {r: 2.6806288, g: 2.6806288, b: 2.6806288, a: 1}
m_BuildTextureStacks: []

11
Assets/BossRoom/Material/Characters/ToonTest/Head_Tank_Boy.mat


- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimAmount: 0.667
- _RimThreshold: 0.23
- _RimThreshold: 0
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1

- _AmbientColor: {r: 0.6226415, g: 0.6226415, b: 0.6226415, a: 1}
- _Color: {r: 0.7169812, g: 0.7169812, b: 0.7169812, a: 1}
- _AmbientColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1}
- _RimColor: {r: 0.4245283, g: 0.4245283, b: 0.4245283, a: 1}
- _SpecularColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
- _RimColor: {r: 3.3882349, g: 3.3882349, b: 3.3882349, a: 1}
- _SpecularColor: {r: 2.0078433, g: 2.0078433, b: 2.0078433, a: 1}
m_BuildTextureStacks: []

13
Assets/BossRoom/Material/Characters/ToonTest/Head_Tank_Girl.mat


- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimAmount: 0.667
- _RimThreshold: 0.23
- _RimAmount: 0.674
- _RimThreshold: 0
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1

- _AmbientColor: {r: 0.6509434, g: 0.6509434, b: 0.6509434, a: 1}
- _Color: {r: 0.7169812, g: 0.7169812, b: 0.7169812, a: 1}
- _AmbientColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1}
- _RimColor: {r: 0.4245283, g: 0.4245283, b: 0.4245283, a: 1}
- _SpecularColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
- _RimColor: {r: 3.3882349, g: 3.3882349, b: 3.3882349, a: 1}
- _SpecularColor: {r: 2.0078435, g: 2.0078435, b: 2.0078435, a: 1}
m_BuildTextureStacks: []

13
Assets/BossRoom/Material/Characters/ToonTest/Torso_Archer.mat


- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimAmount: 0.162
- _RimThreshold: 0.05
- _RimAmount: 0.366
- _RimThreshold: 0
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1

- _AmbientColor: {r: 0.1254902, g: 0.1254902, b: 0.1254902, a: 1}
- _Color: {r: 0.21698111, g: 0.21698111, b: 0.21698111, a: 1}
- _AmbientColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1}
- _RimColor: {r: 1, g: 1, b: 1, a: 1}
- _SpecularColor: {r: 3.9999995, g: 3.8952875, b: 3.8952875, a: 1}
- _RimColor: {r: 3.9999995, g: 3.9999995, b: 3.9999995, a: 1}
- _SpecularColor: {r: 3.9999995, g: 3.9999995, b: 3.9999995, a: 1}
m_BuildTextureStacks: []

9
Assets/BossRoom/Material/Characters/ToonTest/Torso_Boss.mat


- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _AmbientColor: {r: 0.16981131, g: 0.16981131, b: 0.16981131, a: 1}
- _Color: {r: 0.20754719, g: 0.20754719, b: 0.20754719, a: 1}
- _AmbientColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1}
- _RimColor: {r: 1, g: 1, b: 1, a: 1}
- _SpecularColor: {r: 3.137255, g: 3.137255, b: 3.137255, a: 1}
- _RimColor: {r: 7.999999, g: 7.999999, b: 7.999999, a: 1}
- _SpecularColor: {r: 1, g: 1, b: 1, a: 1}
m_BuildTextureStacks: []

12
Assets/BossRoom/Material/Characters/ToonTest/Torso_Imp.mat


- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimAmount: 0.208
- _RimThreshold: 0.595
- _RimAmount: 0.366
- _RimThreshold: 0
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1

- _AmbientColor: {r: 0.16981131, g: 0.16981131, b: 0.16981131, a: 1}
- _Color: {r: 0.20754719, g: 0.20754719, b: 0.20754719, a: 1}
- _AmbientColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1}
- _RimColor: {r: 1, g: 1, b: 1, a: 1}
- _SpecularColor: {r: 3.137255, g: 3.137255, b: 3.137255, a: 1}
- _RimColor: {r: 3.9999995, g: 3.9999995, b: 3.9999995, a: 1}
- _SpecularColor: {r: 3.9999995, g: 3.9999995, b: 3.9999995, a: 1}
m_BuildTextureStacks: []

11
Assets/BossRoom/Material/Characters/ToonTest/Torso_Mage_Boy.mat


- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimAmount: 0.675
- _RimThreshold: 0.05
- _RimAmount: 0.366
- _RimThreshold: 0
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1

- _AmbientColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.21698111, g: 0.21698111, b: 0.21698111, a: 1}
- _Color: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1}
- _RimColor: {r: 1, g: 1, b: 1, a: 1}
- _SpecularColor: {r: 3.9999995, g: 3.8952875, b: 3.8952875, a: 1}
- _RimColor: {r: 3.9999995, g: 3.9999995, b: 3.9999995, a: 1}
- _SpecularColor: {r: 3.9999995, g: 3.9999995, b: 3.9999995, a: 1}
m_BuildTextureStacks: []

11
Assets/BossRoom/Material/Characters/ToonTest/Torso_Mage_Girl.mat


- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimAmount: 0.675
- _RimThreshold: 0.05
- _RimAmount: 0.366
- _RimThreshold: 0
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1

- _AmbientColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.21698111, g: 0.21698111, b: 0.21698111, a: 1}
- _Color: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1}
- _RimColor: {r: 1, g: 1, b: 1, a: 1}
- _SpecularColor: {r: 3.9999995, g: 3.8952875, b: 3.8952875, a: 1}
- _RimColor: {r: 3.9999995, g: 3.9999995, b: 3.9999995, a: 1}
- _SpecularColor: {r: 3.9999995, g: 3.9999995, b: 3.9999995, a: 1}
m_BuildTextureStacks: []

11
Assets/BossRoom/Material/Characters/ToonTest/Torso_Rogue.mat


- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimAmount: 0.202
- _RimThreshold: 0.05
- _RimAmount: 0.366
- _RimThreshold: 0
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1

- _AmbientColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.21698111, g: 0.21698111, b: 0.21698111, a: 1}
- _Color: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1}
- _RimColor: {r: 1, g: 1, b: 1, a: 1}
- _SpecularColor: {r: 3.9999995, g: 3.8952875, b: 3.8952875, a: 1}
- _RimColor: {r: 3.9999995, g: 3.9999995, b: 3.9999995, a: 1}
- _SpecularColor: {r: 3.9999995, g: 3.9999995, b: 3.9999995, a: 1}
m_BuildTextureStacks: []

7
Assets/BossRoom/Material/Characters/ToonTest/Torso_Tank.mat


- _ZWrite: 1
m_Colors:
- _AmbientColor: {r: 0.5471698, g: 0.5471698, b: 0.5471698, a: 1}
- _Color: {r: 0.21698111, g: 0.21698111, b: 0.21698111, a: 1}
- _Color: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1}
- _RimColor: {r: 1, g: 1, b: 1, a: 1}
- _SpecularColor: {r: 3.9999995, g: 3.8952875, b: 3.8952875, a: 1}
- _RimColor: {r: 4, g: 4, b: 4, a: 1}
- _SpecularColor: {r: 7.999999, g: 7.790575, b: 7.790575, a: 1}
m_BuildTextureStacks: []

13
Assets/BossRoom/Material/Characters/ToonTest/Weapons_Archer.mat


- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimAmount: 0.343
- _RimThreshold: 0.145
- _RimAmount: 0.264
- _RimThreshold: 0.058
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1

- _AmbientColor: {r: 0.16981131, g: 0.16981131, b: 0.16981131, a: 1}
- _Color: {r: 0.3584906, g: 0.3584906, b: 0.3584906, a: 1}
- _AmbientColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.5, g: 0.5, b: 0.5, a: 1}
- _RimColor: {r: 1, g: 1, b: 1, a: 1}
- _SpecularColor: {r: 3.137255, g: 3.137255, b: 3.137255, a: 1}
- _RimColor: {r: 8, g: 8, b: 8, a: 1}
- _SpecularColor: {r: 50.196075, g: 50.196075, b: 50.196075, a: 1}
m_BuildTextureStacks: []

13
Assets/BossRoom/Material/Characters/ToonTest/Weapons_Mage.mat


- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimAmount: 0.343
- _RimThreshold: 0.145
- _RimAmount: 0.264
- _RimThreshold: 0.058
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1

- _AmbientColor: {r: 0.16981131, g: 0.16981131, b: 0.16981131, a: 1}
- _Color: {r: 0.3584906, g: 0.3584906, b: 0.3584906, a: 1}
- _AmbientColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.5, g: 0.5, b: 0.5, a: 1}
- _RimColor: {r: 1, g: 1, b: 1, a: 1}
- _SpecularColor: {r: 3.137255, g: 3.137255, b: 3.137255, a: 1}
- _RimColor: {r: 8, g: 8, b: 8, a: 1}
- _SpecularColor: {r: 50.196075, g: 50.196075, b: 50.196075, a: 1}
m_BuildTextureStacks: []

13
Assets/BossRoom/Material/Characters/ToonTest/Weapons_Rogue.mat


- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _RimAmount: 0.343
- _RimThreshold: 0.145
- _RimAmount: 0.264
- _RimThreshold: 0.058
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1

- _AmbientColor: {r: 0.16981131, g: 0.16981131, b: 0.16981131, a: 1}
- _Color: {r: 0.3584906, g: 0.3584906, b: 0.3584906, a: 1}
- _AmbientColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.5, g: 0.5, b: 0.5, a: 1}
- _RimColor: {r: 1, g: 1, b: 1, a: 1}
- _SpecularColor: {r: 3.137255, g: 3.137255, b: 3.137255, a: 1}
- _RimColor: {r: 8, g: 8, b: 8, a: 1}
- _SpecularColor: {r: 50.196075, g: 50.196075, b: 50.196075, a: 1}
m_BuildTextureStacks: []

7
Assets/BossRoom/Material/Characters/ToonTest/Weapons_Tank.mat


- _ZWrite: 1
m_Colors:
- _AmbientColor: {r: 0.3962264, g: 0.3962264, b: 0.3962264, a: 1}
- _Color: {r: 0.3584906, g: 0.3584906, b: 0.3584906, a: 1}
- _Color: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1}
- _RimColor: {r: 1, g: 1, b: 1, a: 1}
- _SpecularColor: {r: 3.137255, g: 3.137255, b: 3.137255, a: 1}
- _RimColor: {r: 2, g: 2, b: 2, a: 1}
- _SpecularColor: {r: 12.549019, g: 12.549019, b: 12.549019, a: 1}
m_BuildTextureStacks: []

3
Assets/BossRoom/Material/Dungeon/lava.mat


- _ZWrite: 1
m_Colors:
- _Color: {r: 1, g: 0.84967643, b: 0, a: 1}
- _EmissionColor: {r: 7.999999, g: 1.3056179, b: 0, a: 1}
- _EmissionColor: {r: 7.999999, g: 2.8021085, b: 0, a: 1}
m_BuildTextureStacks: []

3
Assets/BossRoom/Material/Dungeon/deco_dungeon.mat


- _DetailNormalMapScale: 1
- _DstBlend: 0
- _GlossMapScale: 1
- _Glossiness: 0.661
- _Glossiness: 0.444
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 0

m_Colors:
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
m_BuildTextureStacks: []

958
Assets/BossRoom/Models/DungeonPieces.FBX
文件差异内容过多而无法显示
查看文件

25
Assets/BossRoom/Models/BossSetController.controller


m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 6
m_ConditionEvent: AttackID
m_EventTreshold: 1
m_ConditionEvent: BeginAttack
m_ConditionEvent: Attack1
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 6299315480180736668}

serializedVersion: 3
m_TransitionDuration: 0.25
m_TransitionDuration: 0
m_ExitTime: 0.75
m_ExitTime: 0.0000000010521221
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0

m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
m_Controller: {fileID: 0}
m_Controller: {fileID: 9100000}
- m_Name: AttackID
m_Type: 3
m_Controller: {fileID: 0}
- m_Name: Attack1
m_Type: 9
m_Controller: {fileID: 9100000}
- m_Name: BeginAttack
m_Controller: {fileID: 0}
- m_Name: HitReact1
m_Controller: {fileID: 9100000}
m_Controller: {fileID: 0}
m_AnimatorLayers:
- serializedVersion: 5
m_Name: Base Layer

m_Position: {x: 240, y: 90, z: 0}
- serializedVersion: 1
m_State: {fileID: 6299315480180736668}
m_Position: {x: 40, y: 220, z: 0}
m_Position: {x: 240, y: 260, z: 0}
m_ChildStateMachines: []
m_AnyStateTransitions: []
m_EntryTransitions: []

27
Assets/BossRoom/Models/CharacterSet.fbx.meta


mirror: 0
bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000
curves: []
events: []
events:
- time: 0.40376437
functionName: OnAnimEvent
data: impact
objectReferenceParameter: {instanceID: 0}
floatParameter: 0
intParameter: 0
messageOptions: 0
transformMask: []
maskType: 3
maskSource: {instanceID: 0}

mirror: 0
bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000
curves: []
events: []
events:
- time: 0.53248686
functionName: OnAnimEvent
data: impact
objectReferenceParameter: {instanceID: 0}
floatParameter: 0
intParameter: 0
messageOptions: 0
transformMask: []
maskType: 3
maskSource: {instanceID: 0}

mirror: 0
bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000
curves: []
events: []
events:
- time: 0.40753868
functionName: OnAnimEvent
data: impact
objectReferenceParameter: {instanceID: 0}
floatParameter: 0
intParameter: 0
messageOptions: 0
transformMask: []
maskType: 3
maskSource: {instanceID: 0}

548
Assets/BossRoom/Models/CharacterSetController.controller


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1102 &-9059899351118470251
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Nothing
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: -6270680072761177303}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 0}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!206 &-8988982740543935465
BlendTree:
m_ObjectHideFlags: 1

m_UseAutomaticThresholds: 1
m_NormalizedBlendValues: 0
m_BlendType: 0
--- !u!1101 &-5603320215398779609
--- !u!1102 &-7547485152901491539
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Fall Down
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: 5579816715067545514}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: -1504929105726005784, guid: 2115c4661f55eff45a5a0f91fc0a12f0, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &-7345246596832709857
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: HitReact1
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: 4957634337843930872}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 7894786494464805379, guid: 2115c4661f55eff45a5a0f91fc0a12f0, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1101 &-6735739854590397019
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions: []
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -3516404760485336223}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.25
m_TransitionOffset: 0
m_ExitTime: 0.75
m_HasExitTime: 1
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &-6270680072761177303
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}

m_Conditions:
- m_ConditionMode: 6
m_ConditionEvent: AttackID
m_EventTreshold: 1
m_ConditionEvent: BeginAttack
m_ConditionEvent: HitReact1
m_DstState: {fileID: 6299315480180736668}
m_DstState: {fileID: -7345246596832709857}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0
m_TransitionOffset: 0
m_ExitTime: 2.5632382e-10
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &-5808022421118276268
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 1
m_ConditionEvent: BeginHitReact
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 0}
m_Solo: 0
m_Mute: 0
m_IsExit: 0

m_ExitTime: 0.75
m_HasExitTime: 1
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &-5603320215398779609
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 1
m_ConditionEvent: Attack1
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 6299315480180736668}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.0000000037252903
m_TransitionOffset: 0
m_ExitTime: 0.016478343
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0

m_Name: WalkRun
m_Speed: 1
m_CycleOffset: 0
m_Transitions: []
m_Transitions:
- {fileID: 8427159825030150999}
- {fileID: 4924297452976420476}
- {fileID: -2323244736882414019}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0

m_UseAutomaticThresholds: 1
m_NormalizedBlendValues: 0
m_BlendType: 0
--- !u!1101 &-2323244736882414019
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 1
m_ConditionEvent: BeginRevive
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 8314685060882719794}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.25
m_TransitionOffset: 0
m_ExitTime: 0.7413794
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &-2134875305200649429
AnimatorStateTransition:
m_ObjectHideFlags: 1

m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &-1777038757504527503
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions: []
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -3516404760485336223}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.25
m_TransitionOffset: 0
m_ExitTime: 0.75
m_HasExitTime: 1
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &-1068572555509609370
AnimatorState:
serializedVersion: 6

m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Base Layer
m_Name: Fall Down
- serializedVersion: 1
m_State: {fileID: 8314685060882719794}
m_Position: {x: 520, y: 200, z: 0}
- serializedVersion: 1
m_State: {fileID: 5803934921609956400}
m_Position: {x: 60, y: 340, z: 0}
- serializedVersion: 1
m_State: {fileID: 6995031694560656813}
m_Position: {x: 350, y: 320, z: 0}
- serializedVersion: 1
m_State: {fileID: -7547485152901491539}
m_Position: {x: -30, y: 240, z: 0}
m_ChildStateMachines: []
m_AnyStateTransitions: []
m_EntryTransitions: []

m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 0}
- m_Name: AttackID
m_Type: 3
- m_Name: Attack1
m_Type: 9
- m_Name: BeginAttack
- m_Name: HitReact1
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 0}
- m_Name: FallDown
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 0}
- m_Name: BeginRevive
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 0}
- m_Name: Dead
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 0}
- m_Name: StandUp
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 0}
- m_Name: FallDown
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 0}
- m_Name: BeginRevive
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 0}
- m_Name: Dead
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 0}
- m_Name: StandUp
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0

m_IKPass: 0
m_SyncedLayerAffectsTiming: 0
m_Controller: {fileID: 9100000}
- serializedVersion: 5
m_Name: HitReacts
m_StateMachine: {fileID: 3532665691827284609}
m_Mask: {fileID: 0}
m_Motions: []
m_Behaviours: []
m_BlendingMode: 1
m_SyncedLayerIndex: -1
m_DefaultWeight: 1
m_IKPass: 0
m_SyncedLayerAffectsTiming: 0
m_Controller: {fileID: 9100000}
--- !u!1107 &2782526268344220699
AnimatorStateMachine:
serializedVersion: 6

m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1107 &3532665691827284609
AnimatorStateMachine:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: HitReacts
m_ChildStates:
- serializedVersion: 1
m_State: {fileID: -9059899351118470251}
m_Position: {x: 280, y: 70, z: 0}
- serializedVersion: 1
m_State: {fileID: -7345246596832709857}
m_Position: {x: 290, y: -30, z: 0}
m_ChildStateMachines: []
m_AnyStateTransitions: []
m_EntryTransitions: []
m_StateMachineTransitions: {}
m_StateMachineBehaviours: []
m_AnyStatePosition: {x: 50, y: 20, z: 0}
m_EntryPosition: {x: 50, y: 120, z: 0}
m_ExitPosition: {x: 800, y: 120, z: 0}
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
m_DefaultState: {fileID: -9059899351118470251}
--- !u!1101 &4660115808215194994
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 6
m_ConditionEvent: AttackID
m_EventTreshold: 1
- m_ConditionMode: 1
m_ConditionEvent: BeginAttack
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 6299315480180736668}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.25
m_TransitionOffset: 0
m_ExitTime: 0.75
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &4924297452976420476
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 1
m_ConditionEvent: Dead
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 6995031694560656813}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.25
m_TransitionOffset: 0
m_ExitTime: 0.7413794
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &4957634337843930872
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions: []
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -9059899351118470251}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.25
m_TransitionOffset: 0
m_ExitTime: 0.5
m_HasExitTime: 1
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &5579816715067545514
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 1
m_ConditionEvent: StandUp
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 5803934921609956400}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.25
m_TransitionOffset: 0
m_ExitTime: 0.87288135
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &5593412509193387231
AnimatorStateTransition:
m_ObjectHideFlags: 1

m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &5803934921609956400
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Stand Up
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: -6735739854590397019}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: -2919142679728832081, guid: 2115c4661f55eff45a5a0f91fc0a12f0, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1109 &6002482201662273439
AnimatorTransition:
m_ObjectHideFlags: 1

m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &6995031694560656813
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Dead
m_Speed: 1
m_CycleOffset: 0
m_Transitions: []
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: -1504929105726005784, guid: 2115c4661f55eff45a5a0f91fc0a12f0, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1107 &8124319401456280373
AnimatorStateMachine:
serializedVersion: 6

m_Position: {x: 240, y: 90, z: 0}
- serializedVersion: 1
m_State: {fileID: 6299315480180736668}
m_Position: {x: 40, y: 220, z: 0}
m_Position: {x: 250, y: 240, z: 0}
m_ChildStateMachines: []
m_AnyStateTransitions: []
m_EntryTransitions: []

m_ExitPosition: {x: 800, y: 120, z: 0}
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
m_DefaultState: {fileID: -1068572555509609370}
--- !u!1102 &8314685060882719794
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Action - Revive
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: -1777038757504527503}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: -7620468718608648079, guid: 2115c4661f55eff45a5a0f91fc0a12f0, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1101 &8427159825030150999
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 1
m_ConditionEvent: FallDown
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -7547485152901491539}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.25
m_TransitionOffset: 0
m_ExitTime: 0.7413794
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &8468659891928091302
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions: []
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -1068572555509609370}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.25
m_TransitionOffset: 0
m_ExitTime: 0.5
m_HasExitTime: 1
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1

8
Assets/BossRoom/PostProcessing/PostProcessVolume Profile.asset


value: 1
intensity:
overrideState: 1
value: 2
value: 0.84
value: 1
value: 0.67
value: 0.5
value: 1
value: 5
value: 5.62
anamorphicRatio:
overrideState: 0
value: 0

2
Assets/BossRoom/Textures/Characters/Tank_Weapon_CLR.tga
文件差异内容过多而无法显示
查看文件

4
Assets/BossRoom/Textures/Environment/deco_dungeon.png
文件差异内容过多而无法显示
查看文件

942
Assets/BossRoom/Scenes/DungeonTest.unity
文件差异内容过多而无法显示
查看文件

992
Assets/BossRoom/Scenes/CharSelect.unity
文件差异内容过多而无法显示
查看文件

22
Assets/BossRoom/Scripts/Server/Game/Action/Action.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace BossRoom.Server

{
protected ServerCharacter m_Parent;
/// <summary>
/// The level this action plays back at. e.g. a weak "level 0" melee attack, vs a strong "level 3" melee attack.
/// </summary>
protected int m_Level;
protected ActionRequestData m_Data;
/// <summary>

get
{
var list = ActionData.ActionDescriptions[Data.ActionTypeEnum];
int level = Mathf.Min(m_Level, list.Count - 1); //if we don't go up to the requested level, just cap at the max level.
int level = Mathf.Min(Data.Level, list.Count - 1); //if we don't go up to the requested level, just cap at the max level.
return list[level];
}
}

/// </summary>
public Action(ServerCharacter parent, ref ActionRequestData data, int level)
public Action(ServerCharacter parent, ref ActionRequestData data)
m_Level = level;
m_Data.Level = level;
}
/// <summary>

/// <param name="data">the data to instantiate this skill from. </param>
/// <param name="level">the level to play the skill at. </param>
/// <returns>the newly created action. </returns>
public static Action MakeAction(ServerCharacter parent, ref ActionRequestData data, int level )
public static Action MakeAction(ServerCharacter parent, ref ActionRequestData data)
switch(logic)
switch (logic)
case ActionLogic.MELEE: return new MeleeAction(parent, ref data, level);
case ActionLogic.CHASE: return new ChaseAction(parent, ref data, level);
case ActionLogic.MELEE: return new MeleeAction(parent, ref data);
case ActionLogic.CHASE: return new ChaseAction(parent, ref data);
case ActionLogic.REVIVE: return new ReviveAction(parent, ref data);
default: throw new System.NotImplementedException();
}
}

52
Assets/BossRoom/Scripts/Server/Game/Action/ActionPlayer.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// </summary>
public class ActionPlayer
{
private ServerCharacter m_parent;
private ServerCharacter m_Parent;
private List<Action> m_queue;
private List<Action> m_Queue;
public ActionPlayer(ServerCharacter parent )
public ActionPlayer(ServerCharacter parent)
m_parent = parent;
m_queue = new List<Action>();
m_Parent = parent;
m_Queue = new List<Action>();
public void PlayAction(ref ActionRequestData data )
public void PlayAction(ref ActionRequestData data)
if( !data.ShouldQueue )
if (!data.ShouldQueue)
int level = 0; //todo, get this from parent's networked vars, maybe.
var new_action = Action.MakeAction(m_parent, ref data, level);
var new_action = Action.MakeAction(m_Parent, ref data);
bool was_empty = m_queue.Count == 0;
m_queue.Add(new_action);
if( was_empty )
bool wasEmpty = m_Queue.Count == 0;
m_Queue.Add(new_action);
if (wasEmpty)
{
AdvanceQueue(false);
}

{
if( m_queue.Count > 0 )
if (m_Queue.Count > 0)
m_queue[0].Cancel();
m_Queue[0].Cancel();
m_queue.Clear();
m_Queue.Clear();
}
/// <summary>

{
if (m_queue.Count > 0)
if (m_Queue.Count > 0)
data = m_queue[ 0 ].Data;
data = m_Queue[0].Data;
return true;
}
else

/// <param name="expireFirstElement">Pass true to remove the first element and advance to the next element. Pass false to "advance" to the 0th element</param>
private void AdvanceQueue(bool expireFirstElement)
{
if( expireFirstElement && m_queue.Count > 0 )
if (expireFirstElement && m_Queue.Count > 0)
m_queue.RemoveAt(0);
m_Queue.RemoveAt(0);
if( m_queue.Count > 0 )
if (m_Queue.Count > 0)
m_queue[0].TimeStarted = Time.time;
bool play = m_queue[0].Start();
if( !play )
m_Queue[0].TimeStarted = Time.time;
bool play = m_Queue[0].Start();
if (!play)
{
AdvanceQueue(true);
}

public void Update()
{
if( this.m_queue.Count > 0 )
if (m_Queue.Count > 0)
Action runningAction = m_queue[0]; //action at the front of the queue is the one that is actively running.
Action runningAction = m_Queue[0]; //action at the front of the queue is the one that is actively running.
if ( !keepGoing || timeExpired )
if (!keepGoing || timeExpired)
{
AdvanceQueue(true);
}

42
Assets/BossRoom/Scripts/Server/Game/Action/ChaseAction.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine;
namespace BossRoom.Server
{

private Vector3 m_CurrentTargetPos;
public ChaseAction(ServerCharacter parent, ref ActionRequestData data, int level) : base(parent, ref data, level)
public ChaseAction(ServerCharacter parent, ref ActionRequestData data) : base(parent, ref data)
{
}

{
if (!HasValidTarget())
{
Debug.Log("Failed to start ChaseAction. The target entity wasn't submitted or doesn't exist anymore" );
Debug.Log("Failed to start ChaseAction. The target entity wasn't submitted or doesn't exist anymore");
return false;
}

m_Movement.SetMovementTarget(m_Target.transform.position);
if (StopIfDone())
{
m_Parent.transform.LookAt(m_CurrentTargetPos); //even if we didn't move, snap to face the target!
return false;
}
m_Movement.SetMovementTarget(m_Target.transform.position);
return true;
}

/// </summary>
private bool HasValidTarget()
{
return m_Data.TargetIds != null &&
m_Data.TargetIds.Length > 0 &&
return m_Data.TargetIds != null &&
m_Data.TargetIds.Length > 0 &&
/// Called each frame while the action is running.
/// Tests to see if we've reached our target. Returns true if we've reached our target, false otherwise (in which case it also stops our movement).
/// <returns>true to keep running, false to stop. The Action will stop by default when its duration expires, if it has a duration set. </returns>
public override bool Update()
private bool StopIfDone()
if( (m_Data.Amount*m_Data.Amount) > distToTarget2 )
if ((m_Data.Amount * m_Data.Amount) > distToTarget2)
return false;
return true;
return false;
}
/// <summary>
/// Called each frame while the action is running.
/// </summary>
/// <returns>true to keep running, false to stop. The Action will stop by default when its duration expires, if it has a duration set. </returns>
public override bool Update()
{
if (StopIfDone()) { return false; }
if( (m_Data.Amount*m_Data.Amount) < targetMoved2 )
if ((m_Data.Amount * m_Data.Amount) < targetMoved2)
{
//target has moved past our range tolerance. Must repath.
this.m_Movement.SetMovementTarget(m_Target.transform.position);

80
Assets/BossRoom/Scripts/Server/Game/Action/MeleeAction.cs


using System.Collections;
using System.Collections.Generic;
/// <summary>
/// Action that represents a swing of a melee weapon. It is not explicitly targeted, but rather detects the foe that was hit with a physics check.
/// </summary>
/// <remarks>
/// Q: Why do we DetectFoe twice, once in Start, once when we actually connect?
/// A: The weapon swing doesn't happen instantaneously. We want to broadcast the action to other clients as fast as possible to minimize latency,
/// but this poses a conundrum. At the moment the swing starts, you don't know for sure if you've hit anybody yet. There are a few possible resolutions to this:
/// 1. Do the DetectFoe operation once--in Start.
/// Pros: Simple! Only one physics cast per swing--saves on perf.
/// Cons: Is unfair. You can step out of the swing of an attack, but no matter how far you go, you'll still be hit. The reverse is also true--you can
/// "step into an attack", and it won't affect you. This will feel terrible to the attacker.
/// 2. Do the DetectFoe operation once--in Update. Send a separate RPC to the targeted entity telling it to play its hit react.
/// Pros: Always shows the correct behavior. The entity that gets hit plays its hit react (if any).
/// Cons: You need another RPC. Adds code complexity and bandwidth. You also don't have enough information when you start visualizing the swing on
/// the client to do any intelligent animation handshaking. If your server->client latency is even a little uneven, your "attack" animation
/// won't line up correctly with the hit react, making combat look floaty and disjointed.
/// 3. Do the DetectFoe operation twice, once in Start and once in Update.
/// Pros: Is fair--you do the hit-detect at the moment of the swing striking home. And will generally play the hit react on the right target.
/// Cons: Requires more complicated visualization logic. The initial broadcast foe can only ever be treated as a "hint". The graphics logic
/// needs to do its own range checking to pick the best candidate to play the hit react on.
///
/// As so often happens in networked games (and games in general), there's no perfect solution--just sets of tradeoffs. For our example, we're showing option "3".
/// </remarks>
private bool m_ExecFired;
private bool m_ExecutionFired;
private ulong m_ProvisionalTarget;
public MeleeAction(ServerCharacter parent, ref ActionRequestData data, int level) : base(parent, ref data, level)
//cache Physics Cast hits, to minimize allocs.
public MeleeAction(ServerCharacter parent, ref ActionRequestData data) : base(parent, ref data)
ServerCharacter foe = DetectFoe();
if (foe != null)
{
m_ProvisionalTarget = foe.NetworkId;
Data.TargetIds = new ulong[] { foe.NetworkId };
}
m_Parent.NetState.ServerBroadcastAction(ref Data);
return true;
}

if( !m_ExecFired && (Time.time-TimeStarted) >= Description.ExecTime_s )
if (!m_ExecutionFired && (Time.time - TimeStarted) >= Description.ExecTime_s)
m_ExecFired = true;
var foe = DetectFoe();
if(foe != null )
m_ExecutionFired = true;
var foe = DetectFoe(m_ProvisionalTarget);
if (foe != null)
foe.RecieveHP(this.m_Parent, -Description.Amount);
foe.ReceiveHP(this.m_Parent, -Description.Amount);
return true;
return true;
/// <summary>

private ServerCharacter DetectFoe()
private ServerCharacter DetectFoe(ulong foeHint = 0)
//this simple detect just does a boxcast out from our position in the direction we're facing, out to the range of the attack.
//this simple detect just does a boxcast out from our position in the direction we're facing, out to the range of the attack.
var my_bounds = this.m_Parent.GetComponent<Collider>().bounds;
RaycastHit[] results;
int numResults = ActionUtils.DetectMeleeFoe(m_Parent.IsNPC, m_Parent.GetComponent<Collider>(), Description, out results);
RaycastHit hit;
if (numResults == 0) { return null; }
//NPCs (monsters) can hit PCs, and vice versa. No friendly fire allowed on either side.
int mask = LayerMask.GetMask(m_Parent.IsNPC ? "PCs" : "NPCs");
//everything that passes the mask should have a ServerCharacter component.
ServerCharacter foundFoe = results[0].collider.GetComponent<ServerCharacter>();
if( Physics.BoxCast(m_Parent.transform.position, my_bounds.extents, m_Parent.transform.forward, out hit, Quaternion.identity,
Description.Range, mask ))
//we always prefer the hinted foe. If he's still in range, he should take the damage, because he's who the client visualization
//system will play the hit-react on (in case there's any ambiguity).
for (int i = 0; i < numResults; i++)
var foe_character = hit.collider.GetComponent<ServerCharacter>();
return foe_character;
var serverChar = results[i].collider.GetComponent<ServerCharacter>();
if (serverChar.NetworkId == foeHint)
{
foundFoe = serverChar;
break;
}
return null;
return foundFoe;
}
}
}

56
Assets/BossRoom/Scripts/Server/Game/Character/AIBrain.cs


using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

IDLE,
}
private ServerCharacter m_serverCharacter;
private ActionPlayer m_actionPlayer;
private AIStateType m_currentState;
private Dictionary<AIStateType, AIState> m_logics;
private List<ServerCharacter> m_hatedEnemies;
private ServerCharacter m_ServerCharacter;
private ActionPlayer m_ActionPlayer;
private AIStateType m_CurrentState;
private Dictionary<AIStateType, AIState> m_Logics;
private List<ServerCharacter> m_HatedEnemies;
m_serverCharacter = me;
m_actionPlayer = myActionPlayer;
m_ServerCharacter = me;
m_ActionPlayer = myActionPlayer;
m_logics = new Dictionary<AIStateType, AIState>
m_Logics = new Dictionary<AIStateType, AIState>
[ AIStateType.IDLE ] = new IdleAIState(this),
[AIStateType.IDLE] = new IdleAIState(this),
[ AIStateType.ATTACK ] = new AttackAIState(this, m_actionPlayer),
[AIStateType.ATTACK] = new AttackAIState(this, m_ActionPlayer),
m_hatedEnemies = new List<ServerCharacter>();
m_currentState = AIStateType.IDLE;
m_HatedEnemies = new List<ServerCharacter>();
m_CurrentState = AIStateType.IDLE;
}
/// <summary>

{
AIStateType newState = FindBestEligibleAIState();
if (m_currentState != newState)
if (m_CurrentState != newState)
m_logics[ newState ].Initialize();
m_Logics[newState].Initialize();
m_currentState = newState;
m_logics[ m_currentState ].Update();
m_CurrentState = newState;
m_Logics[m_CurrentState].Update();
}
private AIStateType FindBestEligibleAIState()

foreach (AIStateType type in Enum.GetValues(typeof(AIStateType)))
{
if (m_logics[ type ].IsEligible())
if (m_Logics[type].IsEligible())
{
return type;
}

}
#region Functions for AIStateLogics
if (potentialFoe == null || potentialFoe.IsNPC)
if (potentialFoe == null || potentialFoe.IsNPC || potentialFoe.NetState.NetworkLifeState.Value != LifeState.ALIVE)
// FIXME: check for dead!
// Also, we could use NavMesh.Raycast() to see if we have line of sight to foe?
return true;
}

/// <param name="character"></param>
public void Hate(ServerCharacter character)
{
if (!m_hatedEnemies.Contains(character))
if (!m_HatedEnemies.Contains(character))
m_hatedEnemies.Add(character);
m_HatedEnemies.Add(character);
}
}

public List<ServerCharacter> GetHatedEnemies()
{
// first we clean the list -- remove any enemies that have disappeared (became null), are dead, etc.
m_hatedEnemies.RemoveAll(enemy => !IsAppropriateFoe(enemy));
return m_hatedEnemies;
m_HatedEnemies.RemoveAll(enemy => !IsAppropriateFoe(enemy));
return m_HatedEnemies;
}
/// <summary>

public ServerCharacter GetMyServerCharacter()
{
return m_serverCharacter;
return m_ServerCharacter;
#endregion
}
}

120
Assets/BossRoom/Scripts/Server/Game/Character/ServerCharacter.cs


using System.Collections;
[RequireComponent(typeof(NetworkCharacterState))]
[RequireComponent(typeof(ServerCharacterMovement), typeof(NetworkCharacterState))]
public class ServerCharacter : MLAPI.NetworkedBehaviour
{
public NetworkCharacterState NetState { get; private set; }

[Tooltip("If IsNPC, this is how far the npc can detect others (in meters)")]
public float DetectRange = 10;
private ActionPlayer m_actionPlayer;
private AIBrain m_aiBrain;
[SerializeField]
[Tooltip("If set to false, an NPC character will be denied its brain (won't attack or chase players)")]
private bool m_BrainEnabled = true;
private ActionPlayer m_ActionPlayer;
private AIBrain m_AIBrain;
private static List<ServerCharacter> g_activeServerCharacters = new List<ServerCharacter>();
private static List<ServerCharacter> s_ActiveServerCharacters = new List<ServerCharacter>();
g_activeServerCharacters.Add(this);
s_ActiveServerCharacters.Add(this);
g_activeServerCharacters.Remove(this);
s_ActiveServerCharacters.Remove(this);
return g_activeServerCharacters;
return s_ActiveServerCharacters;
// Start is called before the first frame update
m_actionPlayer = new ActionPlayer(this);
m_ActionPlayer = new ActionPlayer(this);
m_aiBrain = new AIBrain(this, m_actionPlayer);
m_AIBrain = new AIBrain(this, m_ActionPlayer);
if (!IsServer) { this.enabled = false; }
if (!IsServer) { enabled = false; }
this.NetState = GetComponent<NetworkCharacterState>();
this.NetState.DoActionEventServer += this.OnActionPlayRequest;
NetState = GetComponent<NetworkCharacterState>();
NetState.DoActionEventServer += OnActionPlayRequest;
NetState.OnReceivedClientInput += OnClientMoveRequest;
NetState.NetworkLifeState.OnValueChanged += OnLifeStateChanged;
// store our character-creation choices in NetworkedVars so clients can figure out how to visualize us
if (!IsNPC)
{
var lobbyChoices = ServerBossRoomState.Instance.GetLobbyResultsForClient(OwnerClientId);
NetState.CharacterClass.Value = lobbyChoices.Class;
NetState.IsMale.Value = lobbyChoices.IsMale;
}
}
}

/// <param name="data">Contains all data necessary to create the action</param>
public void PlayAction(ref ActionRequestData data )
public void PlayAction(ref ActionRequestData data)
this.m_actionPlayer.PlayAction(ref data);
if (!IsNPC)
{
//Can't trust the client! If this was a human request, make sure the Level of the skill being played is correct.
data.Level = 0;
}
//the character needs to be alive in order to be able to play actions
if (NetState.NetworkLifeState.Value == LifeState.ALIVE)
{
//Can't trust the client! If this was a human request, make sure the Level of the skill being played is correct.
this.m_ActionPlayer.PlayAction(ref data);
}
}
private void OnClientMoveRequest(Vector3 targetPosition)
{
if (NetState.NetworkLifeState.Value == LifeState.ALIVE)
{
ClearActions();
GetComponent<ServerCharacterMovement>().SetMovementTarget(targetPosition);
}
}
private void OnLifeStateChanged(LifeState prevLifeState, LifeState lifeState)
{
if (lifeState != LifeState.ALIVE)
{
ClearActions();
GetComponent<ServerCharacterMovement>().CancelMove();
}
}
/// <summary>

{
this.m_actionPlayer.ClearActions();
this.m_ActionPlayer.ClearActions();
private void OnActionPlayRequest( ActionRequestData data )
private void OnActionPlayRequest(ActionRequestData data)
{
this.PlayAction(ref data);
}

/// </summary>
/// <param name="Inflicter">Person dishing out this damage/healing. Can be null. </param>
/// <param name="HP">The HP to receive. Positive value is healing. Negative is damage. </param>
public void RecieveHP( ServerCharacter inflicter, int HP)
public void ReceiveHP(ServerCharacter inflicter, int HP)
if( NetState.HitPoints.Value <= 0 )
//we can't currently heal a dead character back to Alive state.
//that's handled by a separate function.
if (NetState.HitPoints.Value <= 0)
//TODO: handle death state.
GameObject.Destroy(this.gameObject);
}
ClearActions();
if (IsNPC)
{
NetState.NetworkLifeState.Value = LifeState.DEAD;
}
else
{
NetState.NetworkLifeState.Value = LifeState.FAINTED;
}
}
}
/// <summary>
/// Receive a Life State change that brings Fainted characters back to Alive state.
/// </summary>
/// <param name="inflicter">Person reviving the character.</param>
/// <param name="HP">The HP to set to a newly revived character.</param>
public void Revive(ServerCharacter inflicter, int HP)
{
if (NetState.NetworkLifeState.Value == LifeState.FAINTED)
{
NetState.HitPoints.Value = HP;
NetState.NetworkLifeState.Value = LifeState.ALIVE;
}
// Update is called once per frame
m_actionPlayer.Update();
if (m_aiBrain != null)
m_ActionPlayer.Update();
if (m_AIBrain != null && NetState.NetworkLifeState.Value == LifeState.ALIVE && m_BrainEnabled)
m_aiBrain.Update();
m_AIBrain.Update();
}
}
}

44
Assets/BossRoom/Scripts/Server/Game/State/ServerBossRoomState.cs


public override GameState ActiveState { get { return GameState.BOSSROOM; } }
/// <summary>
/// Reference to the scene's state object so that newly-spawned players can access state
/// </summary>
public static ServerBossRoomState Instance { get; private set; }
private LobbyResults m_LobbyResults;
public LobbyResults.CharSelectChoice GetLobbyResultsForClient(ulong clientId)
{
LobbyResults.CharSelectChoice returnValue;
if (!m_LobbyResults.Choices.TryGetValue(clientId, out returnValue))
{
// We don't know about this client ID! That probably means they joined the game late, after the lobby was closed.
// We don't yet handle this scenario well (e.g. showing them a "wait for next game" screen, maybe?),
// so for now we just let them join. We'll pretend that they made them some generic character choices.
returnValue = new LobbyResults.CharSelectChoice(CharacterTypeEnum.TANK, true);
m_LobbyResults.Choices[ clientId ] = returnValue;
}
return returnValue;
}
private void Awake()
{
Instance = this;
}
protected override void OnDestroy()
{
base.OnDestroy();
if (Instance == this)
Instance = null;
}
public override void NetworkStart()
{

}
else
{
// retrieve the lobby state info so that the players we're about to spawn can query it
System.Object o = GameStateRelay.GetRelayObject();
if (o != null && o.GetType() != typeof(LobbyResults))
throw new System.Exception("No LobbyResults found!");
m_LobbyResults = (LobbyResults)o;
// the client is officially allowed to be here.
// the client is officially allowed to be here. (And they are joining the game post-lobby...
// should we do something special here?)
// if any other players are already connected to us (i.e. they connected while we were
// in the login screen), give them player characters
// Now create player characters for all the players
foreach (var connection in NetworkingManager.Singleton.ConnectedClientsList)
{
SpawnPlayer(connection.ClientId);

189
Assets/BossRoom/Scripts/Server/Game/State/ServerCharSelectState.cs


using MLAPI;
using BossRoom;
namespace BossRoom.Server
{

public class ServerCharSelectState : GameStateBehaviour
{
public override GameState ActiveState { get { return GameState.CHARSELECT; } }
public CharSelectData CharSelectData { get; private set; }
private List<ulong> m_CharSlotClientIDs;
private void Awake()
{
CharSelectData = GetComponent<CharSelectData>();
CharSelectData.OnClientChangedSlot += OnClientChangedSlot;
m_CharSlotClientIDs = new List<ulong>();
}
private void OnClientChangedSlot(ulong clientId, CharSelectData.CharSelectSlot newSlot)
{
if (CharSelectData.IsLobbyLocked.Value)
{
// The user tried to change their class after everything was locked in... too late! Discard this choice
return;
}
int idx = FindClientIdx(clientId);
if (idx == -1)
throw new System.Exception("OnClientChangedSlot: unknown client ID " + clientId);
//TODO: GOMPS-83. Remove this temp variable and replace with core CharSelect logic.
private float m_start_s; //TEMP. manages transition.
CharSelectData.CharacterSlots[ idx ] = newSlot;
if (newSlot.State == CharSelectData.SlotState.LOCKEDIN)
{
// it's possible that this is the last person we were waiting for. See if we're fully locked in!
LockLobbyIfReady();
}
}
/// <summary>
/// Looks through all our connections and sees if everyone has locked in their choice;
/// if so, we lock in the whole lobby, save state, and begin the transition to gameplay
/// </summary>
private void LockLobbyIfReady()
{
for (int x = 0; x < m_CharSlotClientIDs.Count; ++x)
{
if (MLAPI.NetworkingManager.Singleton.ConnectedClients.ContainsKey(m_CharSlotClientIDs[ x ]) &&
CharSelectData.CharacterSlots[ x ].State != CharSelectData.SlotState.LOCKEDIN)
{
return; // this is a real player, and they are not ready to start, so we're done
}
}
// everybody's ready at the same time! Lock it down!
CharSelectData.IsLobbyLocked.Value = true;
// remember our choices so the next scene can use the info
LobbyResults lobbyResults = new LobbyResults();
for (int i = 0; i < m_CharSlotClientIDs.Count; ++i)
{
if (MLAPI.NetworkingManager.Singleton.ConnectedClients.ContainsKey(m_CharSlotClientIDs[ i ]))
{
var charSelectChoices = CharSelectData.CharacterSlots[ i ];
lobbyResults.Choices[ m_CharSlotClientIDs[ i ] ] = new LobbyResults.CharSelectChoice(charSelectChoices.Class, charSelectChoices.IsMale);
}
}
GameStateRelay.SetRelayObject(lobbyResults);
// Delay a few seconds to give the UI time to react, then switch scenes
StartCoroutine(CoroEndLobby());
}
private IEnumerator CoroEndLobby()
{
yield return new WaitForSeconds(3);
MLAPI.SceneManagement.NetworkSceneManager.SwitchScene("DungeonTest");
}
protected override void OnDestroy()
{
base.OnDestroy();
if (NetworkingManager.Singleton)
{
NetworkingManager.Singleton.OnClientConnectedCallback -= OnClientConnected;
NetworkingManager.Singleton.OnClientDisconnectCallback -= OnClientDisconnectCallback;
}
CharSelectData.OnClientChangedSlot -= OnClientChangedSlot;
}
private int FindClientIdx(ulong clientId)
{
for (int i = 0; i < m_CharSlotClientIDs.Count; ++i)
{
if (m_CharSlotClientIDs[ i ] == clientId)
return i;
}
return -1;
}
if (!IsServer) { this.enabled = false; }
if (!IsServer)
{
this.enabled = false;
}
else
{
NetworkingManager.Singleton.OnClientConnectedCallback += OnClientConnected;
NetworkingManager.Singleton.OnClientDisconnectCallback += OnClientDisconnectCallback;
m_start_s = Time.time;
if (IsHost)
{
// host doesn't get an OnClientConnected()
OnClientConnected(OwnerClientId);
}
}
}
private void OnClientConnected(ulong clientId)
{
// FIXME: here we work around another MLAPI bug when starting up scenes with in-scene networked objects.
// We'd like to immediately give the new client a slot in our lobby, but if we try to send an RPC to the
// client-side version of this scene NetworkedObject, it will fail. The client's log will show
// "[MLAPI] ClientRPC message received for a non-existent object with id: 1. This message is lost."
// If we wait a moment, the object will be assigned its ID (of 1) and everything will work. But there's no
// notification to reliably tell us when the server and client are truly initialized.
//
// Add'l notes: I tried to work around this by having the newly-connected client send an "I'm ready" RPC to the
// server, assuming that by the time the server received an RPC, it would be safe to respond. But the client
// literally cannot send RPCs yet! If it sends one too quickly after connecting, the server gets a null-reference
// exception. (Exception is in either MLAPI.NetworkedBehaviour.InvokeServerRPCLocal() or
// MLAPI.NetworkedBehaviour.OnRemoteServerRPC, depending on whether we're in host mode or a standalone
// client, respectively). This actually seems like a separate bug, but probably tied into the same problem.
// To repro the bug, comment out this line...
StartCoroutine(CoroWorkAroundMlapiBug(clientId));
// ... and uncomment this one:
//AssignNewLobbyIndex(clientId);
// Update is called once per frame
void Update()
private IEnumerator CoroWorkAroundMlapiBug(ulong clientId)
if( (Time.time - m_start_s) > 3 )
var client = NetworkingManager.Singleton.ConnectedClients[ clientId ];
// for the host-mode client, a single frame of delay seems to be enough;
// for networked connections, it often takes longer, so we wait a second.
if (IsHost && clientId == NetworkingManager.Singleton.LocalClientId)
yield return new WaitForFixedUpdate();
else
yield return new WaitForSeconds(1);
AssignNewLobbyIndex(clientId);
}
private void AssignNewLobbyIndex(ulong clientId)
{
int newClientIdx = -1;
// see if any of the existing slots are for a client ID that's dead.
// Note that we may find this new clientId is already in our list, if
// "reuse client IDs" is enabled... and it is! This means that somebody
// else was in the lobby, but then quit, and a new client got their ID.
for (int i = 0; i < m_CharSlotClientIDs.Count; ++i)
{
if (m_CharSlotClientIDs[ i ] == clientId ||
!MLAPI.NetworkingManager.Singleton.ConnectedClients.ContainsKey(m_CharSlotClientIDs[ i ]))
{
// it's a dead slot; reuse it!
m_CharSlotClientIDs[ i ] = clientId;
newClientIdx = i;
break;
}
}
if (newClientIdx == -1 && m_CharSlotClientIDs.Count < CharSelectData.k_MaxLobbyPlayers)
//temp: we don't have any logic or anything in CharSelect, so for now we just skip on to the next scene.
MLAPI.SceneManagement.NetworkSceneManager.SwitchScene("DungeonTest");
// all existing slots are in use; get a new one, if there's room...
newClientIdx = m_CharSlotClientIDs.Count;
m_CharSlotClientIDs.Add(clientId);
if (newClientIdx == -1)
{
// there was no room!
CharSelectData.InvokeClientRpcOnClient(CharSelectData.RpcFatalLobbyError, clientId, CharSelectData.FatalLobbyError.LOBBY_FULL, "MLAPI_INTERNAL");
}
else
{
CharSelectData.InvokeClientRpcOnClient(CharSelectData.RpcAssignLobbyIndex, clientId, newClientIdx, "MLAPI_INTERNAL");
}
}
private void OnClientDisconnectCallback(ulong clientId)
{
// find this player's old slot and set their visuals to inactive, so other players know they're gone.
int idx = FindClientIdx(clientId);
if (idx != -1)
{
CharSelectData.CharacterSlots[ idx ] = new CharSelectData.CharSelectSlot(CharSelectData.SlotState.INACTIVE);
}
}
}

5
Assets/BossRoom/Scripts/Shared/BossRoom.Shared.asmdef


"name": "BossRoom.Shared",
"rootNamespace": "",
"references": [
"GUID:1491147abca9d7d4bb7105af628b223e"
"GUID:1491147abca9d7d4bb7105af628b223e",
"Unity.Multiplayer.MultiPie.Editor"
],
"includePlatforms": [],
"excludePlatforms": [],

"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}
}

126
Assets/BossRoom/Scripts/Shared/Game/Action/ActionRequestData.cs


using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;

TANK_BASEATTACK,
ARCHER_BASEATTACK,
GENERAL_CHASE,
GENERAL_REVIVE,
}

RANGED,
RANGEDTARGETED,
CHASE,
REVIVE,
//O__O adding a new ActionLogic type? Update Action.MakeAction!
//O__O adding a new ActionLogic branch? Update Action.MakeAction!
/// FIXME: [GOMPS-99] This will be turned into a ScriptableObject.
/// FIXME: [GOMPS-99] This will be turned into a ScriptableObject.
/// ActionLogic that drives this Action. This corresponds to the actual block of code that executes it.
/// ActionLogic that drives this Action. This corresponds to the actual block of code that executes it.
/// by game logic when the action takes effect.
/// by game logic when the action takes effect.
/// How much it consts in Mana to play this Action.
/// How much it consts in Mana to play this Action.
/// How how the Action performer can be from the Target, or how far the action can go (for an untargeted action like a bowshot).
/// How how the Action performer can be from the Target, or how far the action can go (for an untargeted action like a bowshot).
/// Duration in seconds that this Action takes to play.
/// Duration in seconds that this Action takes to play.
/// Time when the Action should do its "main thing" (e.g. when a melee attack should apply damage).
/// Time when the Action should do its "main thing" (e.g. when a melee attack should apply damage).
/// How long the effect this Action leaves behind will last, in seconds.
/// How long the effect this Action leaves behind will last, in seconds.
/// The primary Animation action that gets played when visualizing this Action.
/// The primary Animation action that gets played when visualizing this Action.
/// metadata about each kind of ActionLogic. This basically just informs us what fields to serialize for each kind of ActionLogic.
/// </summary>
public class ActionLogicInfo
{
public bool HasPosition;
public bool HasDirection;
public bool HasTarget;
public bool HasAmount;
}
/// <summary>
/// FIXME [GOMPS-99]: this list will be turned into a collection of Scriptable Objects.
/// FIXME [GOMPS-99]: this list will be turned into a collection of Scriptable Objects.
public static Dictionary<ActionLogic, ActionLogicInfo> LogicInfos = new Dictionary<ActionLogic, ActionLogicInfo>
{
{ActionLogic.MELEE, new ActionLogicInfo{} },
{ActionLogic.RANGED, new ActionLogicInfo{HasDirection=true} },
{ActionLogic.RANGEDTARGETED, new ActionLogicInfo{HasTarget=true} },
{ActionLogic.CHASE, new ActionLogicInfo{HasTarget=true, HasAmount=true} },
};
{new ActionDescription{Logic=ActionLogic.MELEE, Amount=10, ManaCost=2, ExecTime_s=0.3f, Duration_s=0.5f, Range=4f, Anim="Todo" } }, //level 1
{new ActionDescription{Logic=ActionLogic.MELEE, Amount=15, ManaCost=2, ExecTime_s=0.3f, Duration_s=0.5f, Range=4f, Anim="Todo" } }, //level 2
{new ActionDescription{Logic=ActionLogic.MELEE, Amount=20, ManaCost=2, ExecTime_s=0.3f, Duration_s=0.5f, Range=4f, Anim="Todo" } }, //level 3
{new ActionDescription{Logic=ActionLogic.MELEE, Amount=30, ManaCost=2, ExecTime_s=0.3f, Duration_s=1.2f, Range=2f, Anim="Attack1" } }, //level 1
{new ActionDescription{Logic=ActionLogic.MELEE, Amount=40, ManaCost=2, ExecTime_s=0.3f, Duration_s=1.2f, Range=2f, Anim="Attack1" } }, //level 2
{new ActionDescription{Logic=ActionLogic.MELEE, Amount=50, ManaCost=2, ExecTime_s=0.3f, Duration_s=1.2f, Range=2f, Anim="Attack1" } }, //level 3
{new ActionDescription{Logic=ActionLogic.RANGED, Amount=7, ManaCost=2, Duration_s=0.5f, Range=12f, Anim="Todo" } }, //Level 1
{new ActionDescription{Logic=ActionLogic.RANGED, Amount=12, ManaCost=2, Duration_s=0.5f, Range=15f, Anim="Todo" } }, //Level 2
{new ActionDescription{Logic=ActionLogic.RANGED, Amount=15, ManaCost=2, Duration_s=0.5f, Range=18f, Anim="Todo" } }, //Level 3
{new ActionDescription{Logic=ActionLogic.RANGED, Amount=7, ManaCost=2, Duration_s=0.5f, Range=12f, Anim="Attack1" } }, //Level 1
{new ActionDescription{Logic=ActionLogic.RANGED, Amount=12, ManaCost=2, Duration_s=0.5f, Range=15f, Anim="Attack1" } }, //Level 2
{new ActionDescription{Logic=ActionLogic.RANGED, Amount=15, ManaCost=2, Duration_s=0.5f, Range=18f, Anim="Attack1" } }, //Level 3
{ ActionType.GENERAL_CHASE, new List<ActionDescription>
{ ActionType.GENERAL_CHASE, new List<ActionDescription>
}
},
{ ActionType.GENERAL_REVIVE, new List<ActionDescription>
{
{new ActionDescription{Logic=ActionLogic.REVIVE, Amount=10, ExecTime_s=0.3f, Duration_s=0.5f, Anim="Todo" } }
}
}
};
}

//O__O Hey, are you adding something? Be sure to update ActionLogicInfo, as well as the methods below.
//[System.Flags]
private enum PackFlags
{
None = 0,
HasPosition = 1,
HasDirection = 1 << 1,
HasTargetIds = 1 << 2,
HasLevel = 1 << 3,
HasAmount = 1 << 4,
ShouldQueue = 1 << 5
//currently serialized with a byte. Change Read/Write if you add more than 8 fields.
}
private PackFlags GetPackFlags()
{
PackFlags flags = PackFlags.None;
if (Position != Vector3.zero) { flags |= PackFlags.HasPosition; }
if (Direction != Vector3.zero) { flags |= PackFlags.HasDirection; }
if (TargetIds != null) { flags |= PackFlags.HasTargetIds; }
if (Level != 0) { flags |= PackFlags.HasLevel; }
if (Amount != 0) { flags |= PackFlags.HasAmount; }
if (ShouldQueue) { flags |= PackFlags.ShouldQueue; }
return flags;
}
ShouldQueue = reader.ReadBool();
PackFlags flags = (PackFlags)reader.ReadByte();
var Logic = ActionData.ActionDescriptions[ActionTypeEnum][0].Logic;
var Info = ActionData.LogicInfos[Logic];
ShouldQueue = (flags & PackFlags.ShouldQueue) != 0;
if (Info.HasPosition)
if ((flags & PackFlags.HasPosition) != 0)
if (Info.HasDirection)
if ((flags & PackFlags.HasDirection) != 0)
if (Info.HasTarget)
if ((flags & PackFlags.HasTargetIds) != 0)
if (Info.HasAmount)
if ((flags & PackFlags.HasLevel) != 0)
{
Level = reader.ReadInt32();
}
if ((flags & PackFlags.HasAmount) != 0)
{
Amount = reader.ReadSingle();
}

{
using (var writer = MLAPI.Serialization.Pooled.PooledBitWriter.Get(stream))
{
ActionLogic Logic = ActionData.ActionDescriptions[ActionTypeEnum][0].Logic;
ActionLogicInfo Info = ActionData.LogicInfos[Logic];
PackFlags flags = GetPackFlags();
writer.WriteBool(ShouldQueue);
if (Info.HasPosition)
writer.WriteByte((byte)flags);
if ((flags & PackFlags.HasPosition) != 0)
if (Info.HasDirection)
if ((flags & PackFlags.HasDirection) != 0)
if (Info.HasTarget)
if ((flags & PackFlags.HasTargetIds) != 0)
if (Info.HasAmount)
if ((flags & PackFlags.HasLevel) != 0)
{
writer.WriteInt32(Level);
}
if ((flags & PackFlags.HasAmount) != 0)
{
writer.WriteSingle(Amount);
}

135
Assets/BossRoom/Scripts/Shared/Game/State/CharSelectData.cs


using System.Collections;
using MLAPI;
using MLAPI.Messaging;
using System;
using UnityEngine;
using MLAPI;
using System.IO;
namespace BossRoom
{

public class CharSelectData : NetworkedBehaviour
{
//TODO: GOMPS-83. implement the true synced array for CharacterSlots. There should be 8, and some can be null.
//They can probably just be strings for now.
private MLAPI.NetworkedVar.Collections.NetworkedList<string> CharSlots;
public enum SlotState
{
INACTIVE,
ACTIVE,
LOCKEDIN,
}
public enum FatalLobbyError
{
LOBBY_FULL,
}
public const int k_MaxLobbyPlayers = 8;
/// <summary>
/// Describes one of the eight lobby slots in the character-select screen.
/// </summary>
public struct CharSelectSlot : MLAPI.Serialization.IBitWritable
{
public CharacterTypeEnum Class;
public bool IsMale;
public SlotState State;
public CharSelectSlot(CharacterTypeEnum Class, bool IsMale, SlotState State)
{
this.State = State;
this.IsMale = IsMale;
this.Class = Class;
}
public CharSelectSlot(SlotState State)
{
this.State = State;
this.IsMale = true;
this.Class = CharacterTypeEnum.TANK;
}
public void Read(Stream stream)
{
using (var reader = MLAPI.Serialization.Pooled.PooledBitReader.Get(stream))
{
Class = (CharacterTypeEnum)reader.ReadInt16();
IsMale = reader.ReadBool();
State = (SlotState)reader.ReadByte();
}
}
public void Write(Stream stream)
{
using (var writer = MLAPI.Serialization.Pooled.PooledBitWriter.Get(stream))
{
writer.WriteInt16((short)Class);
writer.WriteBool(IsMale);
writer.WriteByte((byte)State);
}
}
}
/// <summary>
/// Current state of each of the seats in the lobby.
/// </summary>
public MLAPI.NetworkedVar.Collections.NetworkedList<CharSelectSlot> CharacterSlots { get; private set; }
/// <summary>
/// When this becomes true, the lobby is closed and in process of terminating (switching to gameplay).
/// </summary>
public MLAPI.NetworkedVar.NetworkedVarBool IsLobbyLocked { get; } = new MLAPI.NetworkedVar.NetworkedVarBool(false);
/// <summary>
/// Client notification when the server has assigned this client a player Index (from 0 to 7);
/// UI uses this tell whether we are "P1", "P2", etc. in the char-select UI
/// </summary>
public event Action<int> OnAssignedLobbyIndex;
/// <summary>
/// RPC to tell a client which slot in the char-gen screen they will be using.
/// </summary>
/// <param name="idx">Index on the UI screen, starting at 0 for the first slot</param>
[ClientRPC]
public void RpcAssignLobbyIndex(int idx)
{
OnAssignedLobbyIndex?.Invoke(idx);
}
/// <summary>
/// Client notification when the server has told us that we cannot participate.
/// (Client should display an appropriate error and terminate)
/// </summary>
public event Action<FatalLobbyError> OnFatalLobbyError;
/// <summary>
/// RPC to tell a client that they cannot participate in the game due to a fatal error.
/// </summary>
/// <param name="movementTarget">Index on the UI screen, starting at 0 for the first slot</param>
[ClientRPC]
public void RpcFatalLobbyError(FatalLobbyError error)
{
OnFatalLobbyError?.Invoke(error);
}
/// <summary>
/// Server notification when a client requests changes to their char-gen state
/// </summary>
public event Action<ulong, CharSelectSlot> OnClientChangedSlot;
/// <summary>
/// RPC to notify the server that a client has chosen their class and/or locked in their choice.
/// </summary>
[ServerRPC(RequireOwnership = false)]
public void RpcChangeSlot(ulong clientId, CharSelectSlot newSlot)
{
OnClientChangedSlot?.Invoke(clientId, newSlot);
}
public override void NetworkStart()
private void Awake()
base.NetworkStart();
CharSlots = new MLAPI.NetworkedVar.Collections.NetworkedList<string>();
List<CharSelectSlot> initialList = new List<CharSelectSlot>();
for (int i = 0; i < k_MaxLobbyPlayers; ++i)
{
initialList.Add(new CharSelectSlot(SlotState.INACTIVE));
}
// initialize the char-slots list with all the slots it will ever have
CharacterSlots = new MLAPI.NetworkedVar.Collections.NetworkedList<CharSelectSlot>(initialList);

4
Assets/BossRoom/Scripts/Shared/Game/State/GameStateBehaviour.cs


private static GameObject s_activeStateGO;
// Start is called before the first frame update
void Start()
protected virtual void Start()
{
if( s_activeStateGO != null )
{

if( Persists ) { Object.DontDestroyOnLoad(this.gameObject); }
}
private void OnDestroy()
protected virtual void OnDestroy()
{
if( !Persists )
{

10
Assets/BossRoom/Scripts/Client/Game/Character/ClientCharacter.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace BossRoom.Client

{
//!!STUB. Client Character gamelogic will go here.
/// <summary>
/// The Vizualization GameObject isn't in the same transform hierarchy as the object, but it registers itself here
/// so that the visual GameObject can be found from a NetworkId.
/// </summary>
public BossRoom.Visual.ClientCharacterVisualization ChildVizObject { get; set; }
if( !IsClient ) { this.enabled = false; }
if (!IsClient) { this.enabled = false; }
}
}

11
Assets/BossRoom/Scripts/Client/Game/Character/ModelSwap.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
namespace BossRoom.Visual
{

{
index = System.Math.Min(index, modelArray.Length - 1);
m_ModelIndex = index;
for (int x = 0; x < modelArray.Length; x++)
for (int i = 0; i < modelArray.Length; i++)
modelArray[x].SetActive(x == m_ModelIndex);
modelArray[ i ].SetActive(i == m_ModelIndex);
}
}

//DEBUG: This allows you to change models at runtime by tweaking the ModelIndex in the editor.
if( m_lastModelIndex != m_ModelIndex )
//DEBUG: This allows you to change models at runtime by tweaking the ModelIndex in the editor.
if (m_lastModelIndex != m_ModelIndex)
{
m_lastModelIndex = m_ModelIndex;
SetModel(m_ModelIndex);

45
Assets/BossRoom/Scripts/Client/Game/State/ClientCharSelectState.cs


using System.Collections;
using System.Collections.Generic;
using MLAPI;
using BossRoom;
namespace BossRoom.Client
{

[RequireComponent(typeof(CharSelectData))]
public class ClientCharSelectState : GameStateBehaviour
{
/// <summary>
/// Reference to the scene's state object so that UI can access state
/// </summary>
public static ClientCharSelectState Instance { get; private set; }
public CharSelectData CharSelectData { get; private set; }
public int CharIndex { get; private set; }
private void Awake()
{
Instance = this;
CharSelectData = GetComponent<CharSelectData>();
}
protected override void OnDestroy()
{
base.OnDestroy();
CharSelectData.OnAssignedLobbyIndex -= OnAssignedCharIndex;
if (Instance == this)
Instance = null;
}
if (!IsClient) { this.enabled = false; }
if (!IsClient)
{
this.enabled = false;
}
else
{
CharSelectData.OnAssignedLobbyIndex += OnAssignedCharIndex;
}
}
public void ChangeSlot(CharacterTypeEnum newClass, bool newIsMale, CharSelectData.SlotState newState)
{
CharSelectData.InvokeServerRpc(CharSelectData.RpcChangeSlot,
NetworkingManager.Singleton.LocalClientId,
new CharSelectData.CharSelectSlot(newClass, newIsMale, newState));
}
private void OnAssignedCharIndex(int index)
{
CharIndex = index;
}
}
}

76
.editorconfig
文件差异内容过多而无法显示
查看文件

39
README.md


# TODOs (trimmed down version of tasks listed at: https://github.cds.internal.unity3d.com/unity/com.unity.template-starter-kit)
##### Fill in your project template's package information
Update the following required fields in `Packages/com.unity.template.mytemplate/package.json`:
- `name`: Project template's package name, it should follow this naming convention: `com.unity.template.[your-template-name]`
(Example: `com.unity.template.3d`)
- `displayName`: Package user friendly display name. (Example: `"First person shooter"`). <br>__Note:__ Use a display name that will help users understand what your project template is intended for.
- `version`: Package version `X.Y.Z`, your project **must** adhere to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
- `unity`: Minimum Unity Version your project template is compatible with. (Example: `2018.3`)
- `description`: This is the description for your template which will be displayed to the user to let them know what this template is for. This description shouldn't include anything version-specific and should stay pretty consistent across template versions.
- `dependencies`: Specify the dependencies the template requires. If you add a package to your project, you should also add it here. We try to keep this list as lean as possible to avoid conflicts as much as possible.
##### Update **README.md**
The README.md file should contain all pertinent information for template developers, such as:
* Prerequisites
* External tools or development libraries
* Required installed Software
The Readme file at the root of the project should be the same as the one found in the template package folder.
##### Prepare your documentation
Rename and update **Packages/com.unity.template.mytemplate/Documentation~/your-package-name.md** documentation file.
Use this documentation template to create preliminary, high-level documentation for the _development_ of your template's package. This document is meant to introduce other developers to the features and sample files included in your project template.
Your template's documentation will be made available online and in the editor during publishing to guide our users.
##### Update the changelog
**Packages/com.unity.template.mytemplate/CHANGELOG.md**.
Every new feature or bug fix should have a trace in this file. For more details on the chosen changelog format, see [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
Changelogs will be made available online to inform users about the changes they can expect when downloading a project template. As a consequence, the changelog content should be customer friendly and present clear, meaningful information.
#### Complete the rest of the steps in the link regarding Legal & Testing

0
InitCodeMarker

8
Packages/com.unity.multiplayer.samples.coop/.npmignore


ProjectData~/ProjectSettings/ProjectVersion.txt
ProjectData~/Assets/Scenes.meta
.npmrc
.npmignore
.gitignore
QAReport.md
QAReport.md.meta
.gitlab-ci.yml

11
Packages/com.unity.multiplayer.samples.coop/CHANGELOG.md


# Changelog
All notable changes to this project template will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
## [0.1.0] - 2020-10-09
### This is the first release of *Unity Package com.unity.template.mytemplate*.
*Short description of this release*

7
Packages/com.unity.multiplayer.samples.coop/CHANGELOG.md.meta


fileFormatVersion: 2
guid: 6f00b2d43a7ad4286a00be8b13f4a499
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

315
Packages/com.unity.multiplayer.samples.coop/Documentation~/images/example.png

之前 之后
宽度: 748  |  高度: 249  |  大小: 51 KiB

67
Packages/com.unity.multiplayer.samples.coop/Documentation~/images/gitlab_ci_secret_variables.png

之前 之后
宽度: 990  |  高度: 283  |  大小: 16 KiB

555
Packages/com.unity.multiplayer.samples.coop/Documentation~/images/gitlab_pipeline_download.png

之前 之后
宽度: 2518  |  高度: 160  |  大小: 53 KiB

483
Packages/com.unity.multiplayer.samples.coop/Documentation~/images/gitlab_pipelines.png

之前 之后
宽度: 796  |  高度: 1168  |  大小: 101 KiB

448
Packages/com.unity.multiplayer.samples.coop/Documentation~/images/template_in_new_project.png

之前 之后
宽度: 1990  |  高度: 1082  |  大小: 123 KiB

137
Packages/com.unity.multiplayer.samples.coop/Documentation~/index.md


>>>
**_Project Template Documentation_**
Use this template to create preliminary, high-level documentation meant to introduce users to the feature and the sample files included in this project template. When writing your documentation, do the following:
1. Follow instructions in blockquotes.
2. Replace angle brackets with the appropriate text. For example, replace "&lt;template name&gt;" with the official name of the project template.
3. Delete sections that do not apply to your project template. For example, a template containing only sample files does not have a "Using &lt;template name&gt;" section, so this section can be removed.
4. After documentation is completed, make sure you delete all instructions and examples in blockquotes including this preamble and its title:
```
>>>
Delete all of the text between pairs of blockquote markdown.
>>>
```
>>>
# About &lt;template name&gt;
>>>
Name the heading of the first topic after the **displayName** of the project template as it appears in the template's manifest. Check with your Product Manager to ensure that the template is named correctly.
This first topic includes a brief, high-level explanation of the project template and, if applicable, provides links to Unity Manual topics.
>>>
**_Example:_**
>>>
Here is an example for reference only. Do not include this in the final documentation file:
*The First Persion Shooter project template includes examples of First Person Shooter assets, First Person Shooter Instances, animation, GameObjects, game mechanics and scripts that will help you get started quickly with creating your own first person shooter game.*
>>>
<a name="UsingProjectTemplate"></a>
# Using &lt;template name&gt;
>>>
The contents of this section depends on the type of project template.
* At a minimum, this section should include reference documentation that describes the assets, structure, and properties that makes up the project template's content. This reference documentation should include screen grabs (see how to add screens below), a list of assets or settings, an explanation of what each asset or setting does, and the default values of each asset or setting.
* Ideally, this section should also include a workflow: a list of steps that the user can easily follow that demonstrates how to use the project template. This list of steps should include screen grabs (see how to add screens below) to better describe how to use the feature.
For project templates that include sample files, this section may include detailed information on how the user can use these sample files. Workflow diagrams or illustrations could be included if deemed appropriate.
## How to add images
*(This section is for reference. Do not include in the final documentation file)*
If the [Using &lt;template name&gt;](#UsingProjectTemplate) section includes screen grabs or diagrams, a link to the image must be added to this MD file, before or after the paragraph with the instruction or description that references the image. In addition, a caption should be added to the image link that includes the name of the screen or diagram. All images must be PNG files with underscores for spaces. No animated GIFs.
An example is included below:
![A cinematic in the Timeline Editor window.](images/example.png)
Notice that the example screen shot is included in the images folder. All screen grabs and/or diagrams must be added and referenced from the images folder.
For more on the Unity documentation standards for creating and adding screen grabs, see this confluence page: https://confluence.hq.unity3d.com/pages/viewpage.action?pageId=13500715
>>>
# Technical details
## Requirements
>>>
This subtopic includes a bullet list with the compatible versions of Unity. This subtopic may also include additional requirements or recommendations for 3rd party software or hardware. If you need to include references to non-Unity products, make sure you refer to these products correctly and that all references include the proper trademarks (tm or r)
>>>
This version of &lt;template name&gt; is compatible with the following versions of the Unity Editor:
* 2018.3 and later (recommended)
To use this project template, you must have the following 3rd party products:
* &lt;product name and version with trademark or registered trademark.&gt;
* &lt;product name and version with trademark or registered trademark.&gt;
* &lt;product name and version with trademark or registered trademark.&gt;
## Known limitations
>>>
This section lists the known limitations with this version of the project template. If there are no known limitations, or if the limitations are trivial, exclude this section. An example is provided.
>>>
&lt;template name&gt; template version &lt;template version&gt; includes the following known limitations:
* &lt;brief one-line description of first limitation.&gt;
* &lt;brief one-line description of second limitation.&gt;
* &lt;and so on&gt;
>>>
*Example (For reference. Do not include in the final documentation file):*
The First Person Shoot template version 1.0 has the following limitations:*
* The First Person Shooter template does not support sound.
* The First Person Shooter template's Recorder properties are not available in standalone players.
* MP4 encoding is only available on Windows.
>>>
## Project template contents
>>>
This section includes the location of important files you want the user to know about. For example, if this project template containing user interface, models, and materials separated by groups, you may want to provide the folder location of each group.
>>>
The following table indicates the &lt;describe the breakdown you used here&gt;:
|Location|Description|
|---|---|
|`<folder>`|Contains &lt;describe what the folder contains&gt;.|
|`<file>`|Contains &lt;describe what the file represents or implements&gt;.|
>>>
*Example (For reference. Do not include in the final documentation file):*
The following table indicates the root folder of each type of sample in this project template. Each sample's root folder contains its own folders:
|Folder Location|Description|
|---|---|
|`WoodenCrate_Orange`|Root folder containing the assets for the orange crates.|
|`Characters`|Root folder containing the assets and animators for the characters.|
|`Levels`|Root folder containing scenes for the sample game's levels.|
>>>
## Document revision history
>>>
This section includes the revision history of the document. The revision history tracks when a document is created, edited, and updated. If you create or update a document, you must add a new row describing the revision. The Documentation Team also uses this table to track when a document is edited and its editing level. An example is provided:
|Date|Reason|
|---|---|
|Sept 12, 2017|Unedited. Published to production.|
|Sept 10, 2017|Document updated for project template version 1.1.<br>New features: <li>audio support for capturing MP4s.<li>Instructions on saving Recorder prefabs|
|Sept 5, 2017|Limited edit by Documentation Team. Published to production.|
|Aug 25, 2017|Document created. Matches project template version 1.0.|
>>>

5
Packages/com.unity.multiplayer.samples.coop/LICENSE.md


com.unity.multiplayer.samples.coop copyright © 2020 Unity Technologies ApS
Licensed under the Unity Companion License for Unity-dependent projects--see [Unity Companion License](http://www.unity3d.com/legal/licenses/Unity_Companion_License).
Unless expressly provided otherwise, the Software under this license is made available strictly on an “AS IS” BASIS WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. Please review the license for details on these and other terms and conditions.

7
Packages/com.unity.multiplayer.samples.coop/LICENSE.md.meta


fileFormatVersion: 2
guid: e1f27ba539e634ffa814b5977253d779
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

26
Packages/com.unity.multiplayer.samples.coop/QAReport.md


# Quality Report
Use this file to outline the test strategy for this project template.
## Version tested: [*package version*]
## QA Owner: [*Add Name*]
## UX Owner: [*Add Name*]
## Test strategy
*Use this section to describe how this feature was tested.*
* A link to the Test Plan (Test Rails, other)
* Results from the project template's editor and runtime test suite.
* Link to automated test results (if any)
* Manual test Results, [here's an example](https://docs.google.com/spreadsheets/d/12A76U5Gf969w10KL4Ik0wC1oFIBDUoRrqIvQgD18TFo/edit#gid=0)
* Scenario test week outcome
* etc.
## Package Status
Use this section to describe:
* UX status/evaluation results
* package stability
* known bugs, issues
* performance metrics,
* etc
In other words, a general feeling on the health of this project template.

7
Packages/com.unity.multiplayer.samples.coop/QAReport.md.meta


fileFormatVersion: 2
guid: 38e03a401f2e04237aa2d319d824266c
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

39
Packages/com.unity.multiplayer.samples.coop/README.md


# TODOs (trimmed down version of tasks listed at: https://github.cds.internal.unity3d.com/unity/com.unity.template-starter-kit)
##### Fill in your project template's package information
Update the following required fields in `Packages/com.unity.template.mytemplate/package.json`:
- `name`: Project template's package name, it should follow this naming convention: `com.unity.template.[your-template-name]`
(Example: `com.unity.template.3d`)
- `displayName`: Package user friendly display name. (Example: `"First person shooter"`). <br>__Note:__ Use a display name that will help users understand what your project template is intended for.
- `version`: Package version `X.Y.Z`, your project **must** adhere to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
- `unity`: Minimum Unity Version your project template is compatible with. (Example: `2018.3`)
- `description`: This is the description for your template which will be displayed to the user to let them know what this template is for. This description shouldn't include anything version-specific and should stay pretty consistent across template versions.
- `dependencies`: Specify the dependencies the template requires. If you add a package to your project, you should also add it here. We try to keep this list as lean as possible to avoid conflicts as much as possible.
##### Update **README.md**
The README.md file should contain all pertinent information for template developers, such as:
* Prerequisites
* External tools or development libraries
* Required installed Software
The Readme file at the root of the project should be the same as the one found in the template package folder.
##### Prepare your documentation
Rename and update **Packages/com.unity.template.mytemplate/Documentation~/your-package-name.md** documentation file.
Use this documentation template to create preliminary, high-level documentation for the _development_ of your template's package. This document is meant to introduce other developers to the features and sample files included in your project template.
Your template's documentation will be made available online and in the editor during publishing to guide our users.
##### Update the changelog
**Packages/com.unity.template.mytemplate/CHANGELOG.md**.
Every new feature or bug fix should have a trace in this file. For more details on the chosen changelog format, see [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
Changelogs will be made available online to inform users about the changes they can expect when downloading a project template. As a consequence, the changelog content should be customer friendly and present clear, meaningful information.
#### Complete the rest of the steps in the link regarding Legal & Testing

7
Packages/com.unity.multiplayer.samples.coop/README.md.meta


fileFormatVersion: 2
guid: 0a4025153e1d8462296108e234c57e9a
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
Packages/com.unity.multiplayer.samples.coop/Tests.meta


fileFormatVersion: 2
guid: 1977828ca0ab3cf409d003e816121b85
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
Packages/com.unity.multiplayer.samples.coop/Tests/Editor.meta


fileFormatVersion: 2
guid: 638e0ab1bfc544e57b3cbfdeab499e95
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

部分文件因为文件数量过多而无法显示

正在加载...
取消
保存