浏览代码

Merge remote-tracking branch 'upstream/main' into feature/npc-pathway-movement

/main
Yohann Puyhaubert 4 年前
当前提交
460eb34c
共有 1109 个文件被更改,包括 4441 次插入3609 次删除
  1. 5
      UOP1_Project/.gitignore
  2. 11
      UOP1_Project/Assets/AddressableAssetsData/AddressableAssetSettings.asset
  3. 16
      UOP1_Project/Assets/Art/Characters/PigChef/Animation/CaneHit.anim
  4. 14
      UOP1_Project/Assets/Art/Characters/PigChef/Animation/CaneHit2.anim
  5. 52
      UOP1_Project/Assets/Art/Characters/PigChef/Animation/PigChef.controller
  6. 976
      UOP1_Project/Assets/Art/Characters/PigChef/Animation/PigChef_Idle.fbx
  7. 10
      UOP1_Project/Assets/Art/Characters/Townsfolk_F/Animation/Townsfolk_F.overrideController
  8. 4
      UOP1_Project/Assets/Art/Characters/Townsfolk_M/Animation/Townsfolk_M.controller
  9. 33
      UOP1_Project/Assets/Art/Characters/Townsfolk_M/Animation/Townsfolk_Walk.fbx.meta
  10. 917
      UOP1_Project/Assets/Art/Characters/Townsfolk_M/Animation/Townsfolk_Talk.fbx
  11. 608
      UOP1_Project/Assets/Prefabs/Characters/PigChef.prefab
  12. 1
      UOP1_Project/Assets/Prefabs/Managers/InventoryManager.prefab
  13. 15
      UOP1_Project/Assets/Prefabs/Managers/QuestManager.prefab
  14. 24
      UOP1_Project/Assets/Prefabs/Props/Door.prefab
  15. 118
      UOP1_Project/Assets/Prefabs/TownStructures/VillageHouse_Big.prefab
  16. 95
      UOP1_Project/Assets/Prefabs/TownStructures/VillageHouse_Small.prefab
  17. 13
      UOP1_Project/Assets/Scenes/Initialization.unity
  18. 998
      UOP1_Project/Assets/Scenes/Locations/Beach.unity
  19. 660
      UOP1_Project/Assets/Scenes/Locations/Forest.unity
  20. 174
      UOP1_Project/Assets/Scenes/Locations/Glade.unity
  21. 593
      UOP1_Project/Assets/Scenes/Menus/MainMenu.unity
  22. 963
      UOP1_Project/Assets/Scenes/WIP/ArtShowcase.unity
  23. 213
      UOP1_Project/Assets/Scenes/WIP/TestingGround.unity
  24. 7
      UOP1_Project/Assets/Scenes/Whiteboxing/GeneralMapMediumMultipleScenes/Materials/poster.mat
  25. 2
      UOP1_Project/Assets/ScriptableObjects/Audio/AudioConfigurations/2.5DSFX_Config.asset
  26. 2
      UOP1_Project/Assets/ScriptableObjects/Audio/AudioConfigurations/UISFX_Config.asset
  27. 10
      UOP1_Project/Assets/ScriptableObjects/SceneData/Gameplay.asset
  28. 12
      UOP1_Project/Assets/ScriptableObjects/SceneData/Initialization.asset
  29. 14
      UOP1_Project/Assets/ScriptableObjects/SceneData/Locations/Beach.asset
  30. 14
      UOP1_Project/Assets/ScriptableObjects/SceneData/Locations/Forest.asset
  31. 18
      UOP1_Project/Assets/ScriptableObjects/SceneData/Locations/Glade.asset
  32. 13
      UOP1_Project/Assets/ScriptableObjects/SceneData/Menus/MainMenu.asset
  33. 12
      UOP1_Project/Assets/ScriptableObjects/SceneData/PersistentManagers.asset
  34. 10
      UOP1_Project/Assets/ScriptableObjects/SceneData/WIP/ArtShowcase.asset
  35. 14
      UOP1_Project/Assets/ScriptableObjects/SceneData/WIP/TestingGround.asset
  36. 11
      UOP1_Project/Assets/Scripts/Audio/AudioCue.cs
  37. 101
      UOP1_Project/Assets/Scripts/Audio/AudioManager.cs
  38. 56
      UOP1_Project/Assets/Scripts/Audio/SoundEmitters/SoundEmitter.cs
  39. 11
      UOP1_Project/Assets/Scripts/Audio/SoundEmitters/SoundEmitterVault.cs
  40. 4
      UOP1_Project/Assets/Scripts/Characters/StateMachine/Actions/ControlWalkingParticlesActionSO.cs
  41. 2
      UOP1_Project/Assets/Scripts/Characters/StateMachine/Actions/DestroyEntitySO.cs
  42. 4
      UOP1_Project/Assets/Scripts/Characters/StateMachine/Actions/PlayJumpParticlesActionSO.cs
  43. 4
      UOP1_Project/Assets/Scripts/Characters/StateMachine/Actions/PlayLandParticlesActionSO.cs
  44. 4
      UOP1_Project/Assets/Scripts/Characters/StateMachine/Actions/PlayLiftoffJumpParticlesActionSO.cs
  45. 4
      UOP1_Project/Assets/Scripts/Dialogues/DialogueDataSO.cs
  46. 91
      UOP1_Project/Assets/Scripts/Editor/Pathway/PathwayEditor.cs
  47. 2
      UOP1_Project/Assets/Scripts/Editor/Pathway/PathwayEditor.cs.meta
  48. 109
      UOP1_Project/Assets/Scripts/Editor/Pathway/PathwayGizmos.cs
  49. 2
      UOP1_Project/Assets/Scripts/Editor/Pathway/PathwayGizmos.cs.meta
  50. 2
      UOP1_Project/Assets/Scripts/Editor/SceneSelector/SceneSelector.Data.cs
  51. 15
      UOP1_Project/Assets/Scripts/Editor/SceneSelector/SceneSelector.Helper.cs
  52. 2
      UOP1_Project/Assets/Scripts/Editor/SceneSelector/SceneSelector.PreferencesWindow.cs
  53. 42
      UOP1_Project/Assets/Scripts/Editor/SceneSelector/SceneSelector.cs
  54. 2
      UOP1_Project/Assets/Scripts/Events/ScriptableObjects/AudioCueEventChannelSO.cs
  55. 2
      UOP1_Project/Assets/Scripts/Events/ScriptableObjects/EventChannelBaseSO.cs.meta
  56. 4
      UOP1_Project/Assets/Scripts/Events/ScriptableObjects/LoadEventChannelSO.cs
  57. 4
      UOP1_Project/Assets/Scripts/Inventory/InventoryManager.cs
  58. 4
      UOP1_Project/Assets/Scripts/Inventory/ScriptableObjects/Item.cs
  59. 40
      UOP1_Project/Assets/Scripts/Pathway/Pathway.cs
  60. 35
      UOP1_Project/Assets/Scripts/SceneManagement/InitializationLoader.cs
  61. 233
      UOP1_Project/Assets/Scripts/SceneManagement/SceneLoader.cs
  62. 8
      UOP1_Project/Assets/Scripts/SceneManagement/SceneLoader.cs.meta
  63. 35
      UOP1_Project/Assets/Scripts/SceneManagement/ScriptableObjects/GameSceneSO.cs
  64. 5
      UOP1_Project/Assets/Scripts/SceneManagement/ScriptableObjects/GameplaySO.cs
  65. 3
      UOP1_Project/Assets/Scripts/SceneManagement/ScriptableObjects/LocationSO.cs
  66. 13
      UOP1_Project/Assets/Scripts/SceneManagement/ScriptableObjects/MenuSO.cs
  67. 2
      UOP1_Project/Assets/Scripts/SceneManagement/ScriptableObjects/PathSO.cs
  68. 62
      UOP1_Project/Assets/Scripts/SceneManagement/StartGame.cs
  69. 1
      UOP1_Project/Assets/Settings/Audio/DefaultAudioMixer.mixer
  70. 21
      UOP1_Project/ProjectSettings/EditorBuildSettings.asset
  71. 2
      UOP1_Project/ProjectSettings/ProjectSettings.asset
  72. 4
      UOP1_Project/Assets/Audio/SFX/Environment/Env_Campfire.wav.meta
  73. 2
      UOP1_Project/Assets/Audio/SFX/Characters/Footsteps/Grass/UOP_SD_SFX_Footsteps_Soft grass_13.wav.meta
  74. 2
      UOP1_Project/Assets/Audio/SFX/Characters/Footsteps/Grass/UOP_SD_SFX_Footsteps_Soft grass_12.wav.meta
  75. 2
      UOP1_Project/Assets/Audio/SFX/Characters/Footsteps/Grass/UOP_SD_SFX_Footsteps_Soft grass_11.wav.meta
  76. 2
      UOP1_Project/Assets/Audio/SFX/Characters/Footsteps/Grass/UOP_SD_SFX_Footsteps_Soft grass_10.wav.meta
  77. 2
      UOP1_Project/Assets/Audio/SFX/Characters/Footsteps/Grass/UOP_SD_SFX_Footsteps_Soft grass_09.wav.meta
  78. 2
      UOP1_Project/Assets/Audio/SFX/Characters/Footsteps/Grass/UOP_SD_SFX_Footsteps_Soft grass_08.wav.meta
  79. 2
      UOP1_Project/Assets/Audio/SFX/Characters/Footsteps/Grass/UOP_SD_SFX_Footsteps_Soft grass_07.wav.meta
  80. 2
      UOP1_Project/Assets/Audio/SFX/Characters/Footsteps/Grass/UOP_SD_SFX_Footsteps_Soft grass_06.wav.meta
  81. 2
      UOP1_Project/Assets/Audio/SFX/Characters/Footsteps/Grass/UOP_SD_SFX_Footsteps_Soft grass_05.wav.meta
  82. 2
      UOP1_Project/Assets/Audio/SFX/Characters/Footsteps/Grass/UOP_SD_SFX_Footsteps_Soft grass_04.wav.meta
  83. 2
      UOP1_Project/Assets/Audio/SFX/Characters/Footsteps/Grass/UOP_SD_SFX_Footsteps_Soft grass_03.wav.meta
  84. 2
      UOP1_Project/Assets/Audio/SFX/Characters/Footsteps/Grass/UOP_SD_SFX_Footsteps_Soft grass_02.wav.meta
  85. 2
      UOP1_Project/Assets/Audio/SFX/Characters/Footsteps/Grass/UOP_SD_SFX_Footsteps_Soft grass_01.wav.meta
  86. 2
      UOP1_Project/Assets/Audio/SFX/Characters/Actions/Grabbing_01.wav.meta
  87. 2
      UOP1_Project/Assets/Audio/SFX/Characters/Actions/Jump_Liftoff_01.wav.meta
  88. 2
      UOP1_Project/Assets/Audio/SFX/Characters/Actions/Jump_Liftoff_02.wav.meta
  89. 2
      UOP1_Project/Assets/Audio/SFX/Characters/Actions/Swing_Cane_01.wav.meta
  90. 2
      UOP1_Project/Assets/Audio/SFX/Characters/Actions/Swing_Cane_02.wav.meta
  91. 2
      UOP1_Project/Assets/Audio/SFX/Characters/Actions/Swing_Cane_03.wav.meta
  92. 31
      UOP1_Project/Assets/Scenes/Managers/PersistentManagers.unity
  93. 2
      UOP1_Project/Assets/ScriptableObjects/Audio/AudioCues/SFX/SFX_Footsteps_Grass.asset
  94. 124
      UOP1_Project/Assets/Scripts/Localization/Editor/LocalizeComponent_TMProFont.cs
  95. 66
      UOP1_Project/Assets/Scripts/Localization/Editor/LocalizeTMProFontEvent.cs
  96. 2
      UOP1_Project/Assets/Audio/SFX/Interface/Interface_01.wav.meta
  97. 2
      UOP1_Project/Assets/Audio/SFX/Interface/Interface_02.wav.meta
  98. 48
      Docs/WikiImages/AmbientSettings.png
  99. 150
      Docs/WikiImages/BakingSettings.png

5
UOP1_Project/.gitignore


Assets/Polybrush Data*
Assets/PolybrushData*
# Asset Bundles folder
/StreamingAssets/
# Asset Bundles folder and .bin file
/Assets/StreamingAssets
*.bin

11
UOP1_Project/Assets/AddressableAssetsData/AddressableAssetSettings.asset


m_Name: AddressableAssetSettings
m_EditorClassIdentifier:
m_DefaultGroup: a7bae5f88e2e24365bdf768f42df85c5
m_OptimizeCatalogSize: 0
m_IgnoreUnsupportedFilesInBuild: 0
m_UniqueBundleIds: 0
m_maxConcurrentWebRequests: 500
m_ContiguousBundles: 0

- {fileID: 11400000, guid: 677ef1d06ea8a49ebb043a12e210fb0c, type: 2}
- {fileID: 11400000, guid: 86ddc49dbd1e0446e9ebfd4d8ba271d3, type: 2}
- {fileID: 11400000, guid: 1b5698d56f32d4f1792faa2c959e3f33, type: 2}
- {fileID: 11400000, guid: 88c964a48d7587e46bf53b80ee93f79b, type: 2}
- {fileID: 11400000, guid: 17f17930eab62fe419ac32652eab78fc, type: 2}
- {fileID: 11400000, guid: c909c8a405eee97478b5ec3c1f2582c2, type: 2}
- {fileID: 11400000, guid: 09ec3fa7fec1bcd41a94f51cd88888a3, type: 2}
- {fileID: 11400000, guid: 34440c2251e97944ba42354781dc433c, type: 2}
- {fileID: 11400000, guid: 140db76c5b3fb5745a3f6b740b828fa8, type: 2}
- {fileID: 11400000, guid: 29f1ccd1d37d59a4abf84e61a41fb9d5, type: 2}
- {fileID: 11400000, guid: c6089159bfe469d46ad3b0e68fe4aa09, type: 2}
- {fileID: 11400000, guid: f72ae0cfa384fd94f97ae062deb133b4, type: 2}
m_BuildSettings:
m_CompileScriptsInVirtualMode: 0
m_CleanupStreamingAssetsAfterBuilds: 1

16
UOP1_Project/Assets/Art/Characters/PigChef/Animation/CaneHit.anim


m_HasGenericRootTransform: 0
m_HasMotionFloatCurves: 0
m_Events:
- time: 0.78333336
- time: 0.73333335
functionName: PlaySlashEffect
data:
objectReferenceParameter: {fileID: 0}
floatParameter: 0
intParameter: 0
messageOptions: 0
- time: 0.76666665
functionName: EnableWeapon
data:
objectReferenceParameter: {fileID: 0}

- time: 0.9166667
functionName: PlayCaneSwing
data:
objectReferenceParameter: {fileID: 0}
floatParameter: 0
intParameter: 0
messageOptions: 0
- time: 0.96666664
functionName: DisableWeapon
data:
objectReferenceParameter: {fileID: 0}

14
UOP1_Project/Assets/Art/Characters/PigChef/Animation/CaneHit2.anim


m_HasGenericRootTransform: 0
m_HasMotionFloatCurves: 0
m_Events:
- time: 0.8666667
functionName: PlayReverseSlashEffect
data:
objectReferenceParameter: {fileID: 0}
floatParameter: 0
intParameter: 0
messageOptions: 0
data:
objectReferenceParameter: {fileID: 0}
floatParameter: 0
intParameter: 0
messageOptions: 0
- time: 0.96666664
functionName: PlayCaneSwing
data:
objectReferenceParameter: {fileID: 0}
floatParameter: 0

52
UOP1_Project/Assets/Art/Characters/PigChef/Animation/PigChef.controller


- {fileID: -4762902591384597963}
- {fileID: -2033464475531255411}
- {fileID: -890836485891151347}
- {fileID: 4588335210444503344}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0

m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1101 &2953684125489925025
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: IsAttacking
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -450912674566187584}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.25
m_TransitionOffset: 0
m_ExitTime: 0.8943662
m_HasExitTime: 1
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &3444333041856388052
AnimatorState:
serializedVersion: 5

m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &4588335210444503344
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: IsAttacking
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 5995182924539841906}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.25
m_TransitionOffset: 0
m_ExitTime: 0.8828125
m_HasExitTime: 1
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &4910209328142922604
AnimatorStateTransition:
m_ObjectHideFlags: 1

- {fileID: -3235251470832908421}
- {fileID: -1610815559573086160}
- {fileID: 5384281710731791955}
- {fileID: 2953684125489925025}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0

976
UOP1_Project/Assets/Art/Characters/PigChef/Animation/PigChef_Idle.fbx
文件差异内容过多而无法显示
查看文件

10
UOP1_Project/Assets/Art/Characters/Townsfolk_F/Animation/Townsfolk_F.overrideController


m_Name: Townsfolk_F
m_Controller: {fileID: 9100000, guid: 47d3bc25b6545494dafc0114c740c021, type: 2}
m_Clips:
- m_OriginalClip: {fileID: -3419257869308726280, guid: bb33524d77c2b40e88a7403bcf4f0848,
- m_OriginalClip: {fileID: -5252816984213320552, guid: e700150436d28411d8a0bb8454db5c96,
type: 3}
m_OverrideClip: {fileID: -5252816984213320552, guid: b6150cff043dc624c8f235d7594c6ab0,
type: 3}
- m_OriginalClip: {fileID: 1720936854327583921, guid: 93ab74c22ed45404f83d62e7a41f459a,
type: 3}
m_OverrideClip: {fileID: 1720936854327583921, guid: 4918af32d188ad849a373d1d2ddfd662,
type: 3}
- m_OriginalClip: {fileID: -3419257869308726280, guid: deffd152de6ef3841bc451b00f6cd55a,
type: 3}
m_OverrideClip: {fileID: -3419257869308726280, guid: 04b624c9c23f14df3b9d8316a8e8da2c,
type: 3}

4
UOP1_Project/Assets/Art/Characters/Townsfolk_M/Animation/Townsfolk_M.controller


m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 1720936854327583921, guid: e4fba1f141a3c4722b761e3cad6933ff,
m_Motion: {fileID: 1720936854327583921, guid: 93ab74c22ed45404f83d62e7a41f459a,
type: 3}
m_Tag:
m_SpeedParameter:

m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: -3419257869308726280, guid: bb33524d77c2b40e88a7403bcf4f0848,
m_Motion: {fileID: -3419257869308726280, guid: deffd152de6ef3841bc451b00f6cd55a,
type: 3}
m_Tag:
m_SpeedParameter:

33
UOP1_Project/Assets/Art/Characters/Townsfolk_M/Animation/Townsfolk_Walk.fbx.meta


fileFormatVersion: 2
guid: bb33524d77c2b40e88a7403bcf4f0848
guid: deffd152de6ef3841bc451b00f6cd55a
ModelImporter:
serializedVersion: 19301
internalIDToNameTable:

animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations:
- serializedVersion: 16
name: walk
takeName: walk
internalID: 0
firstFrame: 1
lastFrame: 24
wrapMode: 0
orientationOffsetY: 0
level: 0
cycleOffset: 0
loop: 0
hasAdditiveReferencePose: 0
loopTime: 1
loopBlend: 0
loopBlendOrientation: 0
loopBlendPositionY: 0
loopBlendPositionXZ: 0
keepOriginalOrientation: 0
keepOriginalPositionY: 1
keepOriginalPositionXZ: 0
heightFromFeet: 0
mirror: 0
bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000
curves: []
events: []
transformMask: []
maskType: 3
maskSource: {instanceID: 0}
additiveReferencePoseFrame: 1
clipAnimations: []
isReadable: 0
meshes:
lODScreenPercentages: []

917
UOP1_Project/Assets/Art/Characters/Townsfolk_M/Animation/Townsfolk_Talk.fbx
文件差异内容过多而无法显示
查看文件

608
UOP1_Project/Assets/Prefabs/Characters/PigChef.prefab
文件差异内容过多而无法显示
查看文件

1
UOP1_Project/Assets/Prefabs/Managers/InventoryManager.prefab


_giveItemEvent: {fileID: 11400000, guid: c54b320c4205f1c49b296b878daf2097, type: 2}
_addItemEvent: {fileID: 11400000, guid: f3027c4528b8e794f940a4696506f0c3, type: 2}
_removeItemEvent: {fileID: 11400000, guid: 4ed6ade94b85c452094b0147619e8b49, type: 2}
_saveSystem: {fileID: 11400000, guid: edc355c4a7d5028408d322b90814e19e, type: 2}

15
UOP1_Project/Assets/Prefabs/Managers/QuestManager.prefab


m_GameObject: {fileID: 8957403575277752759}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 10b246087f2d8d842b859e2b2f88078f, type: 3}
m_Script: {fileID: 11500000, guid: d3b99813ebb688d4ea1c24c7ac430cdc, type: 3}
_quests:
- {fileID: 11400000, guid: 4235b642a3ad91341a7cb42c6851293f, type: 2}
_inventory: {fileID: 11400000, guid: 59c84467f7726dc4587a8373b0936f03, type: 2}
_checkStepValidityEvent: {fileID: 11400000, guid: 71375bc63dd705044a6b0fc6ee5f2acd,
type: 2}
_endStepEvent: {fileID: 11400000, guid: de57bfb8f4b9de7489e0af77da306a8d, type: 2}
_endDialogueEvent: {fileID: 11400000, guid: b8f14d59bc3b10e4f9bdf1e65c3c6280, type: 2}
_startStepEvent: {fileID: 11400000, guid: ab5fce85191f90d449e132c92e099476, type: 2}
_winDialogueEvent: {fileID: 11400000, guid: dc2da1754c28ab9499cb6c7d72465e69, type: 2}
_loseDialogueEvent: {fileID: 11400000, guid: fcc99784052e5cc469b8c22c0674b051, type: 2}
_giveItemEvent: {fileID: 11400000, guid: c54b320c4205f1c49b296b878daf2097, type: 2}
_rewardItemEvent: {fileID: 11400000, guid: ceeec59dc461abd4f91dac5b07084d24, type: 2}
_questAnchor: {fileID: 11400000, guid: dacb138678b7c2344b59c68de5dc18db, type: 2}

24
UOP1_Project/Assets/Prefabs/Props/Door.prefab


m_Modifications:
- target: {fileID: -8679921383154817045, guid: 9c8891bc8ed142f4c93999c69eb6f4dc,
type: 3}
propertyPath: m_RootOrder
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 9c8891bc8ed142f4c93999c69eb6f4dc,
type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}

objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 9c8891bc8ed142f4c93999c69eb6f4dc,
type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 9c8891bc8ed142f4c93999c69eb6f4dc,
type: 3}
propertyPath: m_LocalRotation.y
value: 0
propertyPath: m_LocalRotation.w
value: 1
propertyPath: m_LocalRotation.z
propertyPath: m_LocalRotation.x
propertyPath: m_LocalRotation.w
value: 1
propertyPath: m_LocalRotation.y
value: 0
propertyPath: m_RootOrder
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 9c8891bc8ed142f4c93999c69eb6f4dc,

- target: {fileID: 919132149155446097, guid: 9c8891bc8ed142f4c93999c69eb6f4dc,
type: 3}
propertyPath: m_StaticEditorFlags
value: 4294967295
value: 123
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 9c8891bc8ed142f4c93999c69eb6f4dc, type: 3}

118
UOP1_Project/Assets/Prefabs/TownStructures/VillageHouse_Big.prefab


m_Modifications:
- target: {fileID: -8679921383154817045, guid: 736e23a0df4a27a46bd59ebce4bc3241,
type: 3}
propertyPath: m_RootOrder
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 736e23a0df4a27a46bd59ebce4bc3241,
type: 3}
propertyPath: m_LocalPosition.x
value: -0
objectReference: {fileID: 0}

objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 736e23a0df4a27a46bd59ebce4bc3241,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 736e23a0df4a27a46bd59ebce4bc3241,
type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}

objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 736e23a0df4a27a46bd59ebce4bc3241,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 736e23a0df4a27a46bd59ebce4bc3241,
type: 3}
propertyPath: m_RootOrder
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 736e23a0df4a27a46bd59ebce4bc3241,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}

objectReference: {fileID: 0}
- target: {fileID: 919132149155446097, guid: 736e23a0df4a27a46bd59ebce4bc3241,
type: 3}
propertyPath: m_StaticEditorFlags
value: 4294967295
propertyPath: m_Layer
value: 11
propertyPath: m_Layer
value: 11
propertyPath: m_StaticEditorFlags
value: 4294967295
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 736e23a0df4a27a46bd59ebce4bc3241, type: 3}

type: 3}
m_PrefabInstance: {fileID: 3675138951147787715}
m_PrefabAsset: {fileID: 0}
--- !u!4 &3785853945849639464 stripped
Transform:
m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 736e23a0df4a27a46bd59ebce4bc3241,
type: 3}
m_PrefabInstance: {fileID: 3675138951147787715}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &5173613188804942660
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 3785853945849639464}
m_Modifications:
- target: {fileID: 6267067302269190673, guid: 4c22401c0ede54b4b85cd2d15c17c16d,
type: 3}
propertyPath: m_RootOrder
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6267067302269190673, guid: 4c22401c0ede54b4b85cd2d15c17c16d,
type: 3}
propertyPath: m_LocalScale.x
value: 1.0791
objectReference: {fileID: 0}
- target: {fileID: 6267067302269190673, guid: 4c22401c0ede54b4b85cd2d15c17c16d,
type: 3}
propertyPath: m_LocalScale.y
value: 1.0791
objectReference: {fileID: 0}
- target: {fileID: 6267067302269190673, guid: 4c22401c0ede54b4b85cd2d15c17c16d,
type: 3}
propertyPath: m_LocalScale.z
value: 1.0791
objectReference: {fileID: 0}
- target: {fileID: 6267067302269190673, guid: 4c22401c0ede54b4b85cd2d15c17c16d,
type: 3}
propertyPath: m_LocalPosition.x
value: 0.55849
objectReference: {fileID: 0}
- target: {fileID: 6267067302269190673, guid: 4c22401c0ede54b4b85cd2d15c17c16d,
type: 3}
propertyPath: m_LocalPosition.y
value: -0.141
objectReference: {fileID: 0}
- target: {fileID: 6267067302269190673, guid: 4c22401c0ede54b4b85cd2d15c17c16d,
type: 3}
propertyPath: m_LocalPosition.z
value: 5.375
objectReference: {fileID: 0}
- target: {fileID: 6267067302269190673, guid: 4c22401c0ede54b4b85cd2d15c17c16d,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 6267067302269190673, guid: 4c22401c0ede54b4b85cd2d15c17c16d,
type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6267067302269190673, guid: 4c22401c0ede54b4b85cd2d15c17c16d,
type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6267067302269190673, guid: 4c22401c0ede54b4b85cd2d15c17c16d,
type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6267067302269190673, guid: 4c22401c0ede54b4b85cd2d15c17c16d,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6267067302269190673, guid: 4c22401c0ede54b4b85cd2d15c17c16d,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6267067302269190673, guid: 4c22401c0ede54b4b85cd2d15c17c16d,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6751678888415910059, guid: 4c22401c0ede54b4b85cd2d15c17c16d,
type: 3}
propertyPath: m_Name
value: Door
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 4c22401c0ede54b4b85cd2d15c17c16d, type: 3}

95
UOP1_Project/Assets/Prefabs/TownStructures/VillageHouse_Small.prefab


serializedVersion: 2
m_Size: {x: 4.5391707, y: 4.2804317, z: 3.903215}
m_Center: {x: -0.021530151, y: 2.0776358, z: 0.04750681}
--- !u!1001 &2179613708404965673
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 4979656168905934439}
m_Modifications:
- target: {fileID: 6267067302269190673, guid: 4c22401c0ede54b4b85cd2d15c17c16d,
type: 3}
propertyPath: m_RootOrder
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6267067302269190673, guid: 4c22401c0ede54b4b85cd2d15c17c16d,
type: 3}
propertyPath: m_LocalPosition.x
value: 0.487
objectReference: {fileID: 0}
- target: {fileID: 6267067302269190673, guid: 4c22401c0ede54b4b85cd2d15c17c16d,
type: 3}
propertyPath: m_LocalPosition.y
value: -0.068
objectReference: {fileID: 0}
- target: {fileID: 6267067302269190673, guid: 4c22401c0ede54b4b85cd2d15c17c16d,
type: 3}
propertyPath: m_LocalPosition.z
value: 1.805
objectReference: {fileID: 0}
- target: {fileID: 6267067302269190673, guid: 4c22401c0ede54b4b85cd2d15c17c16d,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 6267067302269190673, guid: 4c22401c0ede54b4b85cd2d15c17c16d,
type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6267067302269190673, guid: 4c22401c0ede54b4b85cd2d15c17c16d,
type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6267067302269190673, guid: 4c22401c0ede54b4b85cd2d15c17c16d,
type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6267067302269190673, guid: 4c22401c0ede54b4b85cd2d15c17c16d,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6267067302269190673, guid: 4c22401c0ede54b4b85cd2d15c17c16d,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6267067302269190673, guid: 4c22401c0ede54b4b85cd2d15c17c16d,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6751678888415910059, guid: 4c22401c0ede54b4b85cd2d15c17c16d,
type: 3}
propertyPath: m_Name
value: Door
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 4c22401c0ede54b4b85cd2d15c17c16d, type: 3}
--- !u!1001 &4796882927411913100
PrefabInstance:
m_ObjectHideFlags: 0

m_Modifications:
- target: {fileID: -8679921383154817045, guid: 8504f72a3f277da4fb261fb0b864d4c0,
type: 3}
propertyPath: m_RootOrder
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 8504f72a3f277da4fb261fb0b864d4c0,
type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}

objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 8504f72a3f277da4fb261fb0b864d4c0,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 8504f72a3f277da4fb261fb0b864d4c0,
type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}

objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 8504f72a3f277da4fb261fb0b864d4c0,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 8504f72a3f277da4fb261fb0b864d4c0,
type: 3}
propertyPath: m_RootOrder
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 8504f72a3f277da4fb261fb0b864d4c0,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}

type: 3}
m_PrefabInstance: {fileID: 4796882927411913100}
m_PrefabAsset: {fileID: 0}
--- !u!4 &4979656168905934439 stripped
Transform:
m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 8504f72a3f277da4fb261fb0b864d4c0,
type: 3}
m_PrefabInstance: {fileID: 4796882927411913100}
m_PrefabAsset: {fileID: 0}

13
UOP1_Project/Assets/Scenes/Initialization.unity


m_TrainingDataDestination: TrainingData
m_LightProbeSampleCountMultiplier: 4
m_LightingDataAsset: {fileID: 0}
m_UseShadowmask: 0
m_UseShadowmask: 1
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2

m_Script: {fileID: 11500000, guid: 43bf3a70578af0044a7af79dd1c44ea6, type: 3}
m_Name:
m_EditorClassIdentifier:
_PersistentManagersScene: {fileID: 11400000, guid: c2119785ce96367428081d6eee0d932b,
_persistentManagersScene: {fileID: 11400000, guid: c2119785ce96367428081d6eee0d932b,
_MenuToLoad:
_menuToLoad:
_showLoadScreen: 0
_MenuLoadChannel: {fileID: 11400000, guid: 33cec85652903d245b99985f9cec9841, type: 2}
_showLoadScreen: 1
_menuLoadChannel:
m_AssetGUID: 33cec85652903d245b99985f9cec9841
m_SubObjectName:
m_SubObjectType:
--- !u!4 &1266309721
Transform:
m_ObjectHideFlags: 0

998
UOP1_Project/Assets/Scenes/Locations/Beach.unity
文件差异内容过多而无法显示
查看文件

660
UOP1_Project/Assets/Scenes/Locations/Forest.unity
文件差异内容过多而无法显示
查看文件

174
UOP1_Project/Assets/Scenes/Locations/Glade.unity
文件差异内容过多而无法显示
查看文件

593
UOP1_Project/Assets/Scenes/Menus/MainMenu.unity


debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &384578945
GameObject:
--- !u!1001 &115741521
PrefabInstance:
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 384578947}
- component: {fileID: 384578946}
m_Layer: 0
m_Name: Directional Light
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!108 &384578946
Light:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 384578945}
m_Enabled: 1
serializedVersion: 10
m_Type: 1
m_Shape: 0
m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
m_Intensity: 1
m_Range: 10
m_SpotAngle: 30
m_InnerSpotAngle: 21.80208
m_CookieSize: 10
m_Shadows:
m_Type: 2
m_Resolution: -1
m_CustomResolution: -1
m_Strength: 1
m_Bias: 0.05
m_NormalBias: 0.4
m_NearPlane: 0.2
m_CullingMatrixOverride:
e00: 1
e01: 0
e02: 0
e03: 0
e10: 0
e11: 1
e12: 0
e13: 0
e20: 0
e21: 0
e22: 1
e23: 0
e30: 0
e31: 0
e32: 0
e33: 1
m_UseCullingMatrixOverride: 0
m_Cookie: {fileID: 0}
m_DrawHalo: 0
m_Flare: {fileID: 0}
m_RenderMode: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingLayerMask: 1
m_Lightmapping: 4
m_LightShadowCasterMode: 0
m_AreaSize: {x: 1, y: 1}
m_BounceIntensity: 1
m_ColorTemperature: 6570
m_UseColorTemperature: 0
m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
m_UseBoundingSphereOverride: 0
m_ShadowRadius: 0
m_ShadowAngle: 0
--- !u!4 &384578947
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 384578945}
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
m_LocalPosition: {x: 0, y: 3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1367871826}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 7961433267914593990, guid: 0b664a194840b8947ba233200964f991,
type: 3}
propertyPath: m_RootOrder
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7961433267914593990, guid: 0b664a194840b8947ba233200964f991,
type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7961433267914593990, guid: 0b664a194840b8947ba233200964f991,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7961433267914593990, guid: 0b664a194840b8947ba233200964f991,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7961433267914593990, guid: 0b664a194840b8947ba233200964f991,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 7961433267914593990, guid: 0b664a194840b8947ba233200964f991,
type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7961433267914593990, guid: 0b664a194840b8947ba233200964f991,
type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7961433267914593990, guid: 0b664a194840b8947ba233200964f991,
type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7961433267914593990, guid: 0b664a194840b8947ba233200964f991,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7961433267914593990, guid: 0b664a194840b8947ba233200964f991,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7961433267914593990, guid: 0b664a194840b8947ba233200964f991,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7961433267914593992, guid: 0b664a194840b8947ba233200964f991,
type: 3}
propertyPath: m_Name
value: MusicPlayer
objectReference: {fileID: 0}
- target: {fileID: 7961433267914593993, guid: 0b664a194840b8947ba233200964f991,
type: 3}
propertyPath: _thisSceneSO
value:
objectReference: {fileID: 11400000, guid: 431ff81b74b48fb4d9301fb76ca633dd,
type: 2}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 0b664a194840b8947ba233200964f991, type: 3}
--- !u!1 &403475996
GameObject:
m_ObjectHideFlags: 0

m_Children:
- {fileID: 1806157293}
m_Father: {fileID: 2140469183}
m_RootOrder: 3
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}

m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 403475996}
m_CullTransparentMesh: 0
--- !u!1001 &599522224
PrefabInstance:
--- !u!1 &589059405
GameObject:
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 40564194958535835, guid: 0fa3e82c4006e714e8023cbf85cc999e,
type: 3}
propertyPath: m_Name
value: MenuEditorInitializer
objectReference: {fileID: 0}
- target: {fileID: 40564194958535909, guid: 0fa3e82c4006e714e8023cbf85cc999e,
type: 3}
propertyPath: m_RootOrder
value: 0
objectReference: {fileID: 0}
- target: {fileID: 40564194958535909, guid: 0fa3e82c4006e714e8023cbf85cc999e,
type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 40564194958535909, guid: 0fa3e82c4006e714e8023cbf85cc999e,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 40564194958535909, guid: 0fa3e82c4006e714e8023cbf85cc999e,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 40564194958535909, guid: 0fa3e82c4006e714e8023cbf85cc999e,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 40564194958535909, guid: 0fa3e82c4006e714e8023cbf85cc999e,
type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 40564194958535909, guid: 0fa3e82c4006e714e8023cbf85cc999e,
type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 40564194958535909, guid: 0fa3e82c4006e714e8023cbf85cc999e,
type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 40564194958535909, guid: 0fa3e82c4006e714e8023cbf85cc999e,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 40564194958535909, guid: 0fa3e82c4006e714e8023cbf85cc999e,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 40564194958535909, guid: 0fa3e82c4006e714e8023cbf85cc999e,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 0fa3e82c4006e714e8023cbf85cc999e, type: 3}
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 589059406}
- component: {fileID: 589059408}
- component: {fileID: 589059407}
m_Layer: 5
m_Name: Text
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &589059406
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 589059405}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 763294101}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &589059407
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 589059405}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_RaycastTarget: 1
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
m_FontSize: 40
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 4
m_MaxSize: 60
m_Alignment: 4
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: Reset Save Data
--- !u!222 &589059408
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 589059405}
m_CullTransparentMesh: 0
--- !u!1 &622178817
GameObject:
m_ObjectHideFlags: 0

m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 2140469183}
m_RootOrder: 4
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 1, y: 1}

m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 684748716}
m_CullTransparentMesh: 0
--- !u!1 &763294100
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 763294101}
- component: {fileID: 763294105}
- component: {fileID: 763294104}
- component: {fileID: 763294103}
m_Layer: 5
m_Name: Reset Save Game
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &763294101
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 763294100}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 589059406}
m_Father: {fileID: 2140469183}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 280.6552, y: -81}
m_SizeDelta: {x: 240.65524, y: 116.64508}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &763294103
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 763294100}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Navigation:
m_Mode: 3
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0}
m_SelectedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0}
m_AnimationTriggers:
m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: 763294104}
m_OnClick:
m_PersistentCalls:
m_Calls:
- m_Target: {fileID: 1967191115}
m_MethodName: OnResetSaveDataPress
m_Mode: 1
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
- m_Target: {fileID: 0}
m_MethodName: SetActive
m_Mode: 6
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
--- !u!114 &763294104
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 763294100}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!222 &763294105
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 763294100}
m_CullTransparentMesh: 0
--- !u!1 &821853654
GameObject:
m_ObjectHideFlags: 0

m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 2140469183}
m_RootOrder: 5
m_RootOrder: 6
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 1, y: 0}
m_AnchorMax: {x: 1, y: 0}

m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 821853654}
m_CullTransparentMesh: 0
--- !u!1001 &826448973
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 40564194958535835, guid: 54d1f8b93400ea64d97c276fab375df3,
type: 3}
propertyPath: m_Name
value: EditorInitializer
objectReference: {fileID: 0}
- target: {fileID: 40564194958535909, guid: 54d1f8b93400ea64d97c276fab375df3,
type: 3}
propertyPath: m_RootOrder
value: 1
objectReference: {fileID: 0}
- target: {fileID: 40564194958535909, guid: 54d1f8b93400ea64d97c276fab375df3,
type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 40564194958535909, guid: 54d1f8b93400ea64d97c276fab375df3,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 40564194958535909, guid: 54d1f8b93400ea64d97c276fab375df3,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 40564194958535909, guid: 54d1f8b93400ea64d97c276fab375df3,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 40564194958535909, guid: 54d1f8b93400ea64d97c276fab375df3,
type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 40564194958535909, guid: 54d1f8b93400ea64d97c276fab375df3,
type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 40564194958535909, guid: 54d1f8b93400ea64d97c276fab375df3,
type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 40564194958535909, guid: 54d1f8b93400ea64d97c276fab375df3,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 40564194958535909, guid: 54d1f8b93400ea64d97c276fab375df3,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 40564194958535909, guid: 54d1f8b93400ea64d97c276fab375df3,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7222522106795826365, guid: 54d1f8b93400ea64d97c276fab375df3,
type: 3}
propertyPath: _thisSceneSO
value:
objectReference: {fileID: 11400000, guid: 431ff81b74b48fb4d9301fb76ca633dd,
type: 2}
- target: {fileID: 7222522106795826365, guid: 54d1f8b93400ea64d97c276fab375df3,
type: 3}
propertyPath: _loadSceneEventChannel.m_AssetGUID
value: 33cec85652903d245b99985f9cec9841
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 54d1f8b93400ea64d97c276fab375df3, type: 3}
--- !u!1 &1228641979
GameObject:
m_ObjectHideFlags: 0

m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: -123.1}
m_AnchoredPosition: {x: 0, y: -123.1001}
m_SizeDelta: {x: 0, y: 280.2737}
m_Pivot: {x: 0.5, y: 1}
--- !u!114 &1228641981

m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: -49.1}
m_AnchoredPosition: {x: 0, y: -49.100098}
m_SizeDelta: {x: 0, y: 157.00864}
m_Pivot: {x: 0.5, y: 1}
--- !u!114 &1312122617

m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1312122615}
m_CullTransparentMesh: 0
--- !u!1 &1367871825
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1367871826}
m_Layer: 0
m_Name: MainMenuElements
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1367871826
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1367871825}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 384578947}
- {fileID: 2140469183}
- {fileID: 1577385654}
- {fileID: 1419319621}
m_Father: {fileID: 0}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1419319618
GameObject:
m_ObjectHideFlags: 0

m_LocalPosition: {x: 351.56995, y: 142, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1367871826}
m_RootOrder: 3
m_Father: {fileID: 0}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!81 &1419319622
AudioListener:

m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1367871826}
m_RootOrder: 2
m_Father: {fileID: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1806157292
GameObject:

m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
- m_Target: {fileID: 1367871825}
- m_Target: {fileID: 0}
m_MethodName: SetActive
m_Mode: 6
m_Arguments:

locationsToLoad:
- {fileID: 11400000, guid: 2f386bbc670c05145834a0f9c7d55798, type: 2}
showLoadScreen: 1
saveSystem: {fileID: 11400000, guid: edc355c4a7d5028408d322b90814e19e, type: 2}
startText: {fileID: 622178819}
resetSaveDataButton: {fileID: 763294103}
--- !u!1 &2140469179
GameObject:
m_ObjectHideFlags: 0

- {fileID: 1312122616}
- {fileID: 1228641980}
- {fileID: 1967191111}
- {fileID: 763294101}
m_Father: {fileID: 1367871826}
m_RootOrder: 1
m_Father: {fileID: 0}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}

963
UOP1_Project/Assets/Scenes/WIP/ArtShowcase.unity
文件差异内容过多而无法显示
查看文件

213
UOP1_Project/Assets/Scenes/WIP/TestingGround.unity
文件差异内容过多而无法显示
查看文件

7
UOP1_Project/Assets/Scenes/Whiteboxing/GeneralMapMediumMultipleScenes/Materials/poster.mat


m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- Texture2D_300EB541:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BaseMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}

m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTexture:
m_Texture: {fileID: 2800000, guid: 74837651318b6214ca56771bbecdba90, type: 3}
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:

m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- Vector1_8606F96E: 0
- _AlphaClip: 0
- _Blend: 0
- _BumpScale: 1

2
UOP1_Project/Assets/ScriptableObjects/Audio/AudioConfigurations/2.5DSFX_Config.asset


m_Script: {fileID: 11500000, guid: b357a35b19afa6e4ca9ed9cc1830f6de, type: 3}
m_Name: 2.5DSFX_Config
m_EditorClassIdentifier:
OutputAudioMixerGroup: {fileID: 8911742078530553623, guid: 548a7f001ca6d3d4cb67c8edf84f62a3,
OutputAudioMixerGroup: {fileID: -6246855377066869883, guid: 548a7f001ca6d3d4cb67c8edf84f62a3,
type: 2}
_priorityLevel: 128
Mute: 0

2
UOP1_Project/Assets/ScriptableObjects/Audio/AudioConfigurations/UISFX_Config.asset


m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b357a35b19afa6e4ca9ed9cc1830f6de, type: 3}
m_Name: 2DSFX_Config
m_Name: UISFX_Config
m_EditorClassIdentifier:
OutputAudioMixerGroup: {fileID: 8911742078530553623, guid: 548a7f001ca6d3d4cb67c8edf84f62a3,
type: 2}

10
UOP1_Project/Assets/ScriptableObjects/SceneData/Gameplay.asset


m_Script: {fileID: 11500000, guid: a4a9aff793e557d4790d9a834c6560bc, type: 3}
m_Name: Gameplay
m_EditorClassIdentifier:
sceneAsset: {fileID: 102900000, guid: 9a863f9bc60514821bc17f41d9f0162c, type: 3}
scenePath: Assets/Scenes/Gameplay.unity
shortDescription: Gameplay elements including UI and inventory managers
music: {fileID: 0}
description: Gameplay elements including UI and inventory manager
sceneType: 4
sceneReference:
m_AssetGUID: 9a863f9bc60514821bc17f41d9f0162c
m_SubObjectName:
m_SubObjectType:

12
UOP1_Project/Assets/ScriptableObjects/SceneData/Initialization.asset


m_Script: {fileID: 11500000, guid: 7eabf0d1b44567046bb98dff8a1cd7ac, type: 3}
m_Name: Initialization
m_EditorClassIdentifier:
sceneAsset: {fileID: 102900000, guid: e8df4c5a458acc5489b2865e6b789224, type: 3}
scenePath: Assets/Scenes/Initialization.unity
shortDescription: The scene from where the game starts and it is responsible for
loading PersistentManagers scene and raises the event to load the main menu.
music: {fileID: 0}
description: The scene from where the game starts and it is responsible for loading
PersistentManagers scene and raises the event to load the main menu.
sceneType: 2
sceneReference:
m_AssetGUID: e8df4c5a458acc5489b2865e6b789224
m_SubObjectName:
m_SubObjectType:

14
UOP1_Project/Assets/ScriptableObjects/SceneData/Locations/Beach.asset


m_Script: {fileID: 11500000, guid: 8db63739a6674d74e8e232347422172f, type: 3}
m_Name: Beach
m_EditorClassIdentifier:
sceneAsset: {fileID: 102900000, guid: dfaf60263d5c5dc4e80e2793f4328b32, type: 3}
scenePath: Assets/Scenes/Locations/Beach.unity
shortDescription: The level to find X
music: {fileID: 0}
_guid: 2f386bbc670c05145834a0f9c7d55798
description:
sceneType: 0
sceneReference:
m_AssetGUID: dfaf60263d5c5dc4e80e2793f4328b32
m_SubObjectName:
m_SubObjectType:
locationName:
m_TableReference:
m_TableCollectionName: GUID:5f392fa78068846188a7ed5595276c8f

enemiesCount: 0
m_FallbackState: 0
musicTrack: {fileID: 11400000, guid: 8581dd3dfa47c5c46b3ddf5a2d6f6e4e, type: 2}

14
UOP1_Project/Assets/ScriptableObjects/SceneData/Locations/Forest.asset


m_Script: {fileID: 11500000, guid: 8db63739a6674d74e8e232347422172f, type: 3}
m_Name: Forest
m_EditorClassIdentifier:
sceneAsset: {fileID: 102900000, guid: 3a816f06c17361b4398583570bcbf8eb, type: 3}
scenePath: Assets/Scenes/Locations/Forest.unity
shortDescription: Find Y
music: {fileID: 0}
_guid: d102ba8fe3b291249aeb9de4b95c1904
description:
sceneType: 0
sceneReference:
m_AssetGUID: 3a816f06c17361b4398583570bcbf8eb
m_SubObjectName:
m_SubObjectType:
locationName:
m_TableReference:
m_TableCollectionName: GUID:5f392fa78068846188a7ed5595276c8f

enemiesCount: 0
m_FallbackState: 0
musicTrack: {fileID: 11400000, guid: 7839ee0fad6280c4c991c04b7f0dbe5d, type: 2}

18
UOP1_Project/Assets/ScriptableObjects/SceneData/Locations/Glade.asset


m_Script: {fileID: 11500000, guid: 8db63739a6674d74e8e232347422172f, type: 3}
m_Name: Glade
m_EditorClassIdentifier:
sceneAsset: {fileID: 102900000, guid: 92a4a277a346e4344b629ad5613f7c51, type: 3}
scenePath: Assets/Scenes/Locations/Glade.unity
shortDescription: Glade Location
music: {fileID: 0}
_guid: 3902a4362b3a4fb4ab5ce5dcc07d8427
description:
sceneType: 0
sceneReference:
m_AssetGUID: 92a4a277a346e4344b629ad5613f7c51
m_SubObjectName:
m_SubObjectType:
m_TableCollectionName: GUID:5f392fa78068846188a7ed5595276c8f
m_TableCollectionName:
m_KeyId: 51471441920
m_KeyId: 0
enemiesCount: 0
m_FallbackState: 0
musicTrack: {fileID: 11400000, guid: cd79ec002dc5c1942b30e2903393be0d, type: 2}

13
UOP1_Project/Assets/ScriptableObjects/SceneData/Menus/MainMenu.asset


m_Script: {fileID: 11500000, guid: 3546e1f9ebb6f054fb677b86f543542b, type: 3}
m_Name: MainMenu
m_EditorClassIdentifier:
sceneAsset: {fileID: 102900000, guid: df490f8a21305b549b67b8301af79724, type: 3}
scenePath: Assets/Scenes/Menus/MainMenu.unity
shortDescription: The main menu of the game
music: {fileID: 0}
menuType: 0
_guid: 431ff81b74b48fb4d9301fb76ca633dd
description: Main/title menu, the only menu that exists as a standalone scene
sceneType: 1
sceneReference:
m_AssetGUID: df490f8a21305b549b67b8301af79724
m_SubObjectName:
m_SubObjectType:
musicTrack: {fileID: 11400000, guid: 755065c424b9ce346977ffa54ae3c9c1, type: 2}

12
UOP1_Project/Assets/ScriptableObjects/SceneData/PersistentManagers.asset


m_Script: {fileID: 11500000, guid: 7eabf0d1b44567046bb98dff8a1cd7ac, type: 3}
m_Name: PersistentManagers
m_EditorClassIdentifier:
sceneAsset: {fileID: 102900000, guid: 969b7f174e8c76843aa3fcdbade0487b, type: 3}
scenePath: Assets/Scenes/PersistentManagers.unity
shortDescription: The scene that contains all the persistent managers in the game
like scene loader and Audio manager etc...
music: {fileID: 0}
description: The scene that contains all the persistent managers in the game like
scene loader and Audio manager etc...
sceneType: 3
sceneReference:
m_AssetGUID: 969b7f174e8c76843aa3fcdbade0487b
m_SubObjectName:
m_SubObjectType:

10
UOP1_Project/Assets/ScriptableObjects/SceneData/WIP/ArtShowcase.asset


m_Script: {fileID: 11500000, guid: a4a9aff793e557d4790d9a834c6560bc, type: 3}
m_Name: ArtShowcase
m_EditorClassIdentifier:
sceneAsset: {fileID: 102900000, guid: 23a95b47e693c9a4795d76d4ae90fd5e, type: 3}
scenePath: Assets/Scenes/WIP/ArtShowcase.unity
shortDescription: Just a demo scene to see art assets, not used in the game
music: {fileID: 0}
description: Just a demo scene to see art assets, not used in the game
sceneType: 5
sceneReference:
m_AssetGUID: 23a95b47e693c9a4795d76d4ae90fd5e
m_SubObjectName:
m_SubObjectType:

14
UOP1_Project/Assets/ScriptableObjects/SceneData/WIP/TestingGround.asset


m_Script: {fileID: 11500000, guid: 8db63739a6674d74e8e232347422172f, type: 3}
m_Name: TestingGround
m_EditorClassIdentifier:
sceneAsset: {fileID: 102900000, guid: 1e57caa7d7ed5e24a88cb3b5c309cc65, type: 3}
scenePath: Assets/Scenes/WIP/TestingGround.unity
shortDescription:
music: {fileID: 0}
_guid: 1514f833150a79e4c9d242f58bdbcbc0
description: Just a WIP scene, not used in the game
sceneType: 0
sceneReference:
m_AssetGUID: 1e57caa7d7ed5e24a88cb3b5c309cc65
m_SubObjectName:
m_SubObjectType:
locationName:
m_TableReference:
m_TableCollectionName:

enemiesCount: 0
m_FallbackState: 0
musicTrack: {fileID: 11400000, guid: cdd30f7c64c86384dae627b738e83219, type: 2}

11
UOP1_Project/Assets/Scripts/Audio/AudioCue.cs


StartCoroutine(PlayDelayed());
}
private void OnDisable()
{
_playOnStart = false;
}
//The wait allows the AudioManager to be ready for play requests
PlayAudioCue();
//This additional check prevents the AudioCue from playing if the object is disabled or the scene unloaded
//This prevents playing a looping AudioCue which then would be never stopped
if (_playOnStart)
PlayAudioCue();
}
public void PlayAudioCue()

101
UOP1_Project/Assets/Scripts/Audio/AudioManager.cs


using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;
using System;
public class AudioManager : MonoBehaviour
{

[Range(0f, 1f)]
[SerializeField] private float _sfxVolume = 1f;
private SoundEmitterList _soundEmitterList;
private SoundEmitterVault _soundEmitterVault;
private SoundEmitter _musicSoundEmitter;
_soundEmitterList = new SoundEmitterList();
RegisterChannel(_SFXEventChannel);
RegisterChannel(_musicEventChannel); //TODO: Treat music requests differently?
_soundEmitterVault = new SoundEmitterVault();
private void OnEnable()
{
_SFXEventChannel.OnAudioCuePlayRequested += PlayAudioCue;
_SFXEventChannel.OnAudioCueStopRequested += StopAudioCue;
_SFXEventChannel.OnAudioCueFinishRequested += FinishAudioCue;
_musicEventChannel.OnAudioCuePlayRequested += PlayMusicTrack;
_musicEventChannel.OnAudioCueStopRequested += StopMusic;
}
UnregisterChannel(_SFXEventChannel);
UnregisterChannel(_musicEventChannel);
_SFXEventChannel.OnAudioCuePlayRequested -= PlayAudioCue;
_SFXEventChannel.OnAudioCueStopRequested -= StopAudioCue;
_SFXEventChannel.OnAudioCueFinishRequested -= FinishAudioCue;
_musicEventChannel.OnAudioCuePlayRequested -= PlayMusicTrack;
}
/// <summary>

}
}
private void RegisterChannel(AudioCueEventChannelSO audioCueEventChannel)
{
audioCueEventChannel.OnAudioCuePlayRequested += PlayAudioCue;
audioCueEventChannel.OnAudioCueStopRequested += StopAudioCue;
audioCueEventChannel.OnAudioCueFinishRequested += FinishAudioCue;
}
private void UnregisterChannel(AudioCueEventChannelSO audioCueEventChannel)
{
audioCueEventChannel.OnAudioCuePlayRequested -= PlayAudioCue;
audioCueEventChannel.OnAudioCueStopRequested -= StopAudioCue;
audioCueEventChannel.OnAudioCueFinishRequested -= FinishAudioCue;
}
// Both MixerValueNormalized and NormalizedToMixerValue functions are used for easier transformations
/// when using UI sliders normalized format
private float MixerValueToNormalized(float mixerValue)

return (normalizedValue - 1f) * 80f;
}
private AudioCueKey PlayMusicTrack(AudioCueSO audioCue, AudioConfigurationSO audioConfiguration, Vector3 positionInSpace)
{
float fadeDuration = 2f;
float startTime = 0f;
if (_musicSoundEmitter != null && _musicSoundEmitter.IsPlaying())
{
AudioClip songToPlay = audioCue.GetClips()[0];
if (_musicSoundEmitter.GetClip() == songToPlay)
return AudioCueKey.Invalid;
//Music is already playing, need to fade it out
startTime = _musicSoundEmitter.FadeMusicOut(fadeDuration);
}
_musicSoundEmitter = _pool.Request();
_musicSoundEmitter.FadeMusicIn(audioCue.GetClips()[0], audioConfiguration, 1f, startTime);
_musicSoundEmitter.OnSoundFinishedPlaying += StopMusicEmitter;
return AudioCueKey.Invalid; //No need to return a valid key for music
}
private bool StopMusic(AudioCueKey key)
{
if (_musicSoundEmitter != null && _musicSoundEmitter.IsPlaying())
{
_musicSoundEmitter.Stop();
return true;
}
else
return false;
}
/// <summary>
/// Plays an AudioCue by requesting the appropriate number of SoundEmitters from the pool.
/// </summary>

}
}
return _soundEmitterList.Add(audioCue, soundEmitterArray);
return _soundEmitterVault.Add(audioCue, soundEmitterArray);
public bool FinishAudioCue(AudioCueKey emitterKey)
public bool FinishAudioCue(AudioCueKey audioCueKey)
bool isFound = _soundEmitterList.Get(emitterKey, out SoundEmitter[] soundEmitters);
bool isFound = _soundEmitterVault.Get(audioCueKey, out SoundEmitter[] soundEmitters);
if (isFound)
{

soundEmitters[i].OnSoundFinishedPlaying += OnSoundEmitterFinishedPlaying;
}
}
else
{
Debug.LogWarning("Finishing an AudioCue was requested, but the AudioCue was not found.");
public bool StopAudioCue(AudioCueKey emitterKey)
public bool StopAudioCue(AudioCueKey audioCueKey)
bool isFound = _soundEmitterList.Get(emitterKey, out SoundEmitter[] soundEmitters);
bool isFound = _soundEmitterVault.Get(audioCueKey, out SoundEmitter[] soundEmitters);
if (isFound)
{

}
_soundEmitterList.Remove(emitterKey);
_soundEmitterVault.Remove(audioCueKey);
}
return isFound;

private void StopAndCleanEmitter(SoundEmitter soundEmitter)
{
if (soundEmitter.IsFinishing())
if (!soundEmitter.IsLooping())
//TODO: is the above enough?
//_soundEmitterVault.Remove(audioCueKey); is never called if StopAndClean is called after a Finish event
//How is the key removed from the vault?
//TODO: Add methods to play and cross-fade music, or to play individual sounds?
private void StopMusicEmitter(SoundEmitter soundEmitter)
{
soundEmitter.OnSoundFinishedPlaying -= StopMusicEmitter;
_pool.Return(soundEmitter);
}
}

56
UOP1_Project/Assets/Scripts/Audio/SoundEmitters/SoundEmitter.cs


using System.Collections;
using DG.Tweening;
using System;
using System.Collections;
using UnityEngine;
using UnityEngine.Events;

settings.ApplyTo(_audioSource);
_audioSource.transform.position = position;
_audioSource.loop = hasToLoop;
_audioSource.time = 0f; //Reset in case this AudioSource is being reused for a short SFX after being used for a long music track
_audioSource.Play();
if (!hasToLoop)

}
public void FadeMusicIn(AudioClip musicClip, AudioConfigurationSO settings, float duration, float startTime = 0f)
{
PlayAudioClip(musicClip, settings, true);
_audioSource.volume = 0f;
//Start the clip at the same time the previous one left, if length allows
//TODO: find a better way to sync fading songs
if (startTime <= _audioSource.clip.length)
_audioSource.time = startTime;
_audioSource.DOFade(1f, duration);
}
public float FadeMusicOut(float duration)
{
_audioSource.DOFade(0f, duration).onComplete += OnFadeOutComplete;
return _audioSource.time;
}
private void OnFadeOutComplete()
{
NotifyBeingDone();
}
/// <summary>
/// Used to check which music track is being played.
/// </summary>
public AudioClip GetClip()
{
return _audioSource.clip;
}
/// <summary>
/// Used when the game is unpaused, to pick up SFX from where they left.
/// </summary>

_audioSource.Pause();
}
/// <summary>
/// Used when the SFX finished playing. Called by the <c>AudioManager</c>.
/// </summary>
public void Stop() // Redundant?
public void Stop()
{
_audioSource.Stop();
}

}
}
public bool IsInUse()
public bool IsPlaying()
{
return _audioSource.isPlaying;
}

return _audioSource.loop;
}
public bool IsFinishing()
{
return !_audioSource.loop;
}
NotifyBeingDone();
}
private void NotifyBeingDone()
{
OnSoundFinishedPlaying.Invoke(this); // The AudioManager will pick this up
}
}

11
UOP1_Project/Assets/Scripts/Audio/SoundEmitters/SoundEmitterVault.cs


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine.Assertions;
using System.Collections.Generic;
public class SoundEmitterList
public class SoundEmitterVault
public SoundEmitterList()
public SoundEmitterVault()
{
_emittersKey = new List<AudioCueKey>();
_emittersList = new List<SoundEmitter[]>();

4
UOP1_Project/Assets/Scripts/Characters/StateMachine/Actions/ControlWalkingParticlesActionSO.cs


public class ControlWalkingParticlesAction : StateAction
{
//Component references
private DustParticlesController _dustController;
private PlayerEffectController _dustController;
_dustController = stateMachine.GetComponent<DustParticlesController>();
_dustController = stateMachine.GetComponent<PlayerEffectController>();
}
public override void OnStateEnter()

2
UOP1_Project/Assets/Scripts/Characters/StateMachine/Actions/DestroyEntitySO.cs


public override void OnStateEnter()
{
GameObject.Destroy(_gameObject, 0.1f);
GameObject.Destroy(_gameObject);
}
}

4
UOP1_Project/Assets/Scripts/Characters/StateMachine/Actions/PlayJumpParticlesActionSO.cs


public class PlayJumpParticlesAction : StateAction
{
//Component references
private DustParticlesController _dustController;
private PlayerEffectController _dustController;
_dustController = stateMachine.GetComponent<DustParticlesController>();
_dustController = stateMachine.GetComponent<PlayerEffectController>();
}
public override void OnStateEnter()

4
UOP1_Project/Assets/Scripts/Characters/StateMachine/Actions/PlayLandParticlesActionSO.cs


public class PlayLandParticlesAction : StateAction
{
//Component references
private DustParticlesController _dustController;
private PlayerEffectController _dustController;
private Transform _transform;
private float _coolDown = 0.3f;

public override void Awake(StateMachine stateMachine)
{
_dustController = stateMachine.GetComponent<DustParticlesController>();
_dustController = stateMachine.GetComponent<PlayerEffectController>();
_transform = stateMachine.transform;
}

4
UOP1_Project/Assets/Scripts/Characters/StateMachine/Actions/PlayLiftoffJumpParticlesActionSO.cs


public class PlayLiftoffJumpParticlesAction : StateAction
{
//Component references
private DustParticlesController _dustController;
private PlayerEffectController _dustController;
_dustController = stateMachine.GetComponent<DustParticlesController>();
_dustController = stateMachine.GetComponent<PlayerEffectController>();
}
public override void OnStateEnter()

4
UOP1_Project/Assets/Scripts/Dialogues/DialogueDataSO.cs


public List<Choice> Choices => _choices;
public DialogueType DialogueType => _dialogueType;
#if UNITY_EDITOR
//TODO: Add support for branching conversations
// Maybe add 2 (or more) special line slots which represent a choice in a conversation
// Each line would also have an event associated, or another Dialogue

}
}
#endif
[Serializable]
public class Choice

91
UOP1_Project/Assets/Scripts/Editor/Pathway/PathwayEditor.cs


using UnityEngine;
using UnityEngine.AI;
using System.Linq;
[CustomEditor(typeof(PathwayConfigSO))]
[CustomEditor(typeof(Pathway))]
private PathwayConfigSO _pathway;
private Pathway _pathway;
private PathwayHandles _pathwayHandles;
private PathWayNavMeshUI _pathWayNavMeshUI;
private enum LIST_MODIFICATION { ADD, SUPP, DRAG, OTHER };
private LIST_MODIFICATION _currentListModification;
private int _indexCurrentModification;
public void OnSceneGUI(SceneView sceneView)
public void OnSceneGUI()
PathwayGizmos.DrawHandlesPath(_pathway);
int index = _pathwayHandles.DisplayHandles();
_pathWayNavMeshUI.RealTime(index);
}
public override void OnInspectorGUI()

_reorderableList.DoLayoutList();
_pathWayNavMeshUI.OnInspectorGUI();
Tools.hidden = _pathway.HidePathway;
serializedObject.ApplyModifiedProperties();
}

_reorderableList.onAddCallback += AddItem;
_reorderableList.onRemoveCallback += RemoveItem;
_reorderableList.onChangedCallback += ListModified;
_pathway = (target as PathwayConfigSO);
if (CheckNavMeshExistence())
{
SceneView.duringSceneGui += this.OnSceneGUI;
}
else
{
Debug.LogWarning("Pathway edition not available on this scene. NavMesh baked data missing.");
}
_reorderableList.onMouseDragCallback += DragItem;
_pathway = (target as Pathway);
_pathWayNavMeshUI = new PathWayNavMeshUI(_pathway);
_pathwayHandles = new PathwayHandles(_pathway);
_currentListModification = LIST_MODIFICATION.OTHER;
}
private void OnDisable()

_reorderableList.onAddCallback -= AddItem;
_reorderableList.onRemoveCallback -= RemoveItem;
_reorderableList.onChangedCallback -= ListModified;
SceneView.duringSceneGui -= this.OnSceneGUI;
_reorderableList.onMouseDragCallback -= DragItem;
_pathway.waypoints = _pathway.Waypoints.Select(x => x.waypoint).ToArray();
}
private void DrawHeader(Rect rect)

private void DrawElement(Rect rect, int index, bool active, bool focused)
{
SerializedProperty item = _reorderableList.serializedProperty.GetArrayElementAtIndex(index);
SerializedProperty item = _reorderableList.serializedProperty.GetArrayElementAtIndex(index).FindPropertyRelative("waypoint");
item.vector3Value = EditorGUI.Vector3Field(rect, Pathway.FIELD_LABEL + index, item.vector3Value);
}

if (index < 0)
if (index > -1 && list.serializedProperty.arraySize >= 1)
index = list.serializedProperty.arraySize - 1;
}
if (list.serializedProperty.arraySize >= 1)
{
Vector3 previous = (list.serializedProperty.GetArrayElementAtIndex(index).vector3Value + list.serializedProperty.GetArrayElementAtIndex((index + 1) % list.serializedProperty.arraySize).vector3Value) / 2;
list.serializedProperty.GetArrayElementAtIndex(index + 1).vector3Value = new Vector3(previous.x, previous.y, previous.z);
Vector3 previous = list.serializedProperty.GetArrayElementAtIndex(index).FindPropertyRelative("waypoint").vector3Value;
list.serializedProperty.GetArrayElementAtIndex(index + 1).FindPropertyRelative("waypoint").vector3Value = new Vector3(previous.x + 2, previous.y, previous.z + 2);
_indexCurrentModification = index + 1;
Vector3 previous = Vector3.zero;
list.serializedProperty.GetArrayElementAtIndex(list.serializedProperty.arraySize - 1).vector3Value = new Vector3(previous.x, previous.y, previous.z);
Vector3 previous = _pathway.transform.position;
list.serializedProperty.GetArrayElementAtIndex(list.serializedProperty.arraySize - 1).FindPropertyRelative("waypoint").vector3Value = new Vector3(previous.x + 2, previous.y, previous.z + 2);
_indexCurrentModification = list.serializedProperty.arraySize - 1;
_currentListModification = LIST_MODIFICATION.ADD;
list.index++;
}

{
list.index--;
}
_indexCurrentModification = index - 1;
_currentListModification = LIST_MODIFICATION.SUPP;
}
private void DragItem(ReorderableList list)
{
_indexCurrentModification = list.index;
_currentListModification = LIST_MODIFICATION.DRAG;
switch (_currentListModification)
{
case LIST_MODIFICATION.ADD:
_pathWayNavMeshUI.UpdatePathAt(_indexCurrentModification);
break;
case LIST_MODIFICATION.SUPP:
if (list.serializedProperty.arraySize > 1)
{
_pathWayNavMeshUI.UpdatePathAt((list.serializedProperty.arraySize + _indexCurrentModification) % list.serializedProperty.arraySize);
}
break;
case LIST_MODIFICATION.DRAG:
_pathWayNavMeshUI.UpdatePathAt(list.index);
_pathWayNavMeshUI.UpdatePathAt(_indexCurrentModification);
break;
default:
break;
}
_currentListModification = LIST_MODIFICATION.OTHER;
}
private void DoUndo()

{
_reorderableList.index = _reorderableList.serializedProperty.arraySize - 1;
}
}
private bool CheckNavMeshExistence()
{
return NavMesh.SamplePosition(Vector3.zero, out NavMeshHit hit, 1000.0f, NavMesh.AllAreas);
_pathWayNavMeshUI.GeneratePath();
}
}

2
UOP1_Project/Assets/Scripts/Editor/Pathway/PathwayEditor.cs.meta


fileFormatVersion: 2
guid: 69db5c2486715ce408863f0c9c620ca8
guid: c708a9ee9f8e6ce4fbbeca9f47bd420b
MonoImporter:
externalObjects: {}
serializedVersion: 2

109
UOP1_Project/Assets/Scripts/Editor/Pathway/PathwayGizmos.cs


using UnityEngine;
using UnityEditor;
using UnityEngine.AI;
using System.Collections.Generic;
public static void DrawHandlesPath(PathwayConfigSO pathway)
[DrawGizmo(GizmoType.Selected)]
private static void DrawGizmosSelected(Pathway pathway, GizmoType gizmoType)
EditorGUI.BeginChangeCheck();
List<Vector3> pathwayEditorDisplay = new List<Vector3>();
// Snap the waypoints on the NavMesh
for (int i = 0; i < pathway.Waypoints.Count; i++)
if (!pathway.ToggledNavMeshDisplay)
NavMesh.SamplePosition(pathway.Waypoints[i], out NavMeshHit hit, 99.0f, NavMesh.AllAreas);
pathwayEditorDisplay.Add(hit.position);
DrawHandlesPath(pathway);
// Only one waypoint use case.
if (pathway.Waypoints.Count == 1)
else
DrawWaypointLabel(pathway, pathway.Waypoints, 0);
pathway.Waypoints[0] = Handles.PositionHandle(pathway.Waypoints[0], Quaternion.identity);
DrawNavMeshPath(pathway);
// All the other use cases where a path exists.
for (int index = 0; index < pathway.Waypoints.Count && pathway.Waypoints.Count > 1; index++)
DrawHitPoints(pathway);
}
private static void DrawLabel(Pathway pathway, Vector3 path, int index)
{
GUIStyle style = new GUIStyle();
Vector3 textHeight = Vector3.up;
style.normal.textColor = pathway.TextColor;
style.fontSize = pathway.TextSize;
Handles.Label(path + textHeight, index.ToString(), style);
}
private static void DrawHandlesPath(Pathway pathway)
{
Handles.color = pathway.LineColor;
if (pathway.Waypoints.Count != 0)
int nextIndex = (index + 1) % pathway.Waypoints.Count;
DrawWaypointLabel(pathway, pathway.Waypoints, index);
List<Vector3> navMeshPath = new List<Vector3>();
NavMeshPath navPath = new NavMeshPath();
NavMesh.CalculatePath(pathwayEditorDisplay[index], pathwayEditorDisplay[nextIndex], NavMesh.AllAreas, navPath);
using (new Handles.DrawingScope(pathway.LineColor))
DrawLabel(pathway, pathway.Waypoints[0].waypoint, 0);
if (pathway.Waypoints.Count > 1)
for (int j = 0; j < navPath.corners.Length - 1; j++)
for (int i = 1; i < pathway.Waypoints.Count; i++)
Handles.DrawDottedLine(navPath.corners[j], navPath.corners[j + 1], 2);
DrawLabel(pathway, pathway.Waypoints[i].waypoint, i);
Handles.DrawDottedLine(pathway.Waypoints[i - 1].waypoint, pathway.Waypoints[i].waypoint, 2);
}
if (pathway.Waypoints.Count > 2)
{
Handles.DrawDottedLine(pathway.Waypoints[0].waypoint, pathway.Waypoints[pathway.Waypoints.Count - 1].waypoint, 2);
// Display handles pointing into the path forward direction (Blue handle)
if (navPath.corners.Length > 1)
{
pathway.Waypoints[index] = Handles.PositionHandle(pathway.Waypoints[index], Quaternion.LookRotation(navPath.corners[1] - navPath.corners[0]));
}
else
}
}
private static void DrawNavMeshPath(Pathway pathway)
{
Handles.color = pathway.LineColor;
for (int i = 0; i < pathway.Path.Count - 1; i++)
{
Handles.DrawLine(pathway.Path[i], pathway.Path[i + 1]);
if (i < pathway.Waypoints.Count)
pathway.Waypoints[index] = Handles.PositionHandle(pathway.Waypoints[index], Quaternion.identity);
DrawLabel(pathway, pathway.Waypoints[i].waypoint, i);
private static void DrawWaypointLabel(PathwayConfigSO pathway, List<Vector3> path, int index)
private static void DrawHitPoints(Pathway pathway)
GUIStyle style = new GUIStyle();
Vector3 textHeight = Vector3.up;
if (pathway.DisplayProbes)
{
float sphereRadius = pathway.ProbeRadius;
style.normal.textColor = pathway.TextColor;
style.fontSize = pathway.TextSize;
Handles.Label(path[index] + textHeight, index.ToString(), style);
for (int i = 0; i < pathway.Hits.Count; i++)
{
if (pathway.Hits[i])
{
Gizmos.color = new Color(0, 255, 0, 0.5f);
Gizmos.DrawSphere(pathway.Waypoints[i].waypoint, sphereRadius);
}
else
{
Gizmos.color = new Color(255, 0, 0, 0.5f);
Gizmos.DrawSphere(pathway.Waypoints[i].waypoint, sphereRadius);
}
}
}
}
}

2
UOP1_Project/Assets/Scripts/Editor/Pathway/PathwayGizmos.cs.meta


fileFormatVersion: 2
guid: baca1f7fba1a3e04aa3968a4cf90f58b
guid: 9c32d0b2ea4c7d549b9bf0a0b6e4ba2e
MonoImporter:
externalObjects: {}
serializedVersion: 2

2
UOP1_Project/Assets/Scripts/Editor/SceneSelector/SceneSelector.Data.cs


public Color color = Color.clear;
[NonSerialized]
public GameSceneSO gameScene;
public GameSceneSO gameSceneSO;
}
private class Styles

15
UOP1_Project/Assets/Scripts/Editor/SceneSelector/SceneSelector.Helper.cs


private static readonly Dictionary<Type, Color> kDefaultMarkerColors = new Dictionary<Type, Color>()
{
{ typeof(PersistentManagersSO), Color.magenta },
{ typeof(GameplaySO), Color.magenta },
{ typeof(LocationSO), Color.green },
{ typeof(MenuSO), Color.cyan },
};

return isClicked;
}
public static void OpenSceneSafe(string path)
public static void OpenSceneSafe(GameSceneSO gameSceneSO)
EditorSceneManager.OpenScene(path);
EditorSceneManager.OpenScene(AssetDatabase.GetAssetPath(gameSceneSO.sceneReference.editorAsset));
}
}

if (kDefaultMarkerColors.TryGetValue(type, out var color))
return color;
return Color.red;
}
public static void RunOnNextUpdate(Action action)
{
void Run()
{
action?.Invoke();
EditorApplication.update -= Run;
}
EditorApplication.update += Run;
}
public static int FindAssetsByType<T>(List<T> assets) where T : UnityEngine.Object

2
UOP1_Project/Assets/Scripts/Editor/SceneSelector/SceneSelector.PreferencesWindow.cs


private void DrawItem(Rect rect, int index, bool isActive, bool isFocused)
{
var item = items[index];
var gameScene = item.gameScene;
var gameScene = item.gameSceneSO;
if (gameScene != null)
{
var colorMarkerRect = rect;

42
UOP1_Project/Assets/Scripts/Editor/SceneSelector/SceneSelector.cs


using UnityEditor;
using UnityEngine;
using SceneSelectorInternal;
using UnityEditor.SceneManagement;
using SceneType = GameSceneSO.GameSceneType;
public partial class SceneSelector : EditorWindow, IHasCustomMenu
{

wantsMouseMove = true;
LoadStorage();
PopulateItems();
GameSceneSO.onEnabled += OnGameSceneSOCreated;
}
private void OnDisable()

SaveStorage();
GameSceneSO.onEnabled -= OnGameSceneSOCreated;
}
private void OnGUI()

DrawItems();
_windowScrollPosition = scrollScope.scrollPosition;
}
if (GUILayout.Button("Reset list"))
{
//Force deletion of the storage
_storage = new Storage();
EditorPrefs.SetString(kPreferencesKey, "");
OnEnable(); //search the project and populate the scene list again
}
}
private void DrawItems()

{
if (item.isVisible)
{
var gameScene = item.gameScene;
if (gameScene != null)
var gameSceneSO = item.gameSceneSO;
if (gameSceneSO != null)
if (GUILayout.Button(gameScene.name, _styles.item))
if (GUILayout.Button(gameSceneSO.name, _styles.item))
Helper.OpenSceneSafe(gameScene.scenePath);
Helper.OpenSceneSafe(gameSceneSO);
}
var colorMarkerRect = GUILayoutUtility.GetLastRect();

private void PopulateItems()
{
var gameScenes = new List<GameSceneSO>();
Helper.FindAssetsByType(gameScenes);
var gameSceneSOs = new List<GameSceneSO>();
Helper.FindAssetsByType(gameSceneSOs);
foreach (var gameScene in gameScenes)
foreach (var gameSceneSO in gameSceneSOs)
if (AssetDatabase.TryGetGUIDAndLocalFileIdentifier(gameScene, out var guid, out long _))
if (AssetDatabase.TryGetGUIDAndLocalFileIdentifier(gameSceneSO, out var guid, out long _))
item.gameScene = gameScene;
item.gameSceneSO = gameSceneSO;
gameScene = gameScene,
gameSceneSO = gameSceneSO,
color = Helper.GetDefaultColor(gameScene)
color = Helper.GetDefaultColor(gameSceneSO)
items.Add(item);
itemsMap.Add(guid, item);
}

for (int i = items.Count - 1; i >= 0; --i)
{
var sceneItem = items[i];
if (sceneItem == null || sceneItem.gameScene == null)
if (sceneItem == null || sceneItem.gameSceneSO == null)
{
items.RemoveAt(i);
itemsMap.Remove(sceneItem.guid);

_hasEmptyItems = false;
}
private void OnGameSceneSOCreated(GameSceneSO _)
{
Helper.RunOnNextUpdate(PopulateItems);
}
private void EnsureStyles()
{

2
UOP1_Project/Assets/Scripts/Events/ScriptableObjects/AudioCueEventChannelSO.cs


public AudioCueStopAction OnAudioCueStopRequested;
public AudioCueFinishAction OnAudioCueFinishRequested;
public AudioCueKey RaisePlayEvent(AudioCueSO audioCue, AudioConfigurationSO audioConfiguration, Vector3 positionInSpace)
public AudioCueKey RaisePlayEvent(AudioCueSO audioCue, AudioConfigurationSO audioConfiguration, Vector3 positionInSpace = default)
{
AudioCueKey audioCueKey = AudioCueKey.Invalid;

2
UOP1_Project/Assets/Scripts/Events/ScriptableObjects/EventChannelBaseSO.cs.meta


fileFormatVersion: 2
guid: 0ffcf2cd9e5ed8041912ce6b98b29b5d
guid: d64d96639f454e64e9ecd79bd373123d
MonoImporter:
externalObjects: {}
serializedVersion: 2

4
UOP1_Project/Assets/Scripts/Events/ScriptableObjects/LoadEventChannelSO.cs


{
public UnityAction<GameSceneSO[], bool> OnLoadingRequested;
public void RaiseEvent(GameSceneSO[] locationsToLoad, bool showLoadingScreen)
public void RaiseEvent(GameSceneSO[] locationsToLoad, bool showLoadingScreen = false)
{
if (OnLoadingRequested != null)
{

{
Debug.LogWarning("A Scene loading was requested, but nobody picked it up." +
Debug.LogWarning("A Scene loading was requested, but nobody picked it up. " +
"Check why there is no SceneLoader already present, " +
"and make sure it's listening on this Load Event channel.");
}

4
UOP1_Project/Assets/Scripts/Inventory/InventoryManager.cs


[SerializeField] private ItemEventChannelSO _giveItemEvent = default;
[SerializeField] ItemEventChannelSO _addItemEvent = default;
[SerializeField] ItemEventChannelSO _removeItemEvent = default;
[SerializeField] private SaveSystem _saveSystem;
private void OnEnable()
{

void AddItem(Item item)
{
_currentInventory.Add(item);
_saveSystem.SaveDataToDisk();
_saveSystem.SaveDataToDisk();
}

4
UOP1_Project/Assets/Scripts/Inventory/ScriptableObjects/Item.cs


using System.Collections.Generic;
using System.Collections.Generic;
public class Item : ScriptableObject
public class Item : SerializableScriptableObject
{
[Tooltip("The name of the item")]
[SerializeField] private LocalizedString _name = default;

40
UOP1_Project/Assets/Scripts/Pathway/Pathway.cs


public class Pathway : MonoBehaviour
{
[HideInInspector]
public List<Vector3> Waypoints;
public Vector3[] waypoints;
public bool HidePathway;
private int _textSize = 10;
private int _textSize = 20;
[SerializeField, Range(0, 100)]
[Tooltip("This function may reduce the frame rate if a large probe radius is specified. To avoid frame rate issues," +
" it is recommended that you specify a max distance of twice the agent height.")]
private float _probeRadius = 3;
[HideInInspector]
public bool DisplayProbes;
[HideInInspector]
public bool ToggledNavMeshDisplay;
private List<Vector3> _path;
private List<bool> _hits;
public const string FIELD_LABEL = "Point ";
public const string TITLE_LABEL = "Waypoints";

public int TextSize { get => _textSize; }
public float ProbeRadius { get => _probeRadius; }
public List<Vector3> Path { get => _path; set => _path = value; }
public List<bool> Hits { get => _hits; set => _hits = value; }
public bool RealTimeEnabled;
[HideInInspector]
public List<WaypointData> Waypoints;
#if UNITY_EDITOR
[System.Serializable]
public class WaypointData
{
public Vector3 waypoint;
public List<Vector3> corners;
}
#endif

35
UOP1_Project/Assets/Scripts/SceneManagement/InitializationLoader.cs


using System.Collections;
using UnityEngine;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.ResourceManagement.ResourceProviders;
using UnityEngine.SceneManagement;
/// <summary>

public class InitializationLoader : MonoBehaviour
{
[Header("Persistent managers Scene")]
[SerializeField] private GameSceneSO _PersistentManagersScene = default;
[SerializeField] private GameSceneSO _persistentManagersScene = default;
[SerializeField] private GameSceneSO[] _MenuToLoad = default;
[SerializeField] private bool _showLoadScreen = default;
[SerializeField] private GameSceneSO[] _menuToLoad = default;
[SerializeField] private LoadEventChannelSO _MenuLoadChannel = default;
[SerializeField] private AssetReference _menuLoadChannel = default;
void Start()
private void Start()
StartCoroutine(loadScene(_PersistentManagersScene.scenePath));
_persistentManagersScene.sceneReference.LoadSceneAsync(LoadSceneMode.Additive, true).Completed += LoadEventChannel;
}
private void LoadEventChannel(AsyncOperationHandle<SceneInstance> obj)
{
_menuLoadChannel.LoadAssetAsync<LoadEventChannelSO>().Completed += LoadMainMenu;
IEnumerator loadScene(string scenePath)
private void LoadMainMenu(AsyncOperationHandle<LoadEventChannelSO> obj)
AsyncOperation loadingSceneAsyncOp = SceneManager.LoadSceneAsync(scenePath, LoadSceneMode.Additive);
LoadEventChannelSO loadEventChannelSO = (LoadEventChannelSO)_menuLoadChannel.Asset;
loadEventChannelSO.RaiseEvent(_menuToLoad);
//Wait until we are done loading the scene
while (!loadingSceneAsyncOp.isDone)
{
yield return null;
}
//Raise the event to load the main menu
_MenuLoadChannel.RaiseEvent(_MenuToLoad, _showLoadScreen);
SceneManager.UnloadSceneAsync(0); //Initialization is the only scene in BuildSettings, thus it has index 0
}
}

233
UOP1_Project/Assets/Scripts/SceneManagement/SceneLoader.cs


using System.Collections;
using System;
using System.Collections;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.ResourceManagement.ResourceProviders;
using UnityEngine.SceneManagement;
/// <summary>

{
[SerializeField] private GameSceneSO _persistentManagersScene = default;
//The location load event we are listening to
//The menu load event we are listening to
[SerializeField] private BoolEventChannelSO _ToggleLoadingScreen = default;
[SerializeField] private VoidEventChannelSO _OnSceneReady = default;
[SerializeField] private FadeChannelSO _OnFade = default;
[SerializeField] private BoolEventChannelSO _toggleLoadingScreen = default;
[SerializeField] private VoidEventChannelSO _onSceneReady = default;
private List<AsyncOperation> _scenesToLoadAsyncOperations = new List<AsyncOperation>();
private List<Scene> _scenesToUnload = new List<Scene>();
private GameSceneSO _activeScene; // The scene we want to set as active (for lighting/skybox)
private List<GameSceneSO> _persistentScenes = new List<GameSceneSO>(); //Scenes to keep loaded when a load event is raised
private List<AsyncOperationHandle<SceneInstance>> _loadingOperationHandles = new List<AsyncOperationHandle<SceneInstance>>();
private AsyncOperationHandle<SceneInstance> _gameplayManagerLoadingOpHandle;
//Parameters coming from scene loading requests
private GameSceneSO[] _scenesToLoad;
private GameSceneSO[] _currentlyLoadedScenes = new GameSceneSO[] { };
private bool _showLoadingScreen;
private SceneInstance _gameplayManagerSceneInstance = new SceneInstance();
if (_loadLocation != null)
_loadLocation.OnLoadingRequested += LoadLocation;
_loadMenu.OnLoadingRequested += LoadMenu;
}
private void OnDisable()
{
_loadLocation.OnLoadingRequested -= LoadLocation;
_loadMenu.OnLoadingRequested -= LoadMenu;
}
/// <summary>
/// This function loads the location scenes passed as array parameter
/// </summary>
private void LoadLocation(GameSceneSO[] locationsToLoad, bool showLoadingScreen)
{
_scenesToLoad = locationsToLoad;
_showLoadingScreen = showLoadingScreen;
//In case we are coming from the main menu, we need to load the persistent Gameplay manager scene first
if (_gameplayManagerSceneInstance.Scene == null
|| !_gameplayManagerSceneInstance.Scene.isLoaded)
_loadLocation.OnLoadingRequested += LoadLocation;
StartCoroutine(ProcessGameplaySceneLoading(locationsToLoad, showLoadingScreen));
if (_loadMenu != null)
else
_loadMenu.OnLoadingRequested += LoadMenu;
UnloadPreviousScenes();
private void OnDisable()
private IEnumerator ProcessGameplaySceneLoading(GameSceneSO[] locationsToLoad, bool showLoadingScreen)
if (_loadLocation != null)
_gameplayManagerLoadingOpHandle = _gameplayScene.sceneReference.LoadSceneAsync(LoadSceneMode.Additive, true);
while (_gameplayManagerLoadingOpHandle.Status != AsyncOperationStatus.Succeeded)
_loadLocation.OnLoadingRequested -= LoadLocation;
yield return null;
if (_loadMenu != null)
{
_loadMenu.OnLoadingRequested -= LoadMenu;
}
_gameplayManagerSceneInstance = _gameplayManagerLoadingOpHandle.Result;
UnloadPreviousScenes();
/// This function loads the location scenes passed as array parameter
/// Prepares to load the main menu scene, first removing the Gameplay scene in case the game is coming back from gameplay to menus.
/// <param name="locationsToLoad"></param>
/// <param name="showLoadingScreen"></param>
private void LoadLocation(GameSceneSO[] locationsToLoad, bool showLoadingScreen)
private void LoadMenu(GameSceneSO[] menusToLoad, bool showLoadingScreen)
//When loading a location, we want to keep the persistent managers and gameplay scenes loaded
_persistentScenes.Add(_persistentManagersScene);
_persistentScenes.Add(_gameplayScene);
AddScenesToUnload(_persistentScenes);
LoadScenes(locationsToLoad, showLoadingScreen);
_scenesToLoad = menusToLoad;
_showLoadingScreen = showLoadingScreen;
//In case we are coming from a Location back to the main menu, we need to get rid of the persistent Gameplay manager scene
if (_gameplayManagerSceneInstance.Scene != null
&& _gameplayManagerSceneInstance.Scene.isLoaded)
Addressables.UnloadSceneAsync(_gameplayManagerLoadingOpHandle, true);
UnloadPreviousScenes();
/// This function loads the menu scenes passed as array parameter
/// In both Location and Menu loading, this function takes care of removing previously loaded temporary scenes.
/// <param name="MenuToLoad"></param>
/// <param name="showLoadingScreen"></param>
private void LoadMenu(GameSceneSO[] MenuToLoad, bool showLoadingScreen)
private void UnloadPreviousScenes()
//When loading a menu, we only want to keep the persistent managers scene loaded
_persistentScenes.Add(_persistentManagersScene);
AddScenesToUnload(_persistentScenes);
LoadScenes(MenuToLoad, showLoadingScreen);
for (int i = 0; i < _currentlyLoadedScenes.Length; i++)
{
_currentlyLoadedScenes[i].sceneReference.UnLoadScene();
}
LoadNewScenes();
private void LoadScenes(GameSceneSO[] locationsToLoad, bool showLoadingScreen)
/// <summary>
/// Kicks off the asynchronous loading of an array of scenes, either menus or Locations.
/// </summary>
private void LoadNewScenes()
//Take the first scene in the array as the scene we want to set active
_activeScene = locationsToLoad[0];
UnloadScenes();
if (showLoadingScreen)
if (_showLoadingScreen)
_ToggleLoadingScreen.RaiseEvent(true);
_toggleLoadingScreen.RaiseEvent(true);
if (_scenesToLoadAsyncOperations.Count == 0)
_loadingOperationHandles.Clear();
//Build the array of handles of the temporary scenes to load
for (int i = 0; i < _scenesToLoad.Length; i++)
for (int i = 0; i < locationsToLoad.Length; i++)
{
string currentScenePath = locationsToLoad[i].scenePath;
_scenesToLoadAsyncOperations.Add(SceneManager.LoadSceneAsync(currentScenePath, LoadSceneMode.Additive));
}
_loadingOperationHandles.Add(_scenesToLoad[i].sceneReference.LoadSceneAsync(LoadSceneMode.Additive, true, 0));
//Checks if any of the persistent scenes is not loaded yet and load it if unloaded
//This is especially useful when we go from main menu to first location
for (int i = 0; i < _persistentScenes.Count; ++i)
{
if (IsSceneLoaded(_persistentScenes[i].scenePath) == false)
{
_scenesToLoadAsyncOperations.Add(SceneManager.LoadSceneAsync(_persistentScenes[i].scenePath, LoadSceneMode.Additive));
}
}
StartCoroutine(WaitForLoading(showLoadingScreen));
StartCoroutine(LoadingProcess());
private IEnumerator WaitForLoading(bool showLoadingScreen)
private IEnumerator LoadingProcess()
bool _loadingDone = false;
// Wait until all scenes are loaded
while (!_loadingDone)
bool done = _loadingOperationHandles.Count == 0;
//This while will exit when all scenes requested have been unloaded
while (!done)
for (int i = 0; i < _scenesToLoadAsyncOperations.Count; ++i)
for (int i = 0; i < _loadingOperationHandles.Count; ++i)
if (!_scenesToLoadAsyncOperations[i].isDone)
if (_loadingOperationHandles[i].Status != AsyncOperationStatus.Succeeded)
_loadingDone = true;
_scenesToLoadAsyncOperations.Clear();
_persistentScenes.Clear();
done = true;
//Set the active scene
//Save loaded scenes (to be unloaded at next load request)
_currentlyLoadedScenes = _scenesToLoad;
if (showLoadingScreen)
if (_showLoadingScreen)
//Raise event to disable loading screen
_ToggleLoadingScreen.RaiseEvent(false);
_toggleLoadingScreen.RaiseEvent(false);
}
}

/// </summary>
private void SetActiveScene()
{
SceneManager.SetActiveScene(SceneManager.GetSceneByPath(_activeScene.scenePath));
// Will reconstruct LightProbe tetrahedrons to include the probes from the newly-loaded scene
LightProbes.TetrahedralizeAsync();
//Raise the event to inform that the scene is loaded and set active
_OnSceneReady.RaiseEvent();
}
private void AddScenesToUnload(List<GameSceneSO> persistentScenes)
{
for (int i = 0; i < SceneManager.sceneCount; ++i)
{
Scene scene = SceneManager.GetSceneAt(i);
string scenePath = scene.path;
for (int j = 0; j < persistentScenes.Count; ++j)
{
if (scenePath != persistentScenes[j].scenePath)
{
//Check if we reached the last persistent scenes check
if (j == persistentScenes.Count - 1)
{
//If the scene is not one of the persistent scenes, we add it to the scenes to unload
_scenesToUnload.Add(scene);
}
}
else
{
//We move the next scene check as soon as we find that the scene is one of the persistent scenes
break;
}
}
}
}
//All the scenes have been loaded, so we assume the first in the array is ready to become the active scene
Scene s = ((SceneInstance)_loadingOperationHandles[0].Result).Scene;
SceneManager.SetActiveScene(s);
private void UnloadScenes()
{
if (_scenesToUnload != null)
{
for (int i = 0; i < _scenesToUnload.Count; ++i)
{
SceneManager.UnloadSceneAsync(_scenesToUnload[i]);
}
_scenesToUnload.Clear();
}
}
LightProbes.TetrahedralizeAsync();
/// <summary>
/// This function checks if a scene is already loaded
/// </summary>
/// <param name="scenePath"></param>
/// <returns>bool</returns>
private bool IsSceneLoaded(string scenePath)
{
for (int i = 0; i < SceneManager.sceneCount; i++)
{
Scene scene = SceneManager.GetSceneAt(i);
if (scene.path == scenePath)
{
return true;
}
}
return false;
_onSceneReady.RaiseEvent(); //Spawn system will spawn the PigChef
}
private void ExitGame()

}
}

8
UOP1_Project/Assets/Scripts/SceneManagement/SceneLoader.cs.meta


externalObjects: {}
serializedVersion: 2
defaultReferences:
- _persistentManagersScene: {fileID: 11400000, guid: c2119785ce96367428081d6eee0d932b,
type: 2}
- _ToggleLoadingScreen: {fileID: 11400000, guid: ce8db9fc090944349ba225edb81028d4,
- _toggleLoadingScreen: {fileID: 11400000, guid: ce8db9fc090944349ba225edb81028d4,
- _OnSceneReady: {fileID: 11400000, guid: b729e40fc41dd8b4ea7aaf5c857f7186, type: 2}
- _OnFade: {fileID: 11400000, guid: b40bb60f3ca40164e9d7acc6992bae10, type: 2}
- _onSceneReady: {fileID: 11400000, guid: b729e40fc41dd8b4ea7aaf5c857f7186, type: 2}
- _onFade: {fileID: 11400000, guid: b40bb60f3ca40164e9d7acc6992bae10, type: 2}
executionOrder: 0
icon: {instanceID: 0}
userData:

35
UOP1_Project/Assets/Scripts/SceneManagement/ScriptableObjects/GameSceneSO.cs


using UnityEngine;
using UnityEngine.AddressableAssets;
/// This class is a base class which contains what is common to all game scenes (Locations or Menus)
/// This class is a base class which contains what is common to all game scenes (Locations, Menus, Managers)
public class GameSceneSO : DescriptionBaseSO
{
public GameSceneType sceneType;
public AssetReference sceneReference; //Used at runtime to load the scene from the right AssetBundle
public AudioCueSO musicTrack;
public abstract partial class GameSceneSO : ScriptableObject
{
[Header("Information")]
#if UNITY_EDITOR // See GameSceneSOEditor.cs
public UnityEditor.SceneAsset sceneAsset;
#endif
[HideInInspector]
public string scenePath;
[TextArea] public string shortDescription;
/// <summary>
/// Used by the SceneSelector tool to discern what type of scene it needs to load
/// </summary>
public enum GameSceneType
{
//Playable scenes
Location, //SceneSelector tool will also load PersistentManagers and Gameplay
Menu, //SceneSelector tool will also load Gameplay
//Special scenes
Initialisation,
PersistentManagers,
Gameplay,
[Header("Sounds")]
public AudioClip music;
//Work in progress scenes that don't need to be played
Art,
}
}

5
UOP1_Project/Assets/Scripts/SceneManagement/ScriptableObjects/GameplaySO.cs


[CreateAssetMenu(fileName = "NewGameplayScene", menuName = "Scene Data/Gameplay")]
public class GameplaySO : GameSceneSO
{
//[Header("Gameplay specific")]
}
public class GameplaySO : GameSceneSO { }

3
UOP1_Project/Assets/Scripts/SceneManagement/ScriptableObjects/LocationSO.cs


using UnityEngine;
using UnityEngine.Localization;
/// <summary>
/// This class contains Settings specific to Locations only
/// </summary>

{
[Header("Location specific")]
public int enemiesCount; //Example variable, will change later
}

13
UOP1_Project/Assets/Scripts/SceneManagement/ScriptableObjects/MenuSO.cs


/// <summary>
/// This class contains Settings specific to Menus only
/// </summary>
public enum Menu
{
Main_Menu,
Pause_Menu
}
public class MenuSO : GameSceneSO
{
[Header("Menu specific")]
public Menu menuType;
}
public class MenuSO : GameSceneSO { }

2
UOP1_Project/Assets/Scripts/SceneManagement/ScriptableObjects/PathSO.cs


using UnityEngine;
/// <summary>
/// This class contains Settings specific to Paths, which are used to determine the connecting entrances and exits between Locations
/// Paths are used to determine the connecting entrances and exits between Locations
/// </summary>
[CreateAssetMenu(fileName = "BetweenLocation1AndLocation2", menuName = "Scene Data/Path")]

62
UOP1_Project/Assets/Scripts/SceneManagement/StartGame.cs


using UnityEngine;
using System;
using System.Collections;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.UI;
public class StartGame : MonoBehaviour
{
public LoadEventChannelSO onPlayButtonPress;

public SaveSystem saveSystem;
public Text startText;
public Button resetSaveDataButton;
private bool _hasSaveData;
private void Start()
{
_hasSaveData = saveSystem.LoadSaveDataFromDisk();
if (_hasSaveData)
{
startText.text = "Continue";
resetSaveDataButton.gameObject.SetActive(true);
}
else
{
resetSaveDataButton.gameObject.SetActive(false);
}
}
onPlayButtonPress.RaiseEvent(locationsToLoad, showLoadScreen);
if (!_hasSaveData)
{
saveSystem.WriteEmptySaveFile();
//Start new game
onPlayButtonPress.RaiseEvent(locationsToLoad, showLoadScreen);
}
else
{
//Load Game
StartCoroutine(LoadSaveGame());
}
}
public void OnResetSaveDataPress()
{
_hasSaveData = false;
startText.text = "Play";
resetSaveDataButton.gameObject.SetActive(false);
}
public IEnumerator LoadSaveGame()
{
yield return StartCoroutine(saveSystem.LoadSavedInventory());
var locationGuid = saveSystem.saveData._locationId;
var asyncOperationHandle = Addressables.LoadAssetAsync<LocationSO>(locationGuid);
yield return asyncOperationHandle;
if (asyncOperationHandle.Status == AsyncOperationStatus.Succeeded)
{
var locationSo = asyncOperationHandle.Result;
onPlayButtonPress.RaiseEvent(new[] { (GameSceneSO)locationSo }, showLoadScreen);
}
}
}

1
UOP1_Project/Assets/Settings/Audio/DefaultAudioMixer.mixer


m_SnapshotID: d2c2ea162004da549b54501f768d5652
m_FloatValues:
9271f6921315a7245b91413294248994: 0
55eed10a876d8ce468e0e8868531d4f0: -3.8468575
m_TransitionOverrides: {}
--- !u!244 &383433361790407199
AudioMixerEffectController:

21
UOP1_Project/ProjectSettings/EditorBuildSettings.asset


- enabled: 1
path: Assets/Scenes/Initialization.unity
guid: e8df4c5a458acc5489b2865e6b789224
- enabled: 1
path: Assets/Scenes/Menus/MainMenu.unity
guid: df490f8a21305b549b67b8301af79724
- enabled: 1
path: Assets/Scenes/Locations/Forest.unity
guid: 3a816f06c17361b4398583570bcbf8eb
- enabled: 1
path: Assets/Scenes/Locations/Beach.unity
guid: dfaf60263d5c5dc4e80e2793f4328b32
- enabled: 1
path: Assets/Scenes/Locations/Glade.unity
guid: 92a4a277a346e4344b629ad5613f7c51
- enabled: 1
path: Assets/Scenes/WIP/TestingGround.unity
guid: 1e57caa7d7ed5e24a88cb3b5c309cc65
- enabled: 1
path: Assets/Scenes/PersistentManagers.unity
guid: 969b7f174e8c76843aa3fcdbade0487b
- enabled: 1
path: Assets/Scenes/Gameplay.unity
guid: 9a863f9bc60514821bc17f41d9f0162c
m_configObjects:
com.unity.addressableassets: {fileID: 11400000, guid: 758daf1c1b96e4978a5b9b3f5815abf1,
type: 2}

2
UOP1_Project/ProjectSettings/ProjectSettings.asset


16:10: 1
16:9: 1
Others: 1
bundleVersion: 0.6
bundleVersion: 0.7
preloadedAssets:
- {fileID: 11400000, guid: 56b1c58ec65bd4151b3054a32d1f7b69, type: 2}
- {fileID: 11400000, guid: bf2387135d5fdc745b74293cd27573be, type: 2}

4
UOP1_Project/Assets/Audio/SFX/Environment/Env_Campfire.wav.meta


externalObjects: {}
serializedVersion: 6
defaultSettings:
loadType: 0
loadType: 2
quality: 0.76
quality: 0.5
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0

2
UOP1_Project/Assets/Audio/SFX/Characters/Footsteps/Grass/UOP_SD_SFX_Footsteps_Soft grass_13.wav.meta


sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
quality: 0.75
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0

2
UOP1_Project/Assets/Audio/SFX/Characters/Footsteps/Grass/UOP_SD_SFX_Footsteps_Soft grass_12.wav.meta


sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
quality: 0.75
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0

2
UOP1_Project/Assets/Audio/SFX/Characters/Footsteps/Grass/UOP_SD_SFX_Footsteps_Soft grass_11.wav.meta


sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
quality: 0.75
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0

2
UOP1_Project/Assets/Audio/SFX/Characters/Footsteps/Grass/UOP_SD_SFX_Footsteps_Soft grass_10.wav.meta


sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
quality: 0.75
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0

2
UOP1_Project/Assets/Audio/SFX/Characters/Footsteps/Grass/UOP_SD_SFX_Footsteps_Soft grass_09.wav.meta


sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
quality: 0.75
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0

2
UOP1_Project/Assets/Audio/SFX/Characters/Footsteps/Grass/UOP_SD_SFX_Footsteps_Soft grass_08.wav.meta


sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
quality: 0.75
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0

2
UOP1_Project/Assets/Audio/SFX/Characters/Footsteps/Grass/UOP_SD_SFX_Footsteps_Soft grass_07.wav.meta


sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
quality: 0.75
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0

2
UOP1_Project/Assets/Audio/SFX/Characters/Footsteps/Grass/UOP_SD_SFX_Footsteps_Soft grass_06.wav.meta


sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
quality: 0.75
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0

2
UOP1_Project/Assets/Audio/SFX/Characters/Footsteps/Grass/UOP_SD_SFX_Footsteps_Soft grass_05.wav.meta


sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
quality: 0.75
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0

2
UOP1_Project/Assets/Audio/SFX/Characters/Footsteps/Grass/UOP_SD_SFX_Footsteps_Soft grass_04.wav.meta


sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
quality: 0.75
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0

2
UOP1_Project/Assets/Audio/SFX/Characters/Footsteps/Grass/UOP_SD_SFX_Footsteps_Soft grass_03.wav.meta


sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
quality: 0.75
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0

2
UOP1_Project/Assets/Audio/SFX/Characters/Footsteps/Grass/UOP_SD_SFX_Footsteps_Soft grass_02.wav.meta


sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
quality: 0.75
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0

2
UOP1_Project/Assets/Audio/SFX/Characters/Footsteps/Grass/UOP_SD_SFX_Footsteps_Soft grass_01.wav.meta


sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
quality: 0.75
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0

2
UOP1_Project/Assets/Audio/SFX/Characters/Actions/Grabbing_01.wav.meta


sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
quality: 0.75
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0

2
UOP1_Project/Assets/Audio/SFX/Characters/Actions/Jump_Liftoff_01.wav.meta


sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
quality: 0.75
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0

2
UOP1_Project/Assets/Audio/SFX/Characters/Actions/Jump_Liftoff_02.wav.meta


sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
quality: 0.75
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0

2
UOP1_Project/Assets/Audio/SFX/Characters/Actions/Swing_Cane_01.wav.meta


sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
quality: 0.75
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0

2
UOP1_Project/Assets/Audio/SFX/Characters/Actions/Swing_Cane_02.wav.meta


sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
quality: 0.75
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0

2
UOP1_Project/Assets/Audio/SFX/Characters/Actions/Swing_Cane_03.wav.meta


sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
quality: 0.75
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0

31
UOP1_Project/Assets/Scenes/Managers/PersistentManagers.unity


m_TrainingDataDestination: TrainingData
m_LightProbeSampleCountMultiplier: 4
m_LightingDataAsset: {fileID: 0}
m_UseShadowmask: 0
m_UseShadowmask: 1
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2

_musicEventChannel: {fileID: 11400000, guid: 51854f522e1d88442a90b878b27ea839, type: 2}
audioMixer: {fileID: 24100000, guid: 548a7f001ca6d3d4cb67c8edf84f62a3, type: 2}
_masterVolume: 1
_musicVolume: 1
_musicVolume: 0.8
_sfxVolume: 1
--- !u!1 &624605538
GameObject:

- component: {fileID: 1387982343}
- component: {fileID: 1387982342}
- component: {fileID: 1387982341}
- component: {fileID: 1387982340}
m_Layer: 5
m_Name: Canvas
m_TagString: Untagged

m_IsActive: 1
--- !u!114 &1387982340
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1387982339}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreReversedGraphics: 1
m_BlockingObjects: 0
m_BlockingMask:
serializedVersion: 2
m_Bits: 4294967295
--- !u!114 &1387982341
MonoBehaviour:
m_ObjectHideFlags: 0

m_OverrideSorting: 0
m_OverridePixelPerfect: 0
m_SortingBucketNormalizedSize: 0
m_AdditionalShaderChannelsFlag: 25
m_AdditionalShaderChannelsFlag: 1
m_SortingLayerID: 0
m_SortingOrder: 0
m_TargetDisplay: 0

m_Script: {fileID: 11500000, guid: b6b928d1d6f59854499ed82bdeef2305, type: 3}
m_Name:
m_EditorClassIdentifier:
_persistentManagersScene: {fileID: 11400000, guid: c2119785ce96367428081d6eee0d932b,
type: 2}
_ToggleLoadingScreen: {fileID: 11400000, guid: ce8db9fc090944349ba225edb81028d4,
_toggleLoadingScreen: {fileID: 11400000, guid: ce8db9fc090944349ba225edb81028d4,
_OnSceneReady: {fileID: 11400000, guid: b729e40fc41dd8b4ea7aaf5c857f7186, type: 2}
_OnFade: {fileID: 11400000, guid: b40bb60f3ca40164e9d7acc6992bae10, type: 2}
_onSceneReady: {fileID: 11400000, guid: b729e40fc41dd8b4ea7aaf5c857f7186, type: 2}
--- !u!4 &1416216799
Transform:
m_ObjectHideFlags: 0

2
UOP1_Project/Assets/ScriptableObjects/Audio/AudioCues/SFX/SFX_Footsteps_Grass.asset


m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 08e854ccd8588da4694c3ae040c10c5e, type: 3}
m_Name: SFX_Footsteps
m_Name: SFX_Footsteps_Grass
m_EditorClassIdentifier:
looping: 0
_audioClipGroups:

124
UOP1_Project/Assets/Scripts/Localization/Editor/LocalizeComponent_TMProFont.cs


using TMPro;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.Localization.Components;
namespace UnityEditor.Localization.Plugins.TMPro
{
internal static class LocalizeComponent_TMProFont
{
[MenuItem("CONTEXT/TextMeshProUGUI/Localize String And Font")]
static void LocalizeTMProText(MenuCommand command)
{
var target = command.context as TextMeshProUGUI;
SetupForStringLocalization(target);
SetupForFontLocalization(target);
}
public static MonoBehaviour SetupForStringLocalization(TextMeshProUGUI target)
using TMPro;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.Localization.Components;
namespace UnityEditor.Localization.Plugins.TMPro
{
internal static class LocalizeComponent_TMProFont
{
[MenuItem("CONTEXT/TextMeshProUGUI/Localize String And Font")]
static void LocalizeTMProText(MenuCommand command)
{
var target = command.context as TextMeshProUGUI;
SetupForStringLocalization(target);
SetupForFontLocalization(target);
}
public static MonoBehaviour SetupForStringLocalization(TextMeshProUGUI target)
if (target.GetComponent<LocalizeStringEvent>() != null)
return null;
var comp = Undo.AddComponent(target.gameObject, typeof(LocalizeStringEvent)) as LocalizeStringEvent;
var setStringMethod = target.GetType().GetProperty("text").GetSetMethod();
var methodDelegate = System.Delegate.CreateDelegate(typeof(UnityAction<string>), target, setStringMethod) as UnityAction<string>;
Events.UnityEventTools.AddPersistentListener(comp.OnUpdateString, methodDelegate);
const int kMatchThreshold = 5;
var foundKey = LocalizationEditorSettings.FindSimilarKey(target.text);
if (foundKey.collection != null && foundKey.matchDistance < kMatchThreshold)
{
comp.StringReference.TableEntryReference = foundKey.entry.Id;
comp.StringReference.TableReference = foundKey.collection.TableCollectionNameReference;
}
return null;
}
public static MonoBehaviour SetupForFontLocalization(TextMeshProUGUI target)
if (target.GetComponent<LocalizeStringEvent>() != null)
return null;
var comp = Undo.AddComponent(target.gameObject, typeof(LocalizeStringEvent)) as LocalizeStringEvent;
var setStringMethod = target.GetType().GetProperty("text").GetSetMethod();
var methodDelegate = System.Delegate.CreateDelegate(typeof(UnityAction<string>), target, setStringMethod) as UnityAction<string>;
Events.UnityEventTools.AddPersistentListener(comp.OnUpdateString, methodDelegate);
const int kMatchThreshold = 5;
var foundKey = LocalizationEditorSettings.FindSimilarKey(target.text);
if (foundKey.collection != null && foundKey.matchDistance < kMatchThreshold)
{
comp.StringReference.TableEntryReference = foundKey.entry.Id;
comp.StringReference.TableReference = foundKey.collection.TableCollectionNameReference;
}
return null;
}
public static MonoBehaviour SetupForFontLocalization(TextMeshProUGUI target)
if (target.GetComponent<LocalizeTMProFontEvent>() != null)
return null;
var comp = Undo.AddComponent(target.gameObject, typeof(LocalizeTMProFontEvent)) as LocalizeTMProFontEvent;
var setFontMethod = target.GetType().GetProperty("font").GetSetMethod();
var methodDelegate = System.Delegate.CreateDelegate(typeof(UnityAction<TMP_FontAsset>), target, setFontMethod) as UnityAction<TMP_FontAsset>;
if (target.GetComponent<LocalizeTMProFontEvent>() != null)
return null;
var comp = Undo.AddComponent(target.gameObject, typeof(LocalizeTMProFontEvent)) as LocalizeTMProFontEvent;
var setFontMethod = target.GetType().GetProperty("font").GetSetMethod();
var methodDelegate = System.Delegate.CreateDelegate(typeof(UnityAction<TMP_FontAsset>), target, setFontMethod) as UnityAction<TMP_FontAsset>;
var collections = LocalizationEditorSettings.GetAssetTableCollections();
foreach (var tableCollection in collections)
{
if (tableCollection.name == "Fonts")
{
comp.AssetReference.TableReference = tableCollection.TableCollectionNameReference;
foreach (var entry in tableCollection.SharedData.Entries)
{
if (entry.Key == "font")
comp.AssetReference.TableEntryReference = entry.Id;
}
}
}
return null;
}
}
}
var collections = LocalizationEditorSettings.GetAssetTableCollections();
foreach (var tableCollection in collections)
{
if (tableCollection.name == "Fonts")
{
comp.AssetReference.TableReference = tableCollection.TableCollectionNameReference;
foreach (var entry in tableCollection.SharedData.Entries)
{
if (entry.Key == "font")
comp.AssetReference.TableEntryReference = entry.Id;
}
}
}
return null;
}
}
}

66
UOP1_Project/Assets/Scripts/Localization/Editor/LocalizeTMProFontEvent.cs


using System;
using TMPro;
using UnityEngine.Events;
namespace UnityEngine.Localization.Components
using System;
using TMPro;
using UnityEditor.Localization;
using UnityEngine.Events;
namespace UnityEngine.Localization.Components
/// <summary>
/// Component that can be used to Localize a TMP_FontAsset asset.
/// </summary>
[AddComponentMenu("Localization/Asset/Localize TMPro Font Event")]
public class LocalizeTMProFontEvent : LocalizedAssetEvent<TMP_FontAsset, LocalizedTMProFont, UnityEventFont>
{
}
[Serializable]
public class LocalizedTMProFont : LocalizedAsset<TMP_FontAsset> { }
[Serializable]
public class UnityEventFont : UnityEvent<TMP_FontAsset> { }
}
/// <summary>
/// Component that can be used to Localize a TMP_FontAsset asset.
/// </summary>
[AddComponentMenu("Localization/Asset/Localize TMPro Font Event")]
public class LocalizeTMProFontEvent : LocalizedAssetEvent<TMP_FontAsset, LocalizedTMProFont, UnityEventFont>
{
private void Reset()
{
//Set up Unity Event automatically
var target = GetComponent<TextMeshProUGUI>();
var setFontMethod = target.GetType().GetProperty("font").GetSetMethod();
var methodDelegate = System.Delegate.CreateDelegate(typeof(UnityAction<TMP_FontAsset>), target, setFontMethod) as UnityAction<TMP_FontAsset>;
UnityEditor.Events.UnityEventTools.AddPersistentListener(this.OnUpdateAsset, methodDelegate);
//Set up font localize asset table automatically
var collections = LocalizationEditorSettings.GetAssetTableCollections();
foreach (var tableCollection in collections)
{
if (tableCollection.name == "Fonts")
{
this.AssetReference.TableReference = tableCollection.TableCollectionNameReference;
foreach (var entry in tableCollection.SharedData.Entries)
{
if (entry.Key == "font")
this.AssetReference.TableEntryReference = entry.Id;
}
}
}
}
}
[Serializable]
public class LocalizedTMProFont : LocalizedAsset<TMP_FontAsset> { }
[Serializable]
public class UnityEventFont : UnityEvent<TMP_FontAsset> { }
}

2
UOP1_Project/Assets/Audio/SFX/Interface/Interface_01.wav.meta


fileFormatVersion: 2
guid: 51f3b5733102ff746aec062bd88e2f0c
guid: cda43bbb3e934d546bafa492727a327d
AudioImporter:
externalObjects: {}
serializedVersion: 6

2
UOP1_Project/Assets/Audio/SFX/Interface/Interface_02.wav.meta


fileFormatVersion: 2
guid: 544ed3737343a2e469b9767d2deec067
guid: 3ac78e74854b0ec44a00c9f3c46a350a
AudioImporter:
externalObjects: {}
serializedVersion: 6

48
Docs/WikiImages/AmbientSettings.png

之前 之后
宽度: 483  |  高度: 190  |  大小: 16 KiB

150
Docs/WikiImages/BakingSettings.png

之前 之后
宽度: 482  |  高度: 602  |  大小: 50 KiB

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

正在加载...
取消
保存