Build gameplay systems and service settings
Подробные изменения: - Добавлены и доработаны модальные окна главного меню, сервисные настройки, шаблоны UI Toolkit и единый scene-flow сервис для переходов между сценами. - Расширена gameplay-архитектура: сессия забега, HUD, спавн контента платформ, collectible-предметы, оборудование, хрупкие и движущиеся платформы. - Добавлена база противников: типы спавна, патрулирование, процедурный спавнер, правила размещения через ScriptableObject-сложности и убийство врагов прыжком сверху. - Исправлены смерть и respawn игрока, финальный GameOver, отскоки от врагов, пружин и boost-предметов, а также проход сквозь врагов при усиленном подъеме. - Проведен рефакторинг взаимодействия систем: общий landing context, единые правила player-contact, NonLazy gameplay session, fail-fast installer и централизованный выбор точек спавна. - Обновлены сцены, prefab-ассеты, difficulty stages, ресурсы главного меню, настройки проекта, roadmap и аппаратная COM-интеграция. - Добавлены ассеты летучей мыши, врагов, collectibles, TextMesh Pro, ProjectContext и gameplay UI. Проверки: - dotnet build .\\Assembly-CSharp.csproj --no-restore - Unity validation ключевых gameplay/UI/scene-flow скриптов - Unity Console после force refresh без ошибок
This commit is contained in:
parent
cefb2fd345
commit
1f6884c5ac
@ -17,7 +17,7 @@
|
||||
- `claude-explorer` следует предпочитать для изучения архитектуры, исходников, команд и внутренних инструментов Claude Code.
|
||||
- `claude-rag` следует предпочитать для семантического поиска по проекту, анализа больших объёмов кода и ситуаций, где локальный индекс даёт преимущество над обычным текстовым поиском.
|
||||
- Память о проекте, его договорённостях, архитектурных решениях, важных гайдах, кодовой базе и ранее выявленном контексте следует по возможности сохранять и повторно использовать через `claude-rag`.
|
||||
- Кодовую базу проекта также следует по возможности индексировать и использовать через `claude-rag`, чтобы агент мог опираться на локальную семантическую память о структуре, модулях, связях и ранее изученных участках кода.
|
||||
- Кодовую базу проекта также следует по возможности индексировать и использовать через `claude-rag`, чтобы агент мог опираться на локальную семантическую память о структуре, модулях, связях и ранее изученных участках кода.
|
||||
- При повторяющихся задачах, исследовании крупных подсистем, возвращении к старым решениям, поиске проектного контекста и анализе существующей кодовой базы агенту следует сначала опираться на `claude-rag`, если для этого подходит локальный индекс.
|
||||
- Если MCP-инструмент хуже подходит для конкретной задачи, недоступен или создаёт лишние ограничения, агент может использовать встроенные инструменты как запасной вариант.
|
||||
|
||||
|
||||
@ -15,7 +15,7 @@ MonoBehaviour:
|
||||
m_DefaultGroup: 89fc1fb0b7336ca419f23062b0857137
|
||||
m_currentHash:
|
||||
serializedVersion: 2
|
||||
Hash: f52a25da7976b11e0a29af72b2abf0c3
|
||||
Hash: 4f891804dbd068047c1c49dbfdb37a72
|
||||
m_OptimizeCatalogSize: 0
|
||||
m_BuildRemoteCatalog: 0
|
||||
m_CatalogRequestsTimeout: 0
|
||||
@ -58,7 +58,7 @@ MonoBehaviour:
|
||||
m_ContentStateBuildPathProfileVariableName:
|
||||
m_CustomContentStateBuildPath:
|
||||
m_ContentStateBuildPath:
|
||||
m_BuildAddressablesWithPlayerBuild: 0
|
||||
m_BuildAddressablesWithPlayerBuild: 1
|
||||
m_overridePlayerVersion: '[UnityEditor.PlayerSettings.bundleVersion]'
|
||||
m_GroupAssets:
|
||||
- {fileID: 11400000, guid: a538a44e0a6ac93488028f109a2d8913, type: 2}
|
||||
@ -111,6 +111,8 @@ MonoBehaviour:
|
||||
- Locale
|
||||
- Locale-ru
|
||||
- Locale-en
|
||||
- settings
|
||||
- service
|
||||
m_SchemaTemplates: []
|
||||
m_GroupTemplateObjects:
|
||||
- {fileID: 11400000, guid: 9c5c03b019376ac43b6730325a038195, type: 2}
|
||||
|
||||
@ -14,7 +14,14 @@ MonoBehaviour:
|
||||
m_EditorClassIdentifier: Unity.Addressables.Editor::UnityEditor.AddressableAssets.Settings.AddressableAssetGroup
|
||||
m_GroupName: Default Local Group
|
||||
m_GUID: 89fc1fb0b7336ca419f23062b0857137
|
||||
m_SerializeEntries: []
|
||||
m_SerializeEntries:
|
||||
- m_GUID: 40905558cac5cdb4894f2f9b76c5f92e
|
||||
m_Address: settings/service-settings-database
|
||||
m_ReadOnly: 0
|
||||
m_SerializedLabels:
|
||||
- service
|
||||
- settings
|
||||
FlaggedDuringContentUpdateRestriction: 0
|
||||
m_ReadOnly: 0
|
||||
m_Settings: {fileID: 11400000, guid: 2ab5dad59ce41a7468cdf522a3e8755d, type: 2}
|
||||
m_SchemaSet:
|
||||
|
||||
28
Assets/AddressableAssetsData/ProfileDataSourceSettings.asset
Normal file
28
Assets/AddressableAssetsData/ProfileDataSourceSettings.asset
Normal file
@ -0,0 +1,28 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 7e3976da977cb49238499ea3b4c237ae, type: 3}
|
||||
m_Name: ProfileDataSourceSettings
|
||||
m_EditorClassIdentifier: Unity.Addressables.Editor::UnityEditor.AddressableAssets.Settings.ProfileDataSourceSettings
|
||||
profileGroupTypes:
|
||||
- m_GroupTypePrefix: Built-In
|
||||
m_Variables:
|
||||
- m_Suffix: BuildPath
|
||||
m_Value: '[UnityEngine.AddressableAssets.Addressables.BuildPath]/[BuildTarget]'
|
||||
- m_Suffix: LoadPath
|
||||
m_Value: '{UnityEngine.AddressableAssets.Addressables.RuntimePath}/[BuildTarget]'
|
||||
environments: []
|
||||
currentEnvironment:
|
||||
id:
|
||||
projectId:
|
||||
projectGenesisId:
|
||||
name:
|
||||
isDefault: 0
|
||||
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4846fae8984a95b449132820bb1b4b63
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/AddressableAssetsData/Windows.meta
Normal file
8
Assets/AddressableAssetsData/Windows.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 99a8d774c7497e442bc27dac4459593f
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Animations/Bat.meta
Normal file
8
Assets/Animations/Bat.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 679786d94f230e14ead9f3595d08a656
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
101
Assets/Animations/Bat/Bat.controller
Normal file
101
Assets/Animations/Bat/Bat.controller
Normal file
@ -0,0 +1,101 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1102 &-8396895325890622289
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: New Animation_Bat
|
||||
m_Speed: 2
|
||||
m_CycleOffset: 0
|
||||
m_Transitions: []
|
||||
m_StateMachineBehaviours: []
|
||||
m_Position: {x: 50, y: 50, z: 0}
|
||||
m_IKOnFeet: 0
|
||||
m_WriteDefaultValues: 1
|
||||
m_Mirror: 0
|
||||
m_SpeedParameterActive: 0
|
||||
m_MirrorParameterActive: 0
|
||||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 7400000, guid: 62ff08544e561a7418dded4606da6b55, type: 2}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!91 &9100000
|
||||
AnimatorController:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: Bat
|
||||
serializedVersion: 5
|
||||
m_AnimatorParameters: []
|
||||
m_AnimatorLayers:
|
||||
- serializedVersion: 5
|
||||
m_Name: Base Layer
|
||||
m_StateMachine: {fileID: 3455026678298623027}
|
||||
m_Mask: {fileID: 0}
|
||||
m_Motions: []
|
||||
m_Behaviours: []
|
||||
m_BlendingMode: 0
|
||||
m_SyncedLayerIndex: -1
|
||||
m_DefaultWeight: 0
|
||||
m_IKPass: 0
|
||||
m_SyncedLayerAffectsTiming: 0
|
||||
m_Controller: {fileID: 9100000}
|
||||
--- !u!1107 &3455026678298623027
|
||||
AnimatorStateMachine:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: Base Layer
|
||||
m_ChildStates:
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: -8396895325890622289}
|
||||
m_Position: {x: 440, y: 220, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: 5233408764562546203}
|
||||
m_Position: {x: 235, y: 65, z: 0}
|
||||
m_ChildStateMachines: []
|
||||
m_AnyStateTransitions: []
|
||||
m_EntryTransitions: []
|
||||
m_StateMachineTransitions: {}
|
||||
m_StateMachineBehaviours: []
|
||||
m_AnyStatePosition: {x: 50, y: 20, z: 0}
|
||||
m_EntryPosition: {x: 30, y: 140, z: 0}
|
||||
m_ExitPosition: {x: 800, y: 120, z: 0}
|
||||
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
|
||||
m_DefaultState: {fileID: -8396895325890622289}
|
||||
--- !u!1102 &5233408764562546203
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: New Animation_Bat 0
|
||||
m_Speed: 1
|
||||
m_CycleOffset: 0
|
||||
m_Transitions: []
|
||||
m_StateMachineBehaviours: []
|
||||
m_Position: {x: 50, y: 50, z: 0}
|
||||
m_IKOnFeet: 0
|
||||
m_WriteDefaultValues: 1
|
||||
m_Mirror: 0
|
||||
m_SpeedParameterActive: 0
|
||||
m_MirrorParameterActive: 0
|
||||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 7400000, guid: 62ff08544e561a7418dded4606da6b55, type: 2}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
8
Assets/Animations/Bat/Bat.controller.meta
Normal file
8
Assets/Animations/Bat/Bat.controller.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3f4c71c00bf3d624cb0e59d388599684
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
2209
Assets/Animations/Bat/New Animation_Bat.anim
Normal file
2209
Assets/Animations/Bat/New Animation_Bat.anim
Normal file
File diff suppressed because it is too large
Load Diff
8
Assets/Animations/Bat/New Animation_Bat.anim.meta
Normal file
8
Assets/Animations/Bat/New Animation_Bat.anim.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 62ff08544e561a7418dded4606da6b55
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -322,6 +322,9 @@ MonoBehaviour:
|
||||
highQualityFiltering:
|
||||
m_OverrideState: 1
|
||||
m_Value: 0
|
||||
filter:
|
||||
m_OverrideState: 1
|
||||
m_Value: 0
|
||||
downscale:
|
||||
m_OverrideState: 1
|
||||
m_Value: 0
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
{
|
||||
"version": 1,
|
||||
"name": "InputSystem_Actions",
|
||||
"maps": [
|
||||
{
|
||||
@ -501,7 +502,7 @@
|
||||
"name": "Cancel",
|
||||
"type": "Button",
|
||||
"id": "15cef263-9014-4fd5-94d9-4e4a6234a6ef",
|
||||
"expectedControlType": "Button",
|
||||
"expectedControlType": "",
|
||||
"processors": "",
|
||||
"interactions": "",
|
||||
"initialStateCheck": false
|
||||
@ -568,6 +569,15 @@
|
||||
"processors": "",
|
||||
"interactions": "",
|
||||
"initialStateCheck": false
|
||||
},
|
||||
{
|
||||
"name": "Secret",
|
||||
"type": "Button",
|
||||
"id": "1f9d3187-9fdb-4228-a91b-26d8dc96e7d0",
|
||||
"expectedControlType": "",
|
||||
"processors": "",
|
||||
"interactions": "",
|
||||
"initialStateCheck": false
|
||||
}
|
||||
],
|
||||
"bindings": [
|
||||
@ -988,6 +998,17 @@
|
||||
"action": "TrackedDeviceOrientation",
|
||||
"isComposite": false,
|
||||
"isPartOfComposite": false
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"id": "4d76d233-1faa-47fe-8595-55c39fbe3552",
|
||||
"path": "<Keyboard>/f6",
|
||||
"interactions": "",
|
||||
"processors": "",
|
||||
"groups": "",
|
||||
"action": "Secret",
|
||||
"isComposite": false,
|
||||
"isPartOfComposite": false
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
8
Assets/Prefabs/Gameplay/Collectibles.meta
Normal file
8
Assets/Prefabs/Gameplay/Collectibles.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ca975eead98335848b513efde68a38c7
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -0,0 +1,159 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &1649926752591026283
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 3454048493872327249}
|
||||
- component: {fileID: 3591721972395430666}
|
||||
- component: {fileID: 9139793318294144304}
|
||||
- component: {fileID: 6495022491269397702}
|
||||
- component: {fileID: 8526854025431675824}
|
||||
m_Layer: 0
|
||||
m_Name: BounceBoostCollectible
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &3454048493872327249
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1649926752591026283}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!212 &3591721972395430666
|
||||
SpriteRenderer:
|
||||
serializedVersion: 2
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1649926752591026283}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 0
|
||||
m_ReceiveShadows: 0
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 0
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 0
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 10
|
||||
m_MaskInteraction: 0
|
||||
m_Sprite: {fileID: 21300000, guid: 341628d8840484648b84419110eeabfa, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
m_DrawMode: 0
|
||||
m_Size: {x: 0.59, y: 0.62}
|
||||
m_AdaptiveModeThreshold: 0.5
|
||||
m_SpriteTileMode: 0
|
||||
m_WasSpriteAssigned: 1
|
||||
m_SpriteSortPoint: 0
|
||||
--- !u!58 &9139793318294144304
|
||||
CircleCollider2D:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1649926752591026283}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Density: 1
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_ForceSendLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ForceReceiveLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ContactCaptureLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_CallbackLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_IsTrigger: 1
|
||||
m_UsedByEffector: 0
|
||||
m_CompositeOperation: 0
|
||||
m_CompositeOrder: 0
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Radius: 0.25
|
||||
--- !u!114 &6495022491269397702
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1649926752591026283}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 45176cc3d2b0adf4592469063916cafe, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.BounceBoostCollectible
|
||||
disableOnCollected: 1
|
||||
bounceVelocity: 40
|
||||
scoreValue: 5
|
||||
--- !u!114 &8526854025431675824
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1649926752591026283}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 87915a1531f287e40b455801243acc45, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.PlatformSpawnedContent
|
||||
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 42ac5c9fb765781449b1a8cdc5bd3d64
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
192
Assets/Prefabs/Gameplay/Collectibles/CrystalCollectible.prefab
Normal file
192
Assets/Prefabs/Gameplay/Collectibles/CrystalCollectible.prefab
Normal file
@ -0,0 +1,192 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &7341068655679281185
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4026968076215623752}
|
||||
- component: {fileID: 9140651947484360701}
|
||||
- component: {fileID: 6853623286791460233}
|
||||
- component: {fileID: 8462963241259200514}
|
||||
m_Layer: 0
|
||||
m_Name: CrystalCollectible
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &4026968076215623752
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7341068655679281185}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 8349381518911893225}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!70 &9140651947484360701
|
||||
CapsuleCollider2D:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7341068655679281185}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Density: 1
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_ForceSendLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ForceReceiveLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ContactCaptureLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_CallbackLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_IsTrigger: 1
|
||||
m_UsedByEffector: 0
|
||||
m_CompositeOperation: 0
|
||||
m_CompositeOrder: 0
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Size: {x: 0.5, y: 0.75}
|
||||
m_Direction: 0
|
||||
--- !u!114 &6853623286791460233
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7341068655679281185}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: deb903e81ee443948b7397fcac22b117, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.CoinCollectible
|
||||
disableOnCollected: 1
|
||||
coinValue: 1
|
||||
scoreValue: 1
|
||||
--- !u!114 &8462963241259200514
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7341068655679281185}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 87915a1531f287e40b455801243acc45, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.PlatformSpawnedContent
|
||||
--- !u!1 &9134611908005895849
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8349381518911893225}
|
||||
- component: {fileID: 8296298383556791415}
|
||||
m_Layer: 0
|
||||
m_Name: Crystal
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &8349381518911893225
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9134611908005895849}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.2, y: 0.2, z: 0.2}
|
||||
m_ConstrainProportionsScale: 1
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4026968076215623752}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!212 &8296298383556791415
|
||||
SpriteRenderer:
|
||||
serializedVersion: 2
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9134611908005895849}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 0
|
||||
m_ReceiveShadows: 0
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 0
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 0
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_MaskInteraction: 0
|
||||
m_Sprite: {fileID: 7479642271789056252, guid: d61b05f68855c484e824fc5acfb172a1, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
m_DrawMode: 0
|
||||
m_Size: {x: 1, y: 1}
|
||||
m_AdaptiveModeThreshold: 0.5
|
||||
m_SpriteTileMode: 0
|
||||
m_WasSpriteAssigned: 1
|
||||
m_SpriteSortPoint: 0
|
||||
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9987915360f9bf740bc0939e23db9349
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -0,0 +1,160 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &382672864354709237
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 384491279874040987}
|
||||
- component: {fileID: 6170450325268674343}
|
||||
- component: {fileID: 8596285276108703207}
|
||||
- component: {fileID: 406616014793274496}
|
||||
- component: {fileID: 7456204191848197440}
|
||||
m_Layer: 0
|
||||
m_Name: HeightLiftCollectible
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &384491279874040987
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 382672864354709237}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!212 &6170450325268674343
|
||||
SpriteRenderer:
|
||||
serializedVersion: 2
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 382672864354709237}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 0
|
||||
m_ReceiveShadows: 0
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 0
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 0
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 10
|
||||
m_MaskInteraction: 0
|
||||
m_Sprite: {fileID: 21300000, guid: 83d3aff135b0eba41879575691eb5bb8, type: 3}
|
||||
m_Color: {r: 0.9622642, g: 0.34950158, b: 0.38523003, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
m_DrawMode: 0
|
||||
m_Size: {x: 0.62, y: 0.65}
|
||||
m_AdaptiveModeThreshold: 0.5
|
||||
m_SpriteTileMode: 0
|
||||
m_WasSpriteAssigned: 1
|
||||
m_SpriteSortPoint: 0
|
||||
--- !u!58 &8596285276108703207
|
||||
CircleCollider2D:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 382672864354709237}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Density: 1
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_ForceSendLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ForceReceiveLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ContactCaptureLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_CallbackLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_IsTrigger: 1
|
||||
m_UsedByEffector: 0
|
||||
m_CompositeOperation: 0
|
||||
m_CompositeOrder: 0
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Radius: 0.27
|
||||
--- !u!114 &406616014793274496
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 382672864354709237}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: d6608696d5f177540b0f06b9cbb46826, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.HeightLiftCollectible
|
||||
disableOnCollected: 1
|
||||
liftSpeed: 40
|
||||
liftHeight: 100
|
||||
scoreValue: 10
|
||||
--- !u!114 &7456204191848197440
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 382672864354709237}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 87915a1531f287e40b455801243acc45, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.PlatformSpawnedContent
|
||||
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 23063041ef8ecb449b37527f2279534f
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -159,7 +159,9 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.OneWayPlatformCollider
|
||||
player: {fileID: 0}
|
||||
topBoundaryPadding: 0.02
|
||||
topBoundaryPadding: 0
|
||||
landingVelocityThreshold: 0.05
|
||||
crossingGraceDistance: 0.8
|
||||
--- !u!114 &2235637253677343842
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -253,8 +255,8 @@ SpriteRenderer:
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingLayerID: 1658682819
|
||||
m_SortingLayer: -1
|
||||
m_SortingOrder: 0
|
||||
m_MaskInteraction: 0
|
||||
m_Sprite: {fileID: -70544561768458129, guid: d440231d6f96217499ab62926952e2b3, type: 3}
|
||||
@ -391,8 +393,8 @@ SpriteRenderer:
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingLayerID: 1658682819
|
||||
m_SortingLayer: -1
|
||||
m_SortingOrder: 0
|
||||
m_MaskInteraction: 0
|
||||
m_Sprite: {fileID: 8449129219236236317, guid: d440231d6f96217499ab62926952e2b3, type: 3}
|
||||
|
||||
8
Assets/Prefabs/Gameplay/Enemies.meta
Normal file
8
Assets/Prefabs/Gameplay/Enemies.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1f0b72bfb64324440bbd24dd992124ed
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
339
Assets/Prefabs/Gameplay/Enemies/Bat.prefab
Normal file
339
Assets/Prefabs/Gameplay/Enemies/Bat.prefab
Normal file
@ -0,0 +1,339 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1001 &6060741554283226580
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 0}
|
||||
m_Modifications:
|
||||
- target: {fileID: -8653719598885068355, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: Bat
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -7573160195067319704, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 0.9657164
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -7573160195067319704, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -7573160195067319704, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -7573160195067319704, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0.25959963
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -7573160195067319704, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 30.093
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -7552582706839291426, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalScale.x
|
||||
value: 0.1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -7552582706839291426, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalScale.y
|
||||
value: 0.1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -7552582706839291426, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalScale.z
|
||||
value: 0.1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -7552582706839291426, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: -0.8778173
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -7552582706839291426, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: -6.702254
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -7552582706839291426, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -7552582706839291426, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -7552582706839291426, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -7552582706839291426, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -7552582706839291426, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -7552582706839291426, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -7552582706839291426, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -7552582706839291426, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -7552582706839291426, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_ConstrainProportionsScale
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -7221020487405985688, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 0.9978294
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -7221020487405985688, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -7221020487405985688, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -7221020487405985688, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: -0.06585223
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -7221020487405985688, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: -7.552
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -1914268060482745136, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 0.9865411
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -1914268060482745136, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -1914268060482745136, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -1914268060482745136, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: -0.16351335
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -1914268060482745136, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: -18.822
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -103470509922460878, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 0.93103963
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -103470509922460878, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -103470509922460878, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -103470509922460878, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: -0.36491826
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: -103470509922460878, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: -42.805
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2471920254983572574, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 0.90787965
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2471920254983572574, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2471920254983572574, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2471920254983572574, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0.4192309
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2471920254983572574, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 49.572
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7905440446968883676, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 0.85633266
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7905440446968883676, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7905440446968883676, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7905440446968883676, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: -0.5164246
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7905440446968883676, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: -62.185
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects: []
|
||||
m_AddedComponents:
|
||||
- targetCorrespondingSourceObject: {fileID: -8653719598885068355, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 6616969598510582301}
|
||||
- targetCorrespondingSourceObject: {fileID: -8653719598885068355, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 7030633707417827889}
|
||||
- targetCorrespondingSourceObject: {fileID: -8653719598885068355, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 9214245330110399167}
|
||||
- targetCorrespondingSourceObject: {fileID: -8653719598885068355, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 5029523047635980553}
|
||||
m_SourcePrefab: {fileID: 4843985084834002234, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
--- !u!4 &4842427733413059594 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: -7552582706839291426, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
m_PrefabInstance: {fileID: 6060741554283226580}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!1 &6051671913546024041 stripped
|
||||
GameObject:
|
||||
m_CorrespondingSourceObject: {fileID: -8653719598885068355, guid: 5e0dbc12e9f97e14cbad53fb747704c9, type: 3}
|
||||
m_PrefabInstance: {fileID: 6060741554283226580}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!95 &6616969598510582301
|
||||
Animator:
|
||||
serializedVersion: 7
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6051671913546024041}
|
||||
m_Enabled: 1
|
||||
m_Avatar: {fileID: 0}
|
||||
m_Controller: {fileID: 9100000, guid: 3f4c71c00bf3d624cb0e59d388599684, type: 2}
|
||||
m_CullingMode: 0
|
||||
m_UpdateMode: 0
|
||||
m_ApplyRootMotion: 0
|
||||
m_LinearVelocityBlending: 0
|
||||
m_StabilizeFeet: 0
|
||||
m_AnimatePhysics: 0
|
||||
m_WarningMessage:
|
||||
m_HasTransformHierarchy: 1
|
||||
m_AllowConstantClipSamplingOptimization: 1
|
||||
m_KeepAnimatorStateOnDisable: 0
|
||||
m_WriteDefaultValuesOnDisable: 0
|
||||
--- !u!114 &7030633707417827889
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6051671913546024041}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: c29cff538c195c249b69c6f2236de67b, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Unity.2D.Animation.Runtime::UnityEngine.U2D.Animation.SpriteLibrary
|
||||
m_Library: []
|
||||
m_SpriteLibraryAsset: {fileID: 7108339969198208228, guid: 303efce1e093b814d8980dc929aff8ed, type: 3}
|
||||
--- !u!60 &9214245330110399167
|
||||
PolygonCollider2D:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6051671913546024041}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Density: 1
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_ForceSendLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ForceReceiveLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ContactCaptureLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_CallbackLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_IsTrigger: 1
|
||||
m_UsedByEffector: 0
|
||||
m_CompositeOperation: 0
|
||||
m_CompositeOrder: 0
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_SpriteTilingProperty:
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
pivot: {x: 0, y: 0}
|
||||
oldSize: {x: 0, y: 0}
|
||||
newSize: {x: 0, y: 0}
|
||||
adaptiveTilingThreshold: 0
|
||||
drawMode: 0
|
||||
adaptiveTiling: 0
|
||||
m_AutoTiling: 0
|
||||
m_Points:
|
||||
m_Paths:
|
||||
- - {x: 5.2754264, y: 15.056673}
|
||||
- {x: 2.2463593, y: 10.904937}
|
||||
- {x: 2.055397, y: 10.063164}
|
||||
- {x: 2.8733213, y: 7.463923}
|
||||
- {x: 0.6368122, y: 8.815968}
|
||||
- {x: -1.6915423, y: 7.731138}
|
||||
- {x: -1.9680666, y: 5.7833405}
|
||||
- {x: -3.9252276, y: 8.813034}
|
||||
- {x: -10.103769, y: 9.624693}
|
||||
- {x: -11.543783, y: 8.284389}
|
||||
- {x: -6.7071548, y: 3.448938}
|
||||
- {x: -2.083034, y: 1.3314323}
|
||||
- {x: 3.1557622, y: 0.10868433}
|
||||
- {x: 6.223524, y: 4.1325207}
|
||||
- {x: 8.0000925, y: 8.740171}
|
||||
- {x: 8.46353, y: 15.634463}
|
||||
m_UseDelaunayMesh: 1
|
||||
--- !u!114 &5029523047635980553
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6051671913546024041}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 605dc94842c31e540ae7a09b17007591, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.PatrolEnemy
|
||||
spawnKind: 1
|
||||
stompBounceVelocity: 17
|
||||
stompScore: 10
|
||||
stompTopTolerance: 0.2
|
||||
stompMinimumHeightFactor: 0.55
|
||||
localPatrolAxis: {x: 1, y: 0}
|
||||
patrolDistance: 1.2
|
||||
patrolSpeed: 1.4
|
||||
flipWhenMovingBack: 1
|
||||
visualFacesPositiveDirection: 0
|
||||
visualRoot: {fileID: 4842427733413059594}
|
||||
7
Assets/Prefabs/Gameplay/Enemies/Bat.prefab.meta
Normal file
7
Assets/Prefabs/Gameplay/Enemies/Bat.prefab.meta
Normal file
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dc382d4fdc981aa439af1624e230f11f
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
194
Assets/Prefabs/Gameplay/Enemies/PatrolEnemy.prefab
Normal file
194
Assets/Prefabs/Gameplay/Enemies/PatrolEnemy.prefab
Normal file
@ -0,0 +1,194 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &1911682497373903437
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8262002995828152749}
|
||||
- component: {fileID: 5577005654857578664}
|
||||
- component: {fileID: 3404602057596076165}
|
||||
- component: {fileID: 1556031391106333805}
|
||||
m_Layer: 0
|
||||
m_Name: PatrolEnemy
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &8262002995828152749
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1911682497373903437}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 4866556234619625411}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!58 &5577005654857578664
|
||||
CircleCollider2D:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1911682497373903437}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Density: 1
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_ForceSendLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ForceReceiveLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ContactCaptureLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_CallbackLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_IsTrigger: 1
|
||||
m_UsedByEffector: 0
|
||||
m_CompositeOperation: 0
|
||||
m_CompositeOrder: 0
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Radius: 0.38
|
||||
--- !u!114 &3404602057596076165
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1911682497373903437}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 605dc94842c31e540ae7a09b17007591, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.PatrolEnemy
|
||||
localPatrolAxis: {x: 1, y: 0}
|
||||
patrolDistance: 1.2
|
||||
patrolSpeed: 1.4
|
||||
stompBounceVelocity: 17
|
||||
stompScore: 10
|
||||
stompTopTolerance: 0.2
|
||||
--- !u!114 &1556031391106333805
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1911682497373903437}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 87915a1531f287e40b455801243acc45, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.PlatformSpawnedContent
|
||||
--- !u!1 &6676621499933334337
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4866556234619625411}
|
||||
- component: {fileID: 8366382549807975629}
|
||||
m_Layer: 0
|
||||
m_Name: Sprite
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &4866556234619625411
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6676621499933334337}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.2, y: 0.2, z: 0.2}
|
||||
m_ConstrainProportionsScale: 1
|
||||
m_Children: []
|
||||
m_Father: {fileID: 8262002995828152749}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!212 &8366382549807975629
|
||||
SpriteRenderer:
|
||||
serializedVersion: 2
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6676621499933334337}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 0
|
||||
m_ReceiveShadows: 0
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 0
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 0
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_MaskInteraction: 0
|
||||
m_Sprite: {fileID: -8781757214100938709, guid: dfda0581a0387f14fb9b79970fbe2478, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
m_DrawMode: 0
|
||||
m_Size: {x: 3.89, y: 3.05}
|
||||
m_AdaptiveModeThreshold: 0.5
|
||||
m_SpriteTileMode: 0
|
||||
m_WasSpriteAssigned: 1
|
||||
m_SpriteSortPoint: 0
|
||||
7
Assets/Prefabs/Gameplay/Enemies/PatrolEnemy.prefab.meta
Normal file
7
Assets/Prefabs/Gameplay/Enemies/PatrolEnemy.prefab.meta
Normal file
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: caa08bdad17cf83468a8416384277fe4
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
157
Assets/Prefabs/Gameplay/Equipment/HazardEquipment.prefab
Normal file
157
Assets/Prefabs/Gameplay/Equipment/HazardEquipment.prefab
Normal file
@ -0,0 +1,157 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &6689162642216591743
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5085244689812310206}
|
||||
- component: {fileID: 4464912994306914734}
|
||||
- component: {fileID: 517635067233225658}
|
||||
- component: {fileID: 7544208898612138932}
|
||||
- component: {fileID: 5070194482802988398}
|
||||
m_Layer: 0
|
||||
m_Name: HazardEquipment
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &5085244689812310206
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6689162642216591743}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!212 &4464912994306914734
|
||||
SpriteRenderer:
|
||||
serializedVersion: 2
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6689162642216591743}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 0
|
||||
m_ReceiveShadows: 0
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 0
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 0
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 10
|
||||
m_MaskInteraction: 0
|
||||
m_Sprite: {fileID: 21300000, guid: 83d3aff135b0eba41879575691eb5bb8, type: 3}
|
||||
m_Color: {r: 1, g: 0.35, b: 0.35, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
m_DrawMode: 0
|
||||
m_Size: {x: 0.62, y: 0.65}
|
||||
m_AdaptiveModeThreshold: 0.5
|
||||
m_SpriteTileMode: 0
|
||||
m_WasSpriteAssigned: 1
|
||||
m_SpriteSortPoint: 0
|
||||
--- !u!58 &517635067233225658
|
||||
CircleCollider2D:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6689162642216591743}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Density: 1
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_ForceSendLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ForceReceiveLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ContactCaptureLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_CallbackLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_IsTrigger: 1
|
||||
m_UsedByEffector: 0
|
||||
m_CompositeOperation: 0
|
||||
m_CompositeOrder: 0
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Radius: 0.25
|
||||
--- !u!114 &7544208898612138932
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6689162642216591743}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: cf34504aafe850849b76ddd3857f681b, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.HazardEquipment
|
||||
activationCooldown: 0.2
|
||||
--- !u!114 &5070194482802988398
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6689162642216591743}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 87915a1531f287e40b455801243acc45, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.PlatformSpawnedContent
|
||||
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c605966864b25ba42a9f33ff919a800c
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
160
Assets/Prefabs/Gameplay/Equipment/SpeedBoostEquipment.prefab
Normal file
160
Assets/Prefabs/Gameplay/Equipment/SpeedBoostEquipment.prefab
Normal file
@ -0,0 +1,160 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &6394508084590719524
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8225866807125319873}
|
||||
- component: {fileID: 7400502600871487111}
|
||||
- component: {fileID: 6910139583701154754}
|
||||
- component: {fileID: 8861890666834832349}
|
||||
- component: {fileID: 101100010298365801}
|
||||
m_Layer: 0
|
||||
m_Name: SpeedBoostEquipment
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &8225866807125319873
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6394508084590719524}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!212 &7400502600871487111
|
||||
SpriteRenderer:
|
||||
serializedVersion: 2
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6394508084590719524}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 0
|
||||
m_ReceiveShadows: 0
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 0
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 0
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 10
|
||||
m_MaskInteraction: 0
|
||||
m_Sprite: {fileID: 21300000, guid: 7414a1b979dd3124699a42c794a592d3, type: 3}
|
||||
m_Color: {r: 0.5, g: 1, b: 1, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
m_DrawMode: 0
|
||||
m_Size: {x: 0.62, y: 0.64}
|
||||
m_AdaptiveModeThreshold: 0.5
|
||||
m_SpriteTileMode: 0
|
||||
m_WasSpriteAssigned: 1
|
||||
m_SpriteSortPoint: 0
|
||||
--- !u!58 &6910139583701154754
|
||||
CircleCollider2D:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6394508084590719524}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Density: 1
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_ForceSendLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ForceReceiveLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ContactCaptureLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_CallbackLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_IsTrigger: 1
|
||||
m_UsedByEffector: 0
|
||||
m_CompositeOperation: 0
|
||||
m_CompositeOrder: 0
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Radius: 0.25
|
||||
--- !u!114 &8861890666834832349
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6394508084590719524}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 747a5c8ca2dafe94babc0829532cf3b4, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.SpeedBoostEquipment
|
||||
moveSpeedMultiplier: 1.45
|
||||
duration: 3
|
||||
bounceVelocity: 0
|
||||
activationCooldown: 0.25
|
||||
--- !u!114 &101100010298365801
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6394508084590719524}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 87915a1531f287e40b455801243acc45, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.PlatformSpawnedContent
|
||||
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a8e076fdd882f2e4ab07a76984a0bb97
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
694
Assets/Prefabs/Gameplay/FragilePlatform.prefab
Normal file
694
Assets/Prefabs/Gameplay/FragilePlatform.prefab
Normal file
@ -0,0 +1,694 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &964816656659499055
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1205885904080248378}
|
||||
- component: {fileID: 3222511668002816921}
|
||||
- component: {fileID: 390504419653235742}
|
||||
- component: {fileID: 8258886993694919767}
|
||||
- component: {fileID: 315965220548801040}
|
||||
- component: {fileID: 2235637253677343842}
|
||||
- component: {fileID: 310175300831842493}
|
||||
m_Layer: 0
|
||||
m_Name: FragilePlatform
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &1205885904080248378
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 964816656659499055}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 6710763819495474449}
|
||||
- {fileID: 1053927436537949408}
|
||||
- {fileID: 2175820264372441907}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!50 &3222511668002816921
|
||||
Rigidbody2D:
|
||||
serializedVersion: 5
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 964816656659499055}
|
||||
m_BodyType: 1
|
||||
m_Simulated: 1
|
||||
m_UseFullKinematicContacts: 0
|
||||
m_UseAutoMass: 0
|
||||
m_Mass: 1
|
||||
m_LinearDamping: 0
|
||||
m_AngularDamping: 0.05
|
||||
m_GravityScale: 1
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_Interpolate: 0
|
||||
m_SleepingMode: 1
|
||||
m_CollisionDetection: 0
|
||||
m_Constraints: 0
|
||||
--- !u!66 &390504419653235742
|
||||
CompositeCollider2D:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 964816656659499055}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Density: 1
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_ForceSendLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ForceReceiveLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ContactCaptureLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_CallbackLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_IsTrigger: 0
|
||||
m_UsedByEffector: 0
|
||||
m_CompositeOperation: 0
|
||||
m_CompositeOrder: 0
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_GeometryType: 1
|
||||
m_GenerationType: 0
|
||||
m_EdgeRadius: 0
|
||||
m_ColliderPaths:
|
||||
- m_Collider: {fileID: 3218710261601004859}
|
||||
m_ColliderPaths:
|
||||
- - X: 5000000
|
||||
Y: 5000000
|
||||
- X: -5000000
|
||||
Y: 5000000
|
||||
- X: -5000000
|
||||
Y: 0
|
||||
- X: 5000000
|
||||
Y: 0
|
||||
- m_Collider: {fileID: 5554127825943555543}
|
||||
m_ColliderPaths:
|
||||
- - X: 15000000
|
||||
Y: 5000000
|
||||
- X: 5000000
|
||||
Y: 5000000
|
||||
- X: 5000000
|
||||
Y: 0
|
||||
- X: 15000000
|
||||
Y: 0
|
||||
m_CompositePaths:
|
||||
m_Paths:
|
||||
- - {x: 1.4999707, y: 0}
|
||||
- {x: 1.4999707, y: 0.5}
|
||||
- {x: -0.5, y: 0.4999707}
|
||||
- {x: -0.4999707, y: 0}
|
||||
m_VertexDistance: 0.0005
|
||||
m_OffsetDistance: 0.00005
|
||||
m_UseDelaunayMesh: 0
|
||||
m_CompositeGameObject: {fileID: 964816656659499055}
|
||||
--- !u!114 &8258886993694919767
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 964816656659499055}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 63a76cd9bb67ade47b92da08d5312f7a, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.JumpPlatform
|
||||
--- !u!114 &315965220548801040
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 964816656659499055}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: b7304af1773d2d841ac6233d76035ef1, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.OneWayPlatformCollider
|
||||
player: {fileID: 0}
|
||||
topBoundaryPadding: 0
|
||||
landingVelocityThreshold: 0.05
|
||||
crossingGraceDistance: 0.8
|
||||
--- !u!114 &2235637253677343842
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 964816656659499055}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 0a288dffeb6d69d4699ecd00e49b0f2c, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.PlatformController
|
||||
collectibleSpawnPoints:
|
||||
- {fileID: 8634086561103883683}
|
||||
equipmentSpawnPoints:
|
||||
- {fileID: 7063958560061733011}
|
||||
enemySpawnPoints: []
|
||||
--- !u!114 &310175300831842493
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 964816656659499055}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: de467f1f456b3c1409c4e51eca4911e2, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.FragilePlatformBehaviour
|
||||
breakDelay: 0.08
|
||||
suppressAutoJump: 0
|
||||
disabledOnBreak: []
|
||||
colliders: []
|
||||
--- !u!1 &2372201055787281608
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2175820264372441907}
|
||||
m_Layer: 0
|
||||
m_Name: SpawnPoints
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &2175820264372441907
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2372201055787281608}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0.5, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 7296410561034137608}
|
||||
- {fileID: 8232334407418952531}
|
||||
m_Father: {fileID: 1205885904080248378}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &5077136950761168767
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2540267024819485677}
|
||||
- component: {fileID: 1978967242000210638}
|
||||
m_Layer: 0
|
||||
m_Name: Square
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 0
|
||||
--- !u!4 &2540267024819485677
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5077136950761168767}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.6, y: 0.6, z: 0.6}
|
||||
m_ConstrainProportionsScale: 1
|
||||
m_Children: []
|
||||
m_Father: {fileID: 8232334407418952531}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!212 &1978967242000210638
|
||||
SpriteRenderer:
|
||||
serializedVersion: 2
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5077136950761168767}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 0
|
||||
m_ReceiveShadows: 0
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 0
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 0
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_MaskInteraction: 0
|
||||
m_Sprite: {fileID: 21300000, guid: a7ea8ba2d9fa2eb42a0b8af96e11fc66, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
m_DrawMode: 0
|
||||
m_Size: {x: 1, y: 1}
|
||||
m_AdaptiveModeThreshold: 0.5
|
||||
m_SpriteTileMode: 0
|
||||
m_WasSpriteAssigned: 1
|
||||
m_SpriteSortPoint: 0
|
||||
--- !u!1 &6543131293092626866
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1053927436537949408}
|
||||
- component: {fileID: 1219762918678929400}
|
||||
- component: {fileID: 5554127825943555543}
|
||||
m_Layer: 0
|
||||
m_Name: PlatformTile_2
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &1053927436537949408
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6543131293092626866}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 1, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1205885904080248378}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!212 &1219762918678929400
|
||||
SpriteRenderer:
|
||||
serializedVersion: 2
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6543131293092626866}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 0
|
||||
m_ReceiveShadows: 0
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 0
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 0
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 1658682819
|
||||
m_SortingLayer: -1
|
||||
m_SortingOrder: 0
|
||||
m_MaskInteraction: 0
|
||||
m_Sprite: {fileID: -70544561768458129, guid: d440231d6f96217499ab62926952e2b3, type: 3}
|
||||
m_Color: {r: 0.8207547, g: 0.41424885, b: 0.41424885, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
m_DrawMode: 0
|
||||
m_Size: {x: 1, y: 1}
|
||||
m_AdaptiveModeThreshold: 0.5
|
||||
m_SpriteTileMode: 0
|
||||
m_WasSpriteAssigned: 1
|
||||
m_SpriteSortPoint: 0
|
||||
--- !u!61 &5554127825943555543
|
||||
BoxCollider2D:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6543131293092626866}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Density: 1
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_ForceSendLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ForceReceiveLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ContactCaptureLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_CallbackLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_IsTrigger: 0
|
||||
m_UsedByEffector: 0
|
||||
m_CompositeOperation: 1
|
||||
m_CompositeOrder: 0
|
||||
m_Offset: {x: 0, y: 0.25}
|
||||
m_SpriteTilingProperty:
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
oldSize: {x: 1, y: 1}
|
||||
newSize: {x: 1, y: 1}
|
||||
adaptiveTilingThreshold: 0.5
|
||||
drawMode: 0
|
||||
adaptiveTiling: 0
|
||||
m_AutoTiling: 0
|
||||
m_Size: {x: 1, y: 0.5}
|
||||
m_EdgeRadius: 0
|
||||
--- !u!1 &7236042952510876049
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8232334407418952531}
|
||||
- component: {fileID: 7063958560061733011}
|
||||
m_Layer: 0
|
||||
m_Name: EqiupmentSpawnPoint
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &8232334407418952531
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7236042952510876049}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0.65, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 2540267024819485677}
|
||||
m_Father: {fileID: 2175820264372441907}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &7063958560061733011
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7236042952510876049}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 4b8997e854b32fc45b20a35799d85c67, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.PlatformSpawnPoint
|
||||
kind: 1
|
||||
optional: 0
|
||||
weight: 1
|
||||
--- !u!1 &7300961631766593696
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6710763819495474449}
|
||||
- component: {fileID: 3849633677881264400}
|
||||
- component: {fileID: 3218710261601004859}
|
||||
m_Layer: 0
|
||||
m_Name: PlatformTile
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &6710763819495474449
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7300961631766593696}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1205885904080248378}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!212 &3849633677881264400
|
||||
SpriteRenderer:
|
||||
serializedVersion: 2
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7300961631766593696}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 0
|
||||
m_ReceiveShadows: 0
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 0
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 0
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 1658682819
|
||||
m_SortingLayer: -1
|
||||
m_SortingOrder: 0
|
||||
m_MaskInteraction: 0
|
||||
m_Sprite: {fileID: 8449129219236236317, guid: d440231d6f96217499ab62926952e2b3, type: 3}
|
||||
m_Color: {r: 0.8207547, g: 0.41424885, b: 0.41424885, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
m_DrawMode: 0
|
||||
m_Size: {x: 1, y: 1}
|
||||
m_AdaptiveModeThreshold: 0.5
|
||||
m_SpriteTileMode: 0
|
||||
m_WasSpriteAssigned: 1
|
||||
m_SpriteSortPoint: 0
|
||||
--- !u!61 &3218710261601004859
|
||||
BoxCollider2D:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7300961631766593696}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Density: 1
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_ForceSendLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ForceReceiveLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ContactCaptureLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_CallbackLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_IsTrigger: 0
|
||||
m_UsedByEffector: 0
|
||||
m_CompositeOperation: 1
|
||||
m_CompositeOrder: 0
|
||||
m_Offset: {x: 0, y: 0.25}
|
||||
m_SpriteTilingProperty:
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
oldSize: {x: 1, y: 1}
|
||||
newSize: {x: 1, y: 1}
|
||||
adaptiveTilingThreshold: 0.5
|
||||
drawMode: 0
|
||||
adaptiveTiling: 0
|
||||
m_AutoTiling: 0
|
||||
m_Size: {x: 1, y: 0.5}
|
||||
m_EdgeRadius: 0
|
||||
--- !u!1 &7729436994615948155
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 7296410561034137608}
|
||||
- component: {fileID: 8634086561103883683}
|
||||
m_Layer: 0
|
||||
m_Name: CollectibleSpawnPoint
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &7296410561034137608
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7729436994615948155}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 1.5, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 2175820264372441907}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &8634086561103883683
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7729436994615948155}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 4b8997e854b32fc45b20a35799d85c67, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.PlatformSpawnPoint
|
||||
kind: 0
|
||||
optional: 1
|
||||
weight: 1
|
||||
7
Assets/Prefabs/Gameplay/FragilePlatform.prefab.meta
Normal file
7
Assets/Prefabs/Gameplay/FragilePlatform.prefab.meta
Normal file
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fa1b0ae89608c924e92657d291389138
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
743
Assets/Prefabs/Gameplay/MovingPlatform.prefab
Normal file
743
Assets/Prefabs/Gameplay/MovingPlatform.prefab
Normal file
@ -0,0 +1,743 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &964816656659499055
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1205885904080248378}
|
||||
- component: {fileID: 3222511668002816921}
|
||||
- component: {fileID: 390504419653235742}
|
||||
- component: {fileID: 8258886993694919767}
|
||||
- component: {fileID: 315965220548801040}
|
||||
- component: {fileID: 2235637253677343842}
|
||||
- component: {fileID: 2103314207307173484}
|
||||
m_Layer: 0
|
||||
m_Name: MovingPlatform
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &1205885904080248378
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 964816656659499055}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 6710763819495474449}
|
||||
- {fileID: 1053927436537949408}
|
||||
- {fileID: 2175820264372441907}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!50 &3222511668002816921
|
||||
Rigidbody2D:
|
||||
serializedVersion: 5
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 964816656659499055}
|
||||
m_BodyType: 1
|
||||
m_Simulated: 1
|
||||
m_UseFullKinematicContacts: 0
|
||||
m_UseAutoMass: 0
|
||||
m_Mass: 1
|
||||
m_LinearDamping: 0
|
||||
m_AngularDamping: 0.05
|
||||
m_GravityScale: 1
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_Interpolate: 0
|
||||
m_SleepingMode: 1
|
||||
m_CollisionDetection: 0
|
||||
m_Constraints: 0
|
||||
--- !u!66 &390504419653235742
|
||||
CompositeCollider2D:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 964816656659499055}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Density: 1
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_ForceSendLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ForceReceiveLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ContactCaptureLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_CallbackLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_IsTrigger: 0
|
||||
m_UsedByEffector: 0
|
||||
m_CompositeOperation: 0
|
||||
m_CompositeOrder: 0
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_GeometryType: 1
|
||||
m_GenerationType: 0
|
||||
m_EdgeRadius: 0
|
||||
m_ColliderPaths:
|
||||
- m_Collider: {fileID: 3218710261601004859}
|
||||
m_ColliderPaths:
|
||||
- - X: 5000000
|
||||
Y: 5000000
|
||||
- X: -5000000
|
||||
Y: 5000000
|
||||
- X: -5000000
|
||||
Y: 0
|
||||
- X: 5000000
|
||||
Y: 0
|
||||
- m_Collider: {fileID: 5554127825943555543}
|
||||
m_ColliderPaths:
|
||||
- - X: 15000000
|
||||
Y: 5000000
|
||||
- X: 5000000
|
||||
Y: 5000000
|
||||
- X: 5000000
|
||||
Y: 0
|
||||
- X: 15000000
|
||||
Y: 0
|
||||
m_CompositePaths:
|
||||
m_Paths:
|
||||
- - {x: 1.4999707, y: 0}
|
||||
- {x: 1.4999707, y: 0.5}
|
||||
- {x: -0.5, y: 0.4999707}
|
||||
- {x: -0.4999707, y: 0}
|
||||
m_VertexDistance: 0.0005
|
||||
m_OffsetDistance: 0.00005
|
||||
m_UseDelaunayMesh: 0
|
||||
m_CompositeGameObject: {fileID: 964816656659499055}
|
||||
--- !u!114 &8258886993694919767
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 964816656659499055}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 63a76cd9bb67ade47b92da08d5312f7a, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.JumpPlatform
|
||||
--- !u!114 &315965220548801040
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 964816656659499055}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: b7304af1773d2d841ac6233d76035ef1, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.OneWayPlatformCollider
|
||||
player: {fileID: 0}
|
||||
topBoundaryPadding: 0
|
||||
landingVelocityThreshold: 0.05
|
||||
crossingGraceDistance: 0.8
|
||||
--- !u!114 &2235637253677343842
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 964816656659499055}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 0a288dffeb6d69d4699ecd00e49b0f2c, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.PlatformController
|
||||
collectibleSpawnPoints:
|
||||
- {fileID: 8634086561103883683}
|
||||
equipmentSpawnPoints:
|
||||
- {fileID: 7063958560061733011}
|
||||
enemySpawnPoints:
|
||||
- {fileID: 5305667757614428695}
|
||||
--- !u!114 &2103314207307173484
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 964816656659499055}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 2263840105d5eb34fb85ba6f13d89c65, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.MovingPlatformBehaviour
|
||||
localMoveAxis: {x: 1, y: 0}
|
||||
amplitude: 1.25
|
||||
cycleDuration: 2.5
|
||||
useSpawnIndexOffset: 1
|
||||
--- !u!1 &2372201055787281608
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2175820264372441907}
|
||||
m_Layer: 0
|
||||
m_Name: SpawnPoints
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &2175820264372441907
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2372201055787281608}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0.5, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 7296410561034137608}
|
||||
- {fileID: 8232334407418952531}
|
||||
- {fileID: 6950890482960297564}
|
||||
m_Father: {fileID: 1205885904080248378}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &5077136950761168767
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2540267024819485677}
|
||||
- component: {fileID: 1978967242000210638}
|
||||
m_Layer: 0
|
||||
m_Name: Square
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 0
|
||||
--- !u!4 &2540267024819485677
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5077136950761168767}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.6, y: 0.6, z: 0.6}
|
||||
m_ConstrainProportionsScale: 1
|
||||
m_Children: []
|
||||
m_Father: {fileID: 8232334407418952531}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!212 &1978967242000210638
|
||||
SpriteRenderer:
|
||||
serializedVersion: 2
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5077136950761168767}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 0
|
||||
m_ReceiveShadows: 0
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 0
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 0
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_MaskInteraction: 0
|
||||
m_Sprite: {fileID: 21300000, guid: a7ea8ba2d9fa2eb42a0b8af96e11fc66, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
m_DrawMode: 0
|
||||
m_Size: {x: 1, y: 1}
|
||||
m_AdaptiveModeThreshold: 0.5
|
||||
m_SpriteTileMode: 0
|
||||
m_WasSpriteAssigned: 1
|
||||
m_SpriteSortPoint: 0
|
||||
--- !u!1 &6543131293092626866
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1053927436537949408}
|
||||
- component: {fileID: 1219762918678929400}
|
||||
- component: {fileID: 5554127825943555543}
|
||||
m_Layer: 0
|
||||
m_Name: PlatformTile_2
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &1053927436537949408
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6543131293092626866}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 1, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1205885904080248378}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!212 &1219762918678929400
|
||||
SpriteRenderer:
|
||||
serializedVersion: 2
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6543131293092626866}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 0
|
||||
m_ReceiveShadows: 0
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 0
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 0
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_MaskInteraction: 0
|
||||
m_Sprite: {fileID: -70544561768458129, guid: d440231d6f96217499ab62926952e2b3, type: 3}
|
||||
m_Color: {r: 0.20496617, g: 0.5488127, b: 0.9245283, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
m_DrawMode: 0
|
||||
m_Size: {x: 1, y: 1}
|
||||
m_AdaptiveModeThreshold: 0.5
|
||||
m_SpriteTileMode: 0
|
||||
m_WasSpriteAssigned: 1
|
||||
m_SpriteSortPoint: 0
|
||||
--- !u!61 &5554127825943555543
|
||||
BoxCollider2D:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6543131293092626866}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Density: 1
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_ForceSendLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ForceReceiveLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ContactCaptureLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_CallbackLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_IsTrigger: 0
|
||||
m_UsedByEffector: 0
|
||||
m_CompositeOperation: 1
|
||||
m_CompositeOrder: 0
|
||||
m_Offset: {x: 0, y: 0.25}
|
||||
m_SpriteTilingProperty:
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
oldSize: {x: 1, y: 1}
|
||||
newSize: {x: 1, y: 1}
|
||||
adaptiveTilingThreshold: 0.5
|
||||
drawMode: 0
|
||||
adaptiveTiling: 0
|
||||
m_AutoTiling: 0
|
||||
m_Size: {x: 1, y: 0.5}
|
||||
m_EdgeRadius: 0
|
||||
--- !u!1 &7236042952510876049
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8232334407418952531}
|
||||
- component: {fileID: 7063958560061733011}
|
||||
m_Layer: 0
|
||||
m_Name: EqiupmentSpawnPoint
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &8232334407418952531
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7236042952510876049}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0.65, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 2540267024819485677}
|
||||
m_Father: {fileID: 2175820264372441907}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &7063958560061733011
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7236042952510876049}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 4b8997e854b32fc45b20a35799d85c67, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.PlatformSpawnPoint
|
||||
kind: 1
|
||||
optional: 0
|
||||
weight: 1
|
||||
--- !u!1 &7300961631766593696
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6710763819495474449}
|
||||
- component: {fileID: 3849633677881264400}
|
||||
- component: {fileID: 3218710261601004859}
|
||||
m_Layer: 0
|
||||
m_Name: PlatformTile
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &6710763819495474449
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7300961631766593696}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1205885904080248378}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!212 &3849633677881264400
|
||||
SpriteRenderer:
|
||||
serializedVersion: 2
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7300961631766593696}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 0
|
||||
m_ReceiveShadows: 0
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 0
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 0
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_MaskInteraction: 0
|
||||
m_Sprite: {fileID: 8449129219236236317, guid: d440231d6f96217499ab62926952e2b3, type: 3}
|
||||
m_Color: {r: 0.20496617, g: 0.5488127, b: 0.9245283, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
m_DrawMode: 0
|
||||
m_Size: {x: 1, y: 1}
|
||||
m_AdaptiveModeThreshold: 0.5
|
||||
m_SpriteTileMode: 0
|
||||
m_WasSpriteAssigned: 1
|
||||
m_SpriteSortPoint: 0
|
||||
--- !u!61 &3218710261601004859
|
||||
BoxCollider2D:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7300961631766593696}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Density: 1
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_ForceSendLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ForceReceiveLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ContactCaptureLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_CallbackLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_IsTrigger: 0
|
||||
m_UsedByEffector: 0
|
||||
m_CompositeOperation: 1
|
||||
m_CompositeOrder: 0
|
||||
m_Offset: {x: 0, y: 0.25}
|
||||
m_SpriteTilingProperty:
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
oldSize: {x: 1, y: 1}
|
||||
newSize: {x: 1, y: 1}
|
||||
adaptiveTilingThreshold: 0.5
|
||||
drawMode: 0
|
||||
adaptiveTiling: 0
|
||||
m_AutoTiling: 0
|
||||
m_Size: {x: 1, y: 0.5}
|
||||
m_EdgeRadius: 0
|
||||
--- !u!1 &7729436994615948155
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 7296410561034137608}
|
||||
- component: {fileID: 8634086561103883683}
|
||||
m_Layer: 0
|
||||
m_Name: CollectibleSpawnPoint
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &7296410561034137608
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7729436994615948155}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 1.5, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 2175820264372441907}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &8634086561103883683
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7729436994615948155}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 4b8997e854b32fc45b20a35799d85c67, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.PlatformSpawnPoint
|
||||
kind: 0
|
||||
optional: 1
|
||||
weight: 1
|
||||
--- !u!1 &8846698754903096030
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6950890482960297564}
|
||||
- component: {fileID: 5305667757614428695}
|
||||
m_Layer: 0
|
||||
m_Name: EnemySpawnPoint
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &6950890482960297564
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8846698754903096030}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 1.25, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 2175820264372441907}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &5305667757614428695
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8846698754903096030}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 4b8997e854b32fc45b20a35799d85c67, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.PlatformSpawnPoint
|
||||
kind: 2
|
||||
optional: 0
|
||||
weight: 1
|
||||
7
Assets/Prefabs/Gameplay/MovingPlatform.prefab.meta
Normal file
7
Assets/Prefabs/Gameplay/MovingPlatform.prefab.meta
Normal file
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 15b31b8e5d8677545b1ce2c8f700f901
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1837,7 +1837,7 @@ MonoBehaviour:
|
||||
groundProbeDistance: 0.34
|
||||
equipmentProbeHalfExtents: {x: 0.5, y: 0.35}
|
||||
horizontalWrapPadding: 0.65
|
||||
fallResetDistance: 5
|
||||
fallResetDistance: 0.5
|
||||
fallResetFromCameraBottom: 1
|
||||
respawnViewportY: 0.28
|
||||
centerRespawnX: 1
|
||||
|
||||
@ -160,7 +160,9 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.OneWayPlatformCollider
|
||||
player: {fileID: 0}
|
||||
topBoundaryPadding: 0.02
|
||||
topBoundaryPadding: 0
|
||||
landingVelocityThreshold: 0.05
|
||||
crossingGraceDistance: 0.8
|
||||
--- !u!114 &2235637253677343842
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -204,7 +206,7 @@ Transform:
|
||||
m_GameObject: {fileID: 2372201055787281608}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0.8688, y: 0.24718, z: 0}
|
||||
m_LocalPosition: {x: 0.5, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
@ -382,8 +384,8 @@ SpriteRenderer:
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingLayerID: 1658682819
|
||||
m_SortingLayer: -1
|
||||
m_SortingOrder: 0
|
||||
m_MaskInteraction: 0
|
||||
m_Sprite: {fileID: -70544561768458129, guid: d440231d6f96217499ab62926952e2b3, type: 3}
|
||||
@ -468,7 +470,7 @@ Transform:
|
||||
m_GameObject: {fileID: 7236042952510876049}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: -0.35, y: 0.43, z: 0}
|
||||
m_LocalPosition: {x: 0, y: 0.65, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
@ -568,8 +570,8 @@ SpriteRenderer:
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingLayerID: 1658682819
|
||||
m_SortingLayer: -1
|
||||
m_SortingOrder: 0
|
||||
m_MaskInteraction: 0
|
||||
m_Sprite: {fileID: 8449129219236236317, guid: d440231d6f96217499ab62926952e2b3, type: 3}
|
||||
@ -639,7 +641,7 @@ GameObject:
|
||||
- component: {fileID: 7296410561034137608}
|
||||
- component: {fileID: 8634086561103883683}
|
||||
m_Layer: 0
|
||||
m_Name: CollectibleSpanPoint
|
||||
m_Name: CollectibleSpawnPoint
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
@ -654,7 +656,7 @@ Transform:
|
||||
m_GameObject: {fileID: 7729436994615948155}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0.5, z: 0}
|
||||
m_LocalPosition: {x: 0, y: 1.5, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
@ -701,7 +703,7 @@ Transform:
|
||||
m_GameObject: {fileID: 8846698754903096030}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: -0.4, y: 0.43, z: 0}
|
||||
m_LocalPosition: {x: 0, y: 1.25, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
|
||||
83
Assets/Resources/ProjectContext.prefab
Normal file
83
Assets/Resources/ProjectContext.prefab
Normal file
@ -0,0 +1,83 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &1890352100173040858
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6987677732352224487}
|
||||
- component: {fileID: 6104063899786295062}
|
||||
- component: {fileID: 1793366000134005455}
|
||||
m_Layer: 0
|
||||
m_Name: ProjectContext
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &6987677732352224487
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1890352100173040858}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &6104063899786295062
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1890352100173040858}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: a4e6589720da476459dc6dd71624b071, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Zenject::Zenject.ProjectContext
|
||||
_scriptableObjectInstallers: []
|
||||
_monoInstallers:
|
||||
- {fileID: 1793366000134005455}
|
||||
_installerPrefabs: []
|
||||
_findSiblingMonoInstallers: 0
|
||||
_parentNewObjectsUnderContext: 0
|
||||
_editorReflectionBakingCoverageMode: 0
|
||||
_buildsReflectionBakingCoverageMode: 0
|
||||
_settings:
|
||||
_ensureDeterministicDestructionOrderOnApplicationQuit: 0
|
||||
_displayWarningWhenResolvingDuringInstall: 1
|
||||
_validationRootResolveMethod: 0
|
||||
_validationErrorResponse: 0
|
||||
_constructorChoiceStrategy: 0
|
||||
_signalSettings:
|
||||
_defaultSyncMode: 0
|
||||
_missingHandlerDefaultResponse: 2
|
||||
_requireStrictUnsubscribe: 0
|
||||
_defaultAsyncTickPriority: 1
|
||||
--- !u!114 &1793366000134005455
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1890352100173040858}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 9aa54c60d21f3754a9bbead2e5c6875b, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Settings.ServiceSettingsInstaller
|
||||
databaseAddress: settings/service-settings-database
|
||||
fallbackDatabase: {fileID: 0}
|
||||
fileName: service-settings.json
|
||||
loadImmediately: 1
|
||||
bindActionsInScene: 1
|
||||
7
Assets/Resources/ProjectContext.prefab.meta
Normal file
7
Assets/Resources/ProjectContext.prefab.meta
Normal file
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a93150cb651c3c84fbf3f1c2b2f056d7
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Resources/UI.meta
Normal file
8
Assets/Resources/UI.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ede0e1d8b348f8448934a56ee10e36fb
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Resources/UI/MainMenu.meta
Normal file
8
Assets/Resources/UI/MainMenu.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4919a0f6834fe42428715c9cab547950
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Resources/UI/MainMenu/Templates.meta
Normal file
8
Assets/Resources/UI/MainMenu/Templates.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3e035b8e4dab00246b4f7a466afe5a28
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -0,0 +1,6 @@
|
||||
<ui:UXML xmlns:ui="UnityEngine.UIElements" editor-extension-mode="False">
|
||||
<ui:Button name="SettingsBoolControlRoot" focusable="false" class="settings-control settings-bool-control" style="width: auto; min-height: 54px; padding-left: 0; padding-right: 0; padding-top: 0; padding-bottom: 0; border-left-width: 0; border-right-width: 0; border-top-width: 0; border-bottom-width: 0; flex-direction: row; align-items: center; justify-content: flex-start; background-color: rgba(255, 255, 255, 0); color: rgb(255, 255, 255); -unity-text-auto-size: best-fit 10px 100px; -unity-text-generator: advanced; margin-left: 4%; margin-top: 1%; margin-right: 2%; margin-bottom: 1%;">
|
||||
<ui:Label name="SettingsControlTitle" text="Показывать номер поддержки" class="settings-name" style="width: 300px; min-width: 190px; margin-right: 22px; font-size: 20px; -unity-font-style: normal; white-space: normal; -unity-text-align: middle-left; color: rgb(255, 255, 255); -unity-text-generator: advanced; -unity-text-auto-size: best-fit 10px 28px; -unity-font-definition: url("project://database/Assets/Fonts/RifficFree-Bold.ttf?fileID=12800000&guid=63991fec8a53abe4d9a7907ef7f0db77&type=3#RifficFree-Bold");"/>
|
||||
<ui:VisualElement name="SettingsBoolIndicator" class="settings-checkbox" style="width: 38px; height: 38px; min-width: 38px; min-height: 38px; border-left-width: 4px; border-right-width: 4px; border-top-width: 4px; border-bottom-width: 4px; border-left-color: rgb(255, 255, 255); border-right-color: rgb(255, 255, 255); border-top-color: rgb(255, 255, 255); border-bottom-color: rgb(255, 255, 255); background-color: rgba(255, 255, 255, 0);"/>
|
||||
</ui:Button>
|
||||
</ui:UXML>
|
||||
@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2ac8a4d8759da50468703edffcdb63fb
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
||||
@ -0,0 +1,7 @@
|
||||
<ui:UXML xmlns:ui="UnityEngine.UIElements" editor-extension-mode="False">
|
||||
<ui:VisualElement name="SettingsButtonControlRoot" class="settings-control settings-button-control" style="width: 350px; min-height: 70px; flex-direction: row; align-items: center; justify-content: flex-start; color: rgb(255, 255, 255);">
|
||||
<ui:Button name="SettingsActionButton" text="Выполнить" focusable="false" class="settings-action-button" style="width: auto; min-width: 100%; height: auto; min-height: 70px; margin-left: 4%; padding-left: 15%; padding-right: 15%; padding-top: 0%; padding-bottom: 0%; border-left-width: 0; border-right-width: 0; border-top-width: 0; border-bottom-width: 0; font-size: 24px; -unity-font-style: normal; -unity-text-align: middle-center; color: rgb(84, 68, 174); background-color: rgba(255, 255, 255, 0); background-image: url("project://database/Assets/Sprites/UI/Components/plashka_central.png?fileID=-854326483344920349&guid=347f2b50b8b847141848f1e1c06d59af&type=3#plashka_central_0"); -unity-background-scale-mode: stretch-to-fill; -unity-background-image-tint-color: rgb(255, 203, 72); -unity-text-generator: advanced; -unity-text-auto-size: best-fit 14px 28px; -unity-font-definition: url("project://database/Assets/Fonts/RifficFree-Bold.ttf?fileID=12800000&guid=63991fec8a53abe4d9a7907ef7f0db77&type=3#RifficFree-Bold"); margin-top: 2%; margin-right: 2%; margin-bottom: 2%; -unity-slice-scale: 0.4px;">
|
||||
<ui:Label name="SettingsControlTitle" text="Тест выдачи приза" class="settings-name" style="display: none; -unity-text-generator: advanced; -unity-text-auto-size: best-fit 10px 100px; font-size: 28px;"/>
|
||||
</ui:Button>
|
||||
</ui:VisualElement>
|
||||
</ui:UXML>
|
||||
@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3dc41f4dd71944f4a84b73b3617d0187
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
||||
@ -0,0 +1,6 @@
|
||||
<ui:UXML xmlns:ui="UnityEngine.UIElements" editor-extension-mode="False">
|
||||
<ui:Button name="SettingsGroupHeaderRoot" focusable="true" class="settings-group-title settings-focus-target" style="width: auto; height: 70px; min-height: 70px; margin-top: 4%; margin-bottom: 2%; padding-left: 6%; padding-right: 31%; padding-top: 0; padding-bottom: 0; border-left-width: 0; border-right-width: 0; border-top-width: 0; border-bottom-width: 0; flex-direction: row; align-items: center; justify-content: space-between; background-image: url("project://database/Assets/Sprites/UI/Components/icon_1.png?fileID=8218771907821357143&guid=dd3ae1d0db6319e48abc746c0d56666c&type=3#icon_1_0"); -unity-background-image-tint-color: rgb(255, 255, 255); -unity-background-scale-mode: stretch-to-fill; background-color: rgba(255, 255, 255, 0); color: rgb(84, 68, 174); margin-right: 1%; margin-left: 1%; -unity-text-generator: advanced; -unity-text-auto-size: best-fit 10px 100px; -unity-slice-scale: 0.5px;">
|
||||
<ui:Label name="SettingsGroupTitle" text="ГРУППА" class="settings-group-label" style="flex-grow: 1; font-size: 28px; -unity-font-style: normal; -unity-text-align: middle-left; color: rgb(84, 68, 174); -unity-font-definition: url("project://database/Assets/Fonts/RifficFree-Bold.ttf?fileID=12800000&guid=63991fec8a53abe4d9a7907ef7f0db77&type=3#RifficFree-Bold");"/>
|
||||
<ui:Label name="SettingsGroupDisclosure" text="▼" class="settings-group-disclosure" style="display: none;"/>
|
||||
</ui:Button>
|
||||
</ui:UXML>
|
||||
@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8bdc16de0a8def84884149599b00c65f
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
||||
@ -0,0 +1,10 @@
|
||||
<ui:UXML xmlns:ui="UnityEngine.UIElements" editor-extension-mode="False">
|
||||
<ui:VisualElement name="SettingsStepperControlRoot" class="settings-control settings-stepper" style="width: auto; min-height: 54px; flex-direction: row; align-items: center; justify-content: flex-start; color: rgb(255, 255, 255); margin-left: 4%; margin-bottom: 1%; margin-right: 2%; margin-top: 1%;">
|
||||
<ui:Label name="SettingsControlTitle" text="Громкость музыки" class="settings-name" style="width: 300px; min-width: 190px; margin-right: 12px; font-size: 20px; -unity-font-style: normal; white-space: normal; -unity-text-align: middle-left; color: rgb(255, 255, 255); -unity-text-generator: advanced; -unity-text-auto-size: best-fit 10px 28px; -unity-font-definition: url("project://database/Assets/Fonts/RifficFree-Bold.ttf?fileID=12800000&guid=63991fec8a53abe4d9a7907ef7f0db77&type=3#RifficFree-Bold");"/>
|
||||
<ui:VisualElement name="SettingsStepperValueContainer" class="settings-stepper-value" style="width: 218px; min-width: 218px; height: 54px; flex-direction: row; align-items: center; justify-content: center;">
|
||||
<ui:Button name="SettingsStepperPreviousButton" text="◀" focusable="false" class="settings-arrow-button" style="width: 48px; height: 54px; min-width: 48px; border-left-width: 0; border-right-width: 0; border-top-width: 0; border-bottom-width: 0; font-size: 28px; color: rgb(255, 255, 255); background-color: rgba(255, 255, 255, 0);"/>
|
||||
<ui:Label name="SettingsStepperValueLabel" text="0%" class="settings-value-label" style="width: 122px; height: 54px; font-size: 30px; -unity-font-style: normal; -unity-text-align: middle-center; color: rgb(255, 255, 255); -unity-text-generator: advanced; -unity-text-auto-size: best-fit 16px 30px; -unity-font-definition: url("project://database/Assets/Fonts/RifficFree-Bold.ttf?fileID=12800000&guid=63991fec8a53abe4d9a7907ef7f0db77&type=3#RifficFree-Bold");"/>
|
||||
<ui:Button name="SettingsStepperNextButton" text="▶" focusable="false" class="settings-arrow-button" style="width: 48px; height: 54px; min-width: 48px; border-left-width: 0; border-right-width: 0; border-top-width: 0; border-bottom-width: 0; font-size: 28px; color: rgb(255, 255, 255); background-color: rgba(255, 255, 255, 0);"/>
|
||||
</ui:VisualElement>
|
||||
</ui:VisualElement>
|
||||
</ui:UXML>
|
||||
@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c12ecb9297b1a4a45a32d3913894fb87
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
||||
@ -0,0 +1,6 @@
|
||||
<ui:UXML xmlns:ui="UnityEngine.UIElements" editor-extension-mode="False">
|
||||
<ui:VisualElement name="SettingsTextControlRoot" class="settings-control settings-text-control" style="width: auto; min-height: 54px; flex-direction: row; align-items: center; justify-content: flex-start; color: rgb(255, 255, 255); margin-top: 1%; margin-right: 2%; margin-bottom: 1%; margin-left: 4%;">
|
||||
<ui:Label name="SettingsControlTitle" text="Номер поддержки" class="settings-name" style="width: 300px; min-width: 190px; margin-right: 16px; font-size: 20px; -unity-font-style: normal; white-space: normal; -unity-text-align: middle-left; color: rgb(255, 255, 255); -unity-text-generator: advanced; -unity-text-auto-size: best-fit 10px 28px; -unity-font-definition: url("project://database/Assets/Fonts/RifficFree-Bold.ttf?fileID=12800000&guid=63991fec8a53abe4d9a7907ef7f0db77&type=3#RifficFree-Bold");"/>
|
||||
<ui:TextField name="SettingsTextField" value="+79999999999" class="settings-text-field" style="width: 220px; min-width: 220px; min-height: 46px; font-size: 20px; color: rgb(84, 68, 174); -unity-text-generator: advanced; -unity-text-auto-size: best-fit 12px 22px;"/>
|
||||
</ui:VisualElement>
|
||||
</ui:UXML>
|
||||
@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 94d66c77f966ace46af48ae1bfdc3b67
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
||||
@ -161,6 +161,7 @@ GameObject:
|
||||
m_Component:
|
||||
- component: {fileID: 344459309}
|
||||
- component: {fileID: 344459308}
|
||||
- component: {fileID: 344459310}
|
||||
m_Layer: 0
|
||||
m_Name: Platform Spawner
|
||||
m_TagString: Untagged
|
||||
@ -184,7 +185,8 @@ MonoBehaviour:
|
||||
horizontalPadding: 0.85
|
||||
recycleDistanceBelowCameraBottom: 12
|
||||
useHardwareRandomSeed: 1
|
||||
randomSeed: 1207
|
||||
randomSeed: 1
|
||||
proceduralEnemySpawner: {fileID: 344459310}
|
||||
--- !u!4 &344459309
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -200,6 +202,83 @@ Transform:
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &344459310
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 344459307}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 47ed0f3875f8ad348bdfdce600932c12, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.ProceduralEnemySpawner
|
||||
initialSpawnY: 8
|
||||
verticalStep: 12
|
||||
maxAliveEnemies: 8
|
||||
spawnAttempts: 12
|
||||
horizontalPadding: 0.85
|
||||
verticalJitter: 1.5
|
||||
fallbackEnemyHalfExtents: {x: 0.55, y: 0.55}
|
||||
platformClearance: {x: 0.15, y: 0.15}
|
||||
blockingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
--- !u!1 &624463940
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 624463943}
|
||||
- component: {fileID: 624463941}
|
||||
m_Layer: 0
|
||||
m_Name: Gameplay HUD
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!114 &624463941
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 624463940}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f64c7f029e315df4e80ec13942c0a85e, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.UI.Gameplay.GameplayHudController
|
||||
visualTreeAsset: {fileID: 9197481963319205126, guid: e5019473f4474704f8a8e8c93608eafc, type: 3}
|
||||
panelSettings: {fileID: 11400000, guid: d0960c9338bdb86469da533ffbbbc1fb, type: 2}
|
||||
sortingOrder: 10
|
||||
scoreLabelName: ScoreValue
|
||||
heightLabelName: HeightValue
|
||||
bestHeightLabelName: BestHeightValue
|
||||
livesLabelName: LivesValue
|
||||
coinsLabelName: CoinsValue
|
||||
deathsLabelName: DeathsValue
|
||||
stateLabelName: StateValue
|
||||
--- !u!4 &624463943
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 624463940}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &973362138
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -310,6 +389,85 @@ PrefabInstance:
|
||||
m_AddedGameObjects: []
|
||||
m_AddedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: d705af614a982e74bba9e2a3b697f565, type: 3}
|
||||
--- !u!1 &1693654372
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1693654375}
|
||||
- component: {fileID: 1693654374}
|
||||
- component: {fileID: 1693654373}
|
||||
m_Layer: 0
|
||||
m_Name: EventSystem
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!114 &1693654373
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1693654372}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Unity.InputSystem::UnityEngine.InputSystem.UI.InputSystemUIInputModule
|
||||
m_SendPointerHoverToParent: 1
|
||||
m_MoveRepeatDelay: 0.5
|
||||
m_MoveRepeatRate: 0.1
|
||||
m_XRTrackingOrigin: {fileID: 0}
|
||||
m_ActionsAsset: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_PointAction: {fileID: -1654692200621890270, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_MoveAction: {fileID: -8784545083839296357, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_SubmitAction: {fileID: 392368643174621059, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_CancelAction: {fileID: 7727032971491509709, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_LeftClickAction: {fileID: 3001919216989983466, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_MiddleClickAction: {fileID: -2185481485913320682, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_RightClickAction: {fileID: -4090225696740746782, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_ScrollWheelAction: {fileID: 6240969308177333660, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_TrackedDevicePositionAction: {fileID: 6564999863303420839, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_TrackedDeviceOrientationAction: {fileID: 7970375526676320489, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
|
||||
m_DeselectOnBackgroundClick: 1
|
||||
m_PointerBehavior: 0
|
||||
m_CursorLockBehavior: 0
|
||||
m_ScrollDeltaPerTick: 6
|
||||
--- !u!114 &1693654374
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1693654372}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.EventSystems.EventSystem
|
||||
m_FirstSelected: {fileID: 0}
|
||||
m_sendNavigationEvents: 1
|
||||
m_DragThreshold: 10
|
||||
--- !u!4 &1693654375
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1693654372}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!4 &1740411098 stripped
|
||||
Transform:
|
||||
m_CorrespondingSourceObject: {fileID: 7172431620267875091, guid: d705af614a982e74bba9e2a3b697f565, type: 3}
|
||||
@ -557,8 +715,8 @@ SpriteRenderer:
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingLayerID: -876065631
|
||||
m_SortingLayer: -2
|
||||
m_SortingOrder: -200
|
||||
m_MaskInteraction: 0
|
||||
m_Sprite: {fileID: 21300000, guid: cf6b76e72a39f144aab3928a6d6f71ad, type: 3}
|
||||
@ -709,11 +867,15 @@ MonoBehaviour:
|
||||
groundProbeStartOffset: 0.08
|
||||
groundProbeDistance: 0.34
|
||||
equipmentProbeHalfExtents: {x: 0.5, y: 0.35}
|
||||
sweptLandingProbeHalfExtents: {x: 0.48, y: 0.08}
|
||||
sweptLandingExtraDistance: 0.18
|
||||
collisionDetectionMode: 1
|
||||
horizontalWrapPadding: 0.65
|
||||
fallResetDistance: 5
|
||||
fallResetDistance: 0.5
|
||||
fallResetFromCameraBottom: 1
|
||||
respawnViewportY: 0.28
|
||||
centerRespawnX: 1
|
||||
deathRespawnDelay: 0.35
|
||||
animator: {fileID: 0}
|
||||
visualRoot: {fileID: 0}
|
||||
visualRootName: Body
|
||||
@ -854,3 +1016,5 @@ SceneRoots:
|
||||
- {fileID: 344459309}
|
||||
- {fileID: 1998332553}
|
||||
- {fileID: 973362140}
|
||||
- {fileID: 624463943}
|
||||
- {fileID: 1693654375}
|
||||
|
||||
@ -222,7 +222,7 @@ MonoBehaviour:
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3}
|
||||
m_Name:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalCameraData
|
||||
m_RenderShadows: 1
|
||||
m_RequiresDepthTextureOption: 2
|
||||
@ -256,6 +256,127 @@ MonoBehaviour:
|
||||
m_VarianceClampScale: 0.9
|
||||
m_ContrastAdaptiveSharpening: 0
|
||||
m_Version: 2
|
||||
--- !u!1 &8222466
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8222469}
|
||||
- component: {fileID: 8222468}
|
||||
- component: {fileID: 8222467}
|
||||
m_Layer: 0
|
||||
m_Name: EventSystem
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!114 &8222467
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8222466}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Unity.InputSystem::UnityEngine.InputSystem.UI.InputSystemUIInputModule
|
||||
m_SendPointerHoverToParent: 1
|
||||
m_MoveRepeatDelay: 0.5
|
||||
m_MoveRepeatRate: 0.1
|
||||
m_XRTrackingOrigin: {fileID: 0}
|
||||
m_ActionsAsset: {fileID: -944628639613478452, guid: 2bcd2660ca9b64942af0de543d8d7100, type: 3}
|
||||
m_PointAction: {fileID: 1932080467}
|
||||
m_MoveAction: {fileID: 2130237725}
|
||||
m_SubmitAction: {fileID: 1037422209}
|
||||
m_CancelAction: {fileID: 491707281}
|
||||
m_LeftClickAction: {fileID: 589680430}
|
||||
m_MiddleClickAction: {fileID: 647806552}
|
||||
m_RightClickAction: {fileID: 953355540}
|
||||
m_ScrollWheelAction: {fileID: 1409131790}
|
||||
m_TrackedDevicePositionAction: {fileID: 1014446460}
|
||||
m_TrackedDeviceOrientationAction: {fileID: 2034036131}
|
||||
m_DeselectOnBackgroundClick: 1
|
||||
m_PointerBehavior: 0
|
||||
m_CursorLockBehavior: 0
|
||||
m_ScrollDeltaPerTick: 6
|
||||
--- !u!114 &8222468
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8222466}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.EventSystems.EventSystem
|
||||
m_FirstSelected: {fileID: 0}
|
||||
m_sendNavigationEvents: 1
|
||||
m_DragThreshold: 10
|
||||
--- !u!4 &8222469
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8222466}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &491707281
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fc1515ab76e54f068e2f2207940fab32, type: 3}
|
||||
m_Name: UI/Cancel
|
||||
m_EditorClassIdentifier: Unity.InputSystem::UnityEngine.InputSystem.InputActionReference
|
||||
m_Asset: {fileID: -944628639613478452, guid: 2bcd2660ca9b64942af0de543d8d7100, type: 3}
|
||||
m_ActionId: 15cef263-9014-4fd5-94d9-4e4a6234a6ef
|
||||
--- !u!114 &589680430
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fc1515ab76e54f068e2f2207940fab32, type: 3}
|
||||
m_Name: UI/Click
|
||||
m_EditorClassIdentifier: Unity.InputSystem::UnityEngine.InputSystem.InputActionReference
|
||||
m_Asset: {fileID: -944628639613478452, guid: 2bcd2660ca9b64942af0de543d8d7100, type: 3}
|
||||
m_ActionId: 3c7022bf-7922-4f7c-a998-c437916075ad
|
||||
--- !u!114 &647806552
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fc1515ab76e54f068e2f2207940fab32, type: 3}
|
||||
m_Name: UI/MiddleClick
|
||||
m_EditorClassIdentifier: Unity.InputSystem::UnityEngine.InputSystem.InputActionReference
|
||||
m_Asset: {fileID: -944628639613478452, guid: 2bcd2660ca9b64942af0de543d8d7100, type: 3}
|
||||
m_ActionId: dad70c86-b58c-4b17-88ad-f5e53adf419e
|
||||
--- !u!1 &653892269
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -340,9 +461,9 @@ Transform:
|
||||
m_GameObject: {fileID: 653892269}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 9.5, y: 0, z: 0}
|
||||
m_LocalScale: {x: 5.4, y: 9.6, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_LocalPosition: {x: 12, y: 0, z: 0}
|
||||
m_LocalScale: {x: 10.8, y: 19.2, z: 2}
|
||||
m_ConstrainProportionsScale: 1
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
@ -378,6 +499,11 @@ MonoBehaviour:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.UI.MainMenu.MainMenuController
|
||||
gameplaySceneName: Game
|
||||
settingsSceneName:
|
||||
defaultFocusedButtonName: RulesButton
|
||||
normalButtonImageTint: {r: 1, g: 1, b: 1, a: 1}
|
||||
focusedButtonImageTint: {r: 0.80784315, g: 1, b: 0.101960786, a: 1}
|
||||
secretActionReference: {fileID: 7552203824317127043, guid: 2bcd2660ca9b64942af0de543d8d7100, type: 3}
|
||||
legacyInputActionsAsset: {fileID: -944628639613478452, guid: 2bcd2660ca9b64942af0de543d8d7100, type: 3}
|
||||
--- !u!114 &916321582
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -416,6 +542,104 @@ Transform:
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &953355540
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fc1515ab76e54f068e2f2207940fab32, type: 3}
|
||||
m_Name: UI/RightClick
|
||||
m_EditorClassIdentifier: Unity.InputSystem::UnityEngine.InputSystem.InputActionReference
|
||||
m_Asset: {fileID: -944628639613478452, guid: 2bcd2660ca9b64942af0de543d8d7100, type: 3}
|
||||
m_ActionId: 44b200b1-1557-4083-816c-b22cbdf77ddf
|
||||
--- !u!114 &1014446460
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fc1515ab76e54f068e2f2207940fab32, type: 3}
|
||||
m_Name: UI/TrackedDevicePosition
|
||||
m_EditorClassIdentifier: Unity.InputSystem::UnityEngine.InputSystem.InputActionReference
|
||||
m_Asset: {fileID: -944628639613478452, guid: 2bcd2660ca9b64942af0de543d8d7100, type: 3}
|
||||
m_ActionId: 24908448-c609-4bc3-a128-ea258674378a
|
||||
--- !u!114 &1037422209
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fc1515ab76e54f068e2f2207940fab32, type: 3}
|
||||
m_Name: UI/Submit
|
||||
m_EditorClassIdentifier: Unity.InputSystem::UnityEngine.InputSystem.InputActionReference
|
||||
m_Asset: {fileID: -944628639613478452, guid: 2bcd2660ca9b64942af0de543d8d7100, type: 3}
|
||||
m_ActionId: 7607c7b6-cd76-4816-beef-bd0341cfe950
|
||||
--- !u!114 &1409131790
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fc1515ab76e54f068e2f2207940fab32, type: 3}
|
||||
m_Name: UI/ScrollWheel
|
||||
m_EditorClassIdentifier: Unity.InputSystem::UnityEngine.InputSystem.InputActionReference
|
||||
m_Asset: {fileID: -944628639613478452, guid: 2bcd2660ca9b64942af0de543d8d7100, type: 3}
|
||||
m_ActionId: 0489e84a-4833-4c40-bfae-cea84b696689
|
||||
--- !u!114 &1932080467
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fc1515ab76e54f068e2f2207940fab32, type: 3}
|
||||
m_Name: UI/Point
|
||||
m_EditorClassIdentifier: Unity.InputSystem::UnityEngine.InputSystem.InputActionReference
|
||||
m_Asset: {fileID: -944628639613478452, guid: 2bcd2660ca9b64942af0de543d8d7100, type: 3}
|
||||
m_ActionId: 32b35790-4ed0-4e9a-aa41-69ac6d629449
|
||||
--- !u!114 &2034036131
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fc1515ab76e54f068e2f2207940fab32, type: 3}
|
||||
m_Name: UI/TrackedDeviceOrientation
|
||||
m_EditorClassIdentifier: Unity.InputSystem::UnityEngine.InputSystem.InputActionReference
|
||||
m_Asset: {fileID: -944628639613478452, guid: 2bcd2660ca9b64942af0de543d8d7100, type: 3}
|
||||
m_ActionId: 9caa3d8a-6b2f-4e8e-8bad-6ede561bd9be
|
||||
--- !u!114 &2130237725
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fc1515ab76e54f068e2f2207940fab32, type: 3}
|
||||
m_Name: UI/Navigate
|
||||
m_EditorClassIdentifier: Unity.InputSystem::UnityEngine.InputSystem.InputActionReference
|
||||
m_Asset: {fileID: -944628639613478452, guid: 2bcd2660ca9b64942af0de543d8d7100, type: 3}
|
||||
m_ActionId: c95b2375-e6d9-4b88-9c4c-c5e76515df4b
|
||||
--- !u!1660057539 &9223372036854775807
|
||||
SceneRoots:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -423,3 +647,4 @@ SceneRoots:
|
||||
- {fileID: 200001}
|
||||
- {fileID: 916321583}
|
||||
- {fileID: 653892272}
|
||||
- {fileID: 8222469}
|
||||
|
||||
8
Assets/Screenshots.meta
Normal file
8
Assets/Screenshots.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 20656d1321e888c418d9cdcc452dce18
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -14,13 +14,17 @@ MonoBehaviour:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.GameplayDifficultyStage
|
||||
stageName: "\u042D\u043A\u0441\u0442\u0440\u0435\u043C\u0430\u043B\u044C\u043D\u044B\u0439
|
||||
\u044D\u0442\u0430\u043F"
|
||||
startY: 800
|
||||
startY: 650
|
||||
verticalLength: 200
|
||||
horizontalDistribution: 0.65
|
||||
platforms:
|
||||
platforms:
|
||||
- prefab: {fileID: 964816656659499055, guid: b314e5b810bdbd841824f4b5d47bdd92, type: 3}
|
||||
weight: 1
|
||||
- prefab: {fileID: 964816656659499055, guid: 15b31b8e5d8677545b1ce2c8f700f901, type: 3}
|
||||
weight: 0.55
|
||||
- prefab: {fileID: 964816656659499055, guid: fa1b0ae89608c924e92657d291389138, type: 3}
|
||||
weight: 0.35
|
||||
verticalSpacingCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
@ -76,9 +80,11 @@ MonoBehaviour:
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
initialSpawnChance: 0.5
|
||||
maximumSpawnChance: 0.75
|
||||
maximumSpawnChance: 0.78
|
||||
enemies:
|
||||
prefabs: []
|
||||
prefabs:
|
||||
- prefab: {fileID: 6051671913546024041, guid: dc382d4fdc981aa439af1624e230f11f, type: 3}
|
||||
weight: 1
|
||||
spawnChanceCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
@ -103,10 +109,14 @@ MonoBehaviour:
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
initialSpawnChance: 0
|
||||
maximumSpawnChance: 0
|
||||
initialSpawnChance: 0.13
|
||||
maximumSpawnChance: 0.3
|
||||
collectibles:
|
||||
prefabs: []
|
||||
prefabs:
|
||||
- prefab: {fileID: 7341068655679281185, guid: 9987915360f9bf740bc0939e23db9349, type: 3}
|
||||
weight: 1
|
||||
- prefab: {fileID: 1649926752591026283, guid: 42ac5c9fb765781449b1a8cdc5bd3d64, type: 3}
|
||||
weight: 0.35
|
||||
spawnChanceCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
@ -131,5 +141,5 @@ MonoBehaviour:
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
initialSpawnChance: 0
|
||||
maximumSpawnChance: 0
|
||||
initialSpawnChance: 0.3
|
||||
maximumSpawnChance: 0.62
|
||||
|
||||
@ -13,13 +13,17 @@ MonoBehaviour:
|
||||
m_Name: HardStage
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.GameplayDifficultyStage
|
||||
stageName: "\u0421\u043B\u043E\u0436\u043D\u044B\u0439 \u044D\u0442\u0430\u043F"
|
||||
startY: 600
|
||||
startY: 450
|
||||
verticalLength: 200
|
||||
horizontalDistribution: 0.6
|
||||
platforms:
|
||||
platforms:
|
||||
- prefab: {fileID: 964816656659499055, guid: b314e5b810bdbd841824f4b5d47bdd92, type: 3}
|
||||
weight: 1
|
||||
- prefab: {fileID: 964816656659499055, guid: 15b31b8e5d8677545b1ce2c8f700f901, type: 3}
|
||||
weight: 0.55
|
||||
- prefab: {fileID: 964816656659499055, guid: fa1b0ae89608c924e92657d291389138, type: 3}
|
||||
weight: 0.35
|
||||
verticalSpacingCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
@ -75,9 +79,11 @@ MonoBehaviour:
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
initialSpawnChance: 0.5
|
||||
maximumSpawnChance: 0.5
|
||||
maximumSpawnChance: 0.68
|
||||
enemies:
|
||||
prefabs: []
|
||||
prefabs:
|
||||
- prefab: {fileID: 6051671913546024041, guid: dc382d4fdc981aa439af1624e230f11f, type: 3}
|
||||
weight: 1
|
||||
spawnChanceCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
@ -102,10 +108,14 @@ MonoBehaviour:
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
initialSpawnChance: 0
|
||||
maximumSpawnChance: 0
|
||||
initialSpawnChance: 0.09
|
||||
maximumSpawnChance: 0.22
|
||||
collectibles:
|
||||
prefabs: []
|
||||
prefabs:
|
||||
- prefab: {fileID: 7341068655679281185, guid: 9987915360f9bf740bc0939e23db9349, type: 3}
|
||||
weight: 1
|
||||
- prefab: {fileID: 1649926752591026283, guid: 42ac5c9fb765781449b1a8cdc5bd3d64, type: 3}
|
||||
weight: 0.35
|
||||
spawnChanceCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
@ -130,5 +140,5 @@ MonoBehaviour:
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
initialSpawnChance: 0
|
||||
maximumSpawnChance: 0
|
||||
initialSpawnChance: 0.25
|
||||
maximumSpawnChance: 0.55
|
||||
|
||||
@ -14,13 +14,15 @@ MonoBehaviour:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.GameplayDifficultyStage
|
||||
stageName: "\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u044B\u0439
|
||||
\u044D\u0442\u0430\u043F"
|
||||
startY: 800
|
||||
startY: 850
|
||||
verticalLength: 200
|
||||
horizontalDistribution: 0.8
|
||||
platforms:
|
||||
platforms:
|
||||
- prefab: {fileID: 964816656659499055, guid: b314e5b810bdbd841824f4b5d47bdd92, type: 3}
|
||||
weight: 1
|
||||
- prefab: {fileID: 964816656659499055, guid: 15b31b8e5d8677545b1ce2c8f700f901, type: 3}
|
||||
weight: 0.55
|
||||
verticalSpacingCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
@ -45,7 +47,7 @@ MonoBehaviour:
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
initialVerticalSpacing: 18
|
||||
initialVerticalSpacing: 16
|
||||
maximumVerticalSpacing: 18
|
||||
equipment:
|
||||
prefabs:
|
||||
@ -78,7 +80,9 @@ MonoBehaviour:
|
||||
initialSpawnChance: 1
|
||||
maximumSpawnChance: 1
|
||||
enemies:
|
||||
prefabs: []
|
||||
prefabs:
|
||||
- prefab: {fileID: 6051671913546024041, guid: dc382d4fdc981aa439af1624e230f11f, type: 3}
|
||||
weight: 1
|
||||
spawnChanceCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
@ -103,10 +107,14 @@ MonoBehaviour:
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
initialSpawnChance: 0
|
||||
maximumSpawnChance: 0
|
||||
initialSpawnChance: 0.18
|
||||
maximumSpawnChance: 0.38
|
||||
collectibles:
|
||||
prefabs: []
|
||||
prefabs:
|
||||
- prefab: {fileID: 7341068655679281185, guid: 9987915360f9bf740bc0939e23db9349, type: 3}
|
||||
weight: 1
|
||||
- prefab: {fileID: 1649926752591026283, guid: 42ac5c9fb765781449b1a8cdc5bd3d64, type: 3}
|
||||
weight: 0.35
|
||||
spawnChanceCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
@ -131,5 +139,5 @@ MonoBehaviour:
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
initialSpawnChance: 0
|
||||
maximumSpawnChance: 0
|
||||
initialSpawnChance: 0.35
|
||||
maximumSpawnChance: 0.68
|
||||
|
||||
@ -14,7 +14,7 @@ MonoBehaviour:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.GameplayDifficultyStage
|
||||
stageName: "\u041D\u0430\u0447\u0430\u043B\u044C\u043D\u044B\u0439 \u044D\u0442\u0430\u043F"
|
||||
startY: -3.25
|
||||
verticalLength: 203.25
|
||||
verticalLength: 53.25
|
||||
horizontalDistribution: 0
|
||||
platforms:
|
||||
platforms:
|
||||
@ -57,9 +57,9 @@ MonoBehaviour:
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0
|
||||
value: 1
|
||||
inSlope: 0
|
||||
outSlope: 1
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
@ -67,17 +67,17 @@ MonoBehaviour:
|
||||
- serializedVersion: 3
|
||||
time: 1
|
||||
value: 1
|
||||
inSlope: 1
|
||||
outSlope: 0
|
||||
inSlope: -0
|
||||
outSlope: -0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
inWeight: 0.2916667
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
initialSpawnChance: 0.2
|
||||
maximumSpawnChance: 0.75
|
||||
initialSpawnChance: 1
|
||||
maximumSpawnChance: 1
|
||||
enemies:
|
||||
prefabs: []
|
||||
spawnChanceCurve:
|
||||
|
||||
@ -13,13 +13,17 @@ MonoBehaviour:
|
||||
m_Name: NormalStage
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.GameplayDifficultyStage
|
||||
stageName: "\u041D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u044D\u0442\u0430\u043F"
|
||||
startY: 400
|
||||
startY: 250
|
||||
verticalLength: 200
|
||||
horizontalDistribution: 0.5
|
||||
platforms:
|
||||
platforms:
|
||||
- prefab: {fileID: 964816656659499055, guid: b314e5b810bdbd841824f4b5d47bdd92, type: 3}
|
||||
weight: 1
|
||||
- prefab: {fileID: 964816656659499055, guid: 15b31b8e5d8677545b1ce2c8f700f901, type: 3}
|
||||
weight: 0.55
|
||||
- prefab: {fileID: 964816656659499055, guid: fa1b0ae89608c924e92657d291389138, type: 3}
|
||||
weight: 0.35
|
||||
verticalSpacingCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
@ -77,7 +81,9 @@ MonoBehaviour:
|
||||
initialSpawnChance: 0.5
|
||||
maximumSpawnChance: 0.85
|
||||
enemies:
|
||||
prefabs: []
|
||||
prefabs:
|
||||
- prefab: {fileID: 6051671913546024041, guid: dc382d4fdc981aa439af1624e230f11f, type: 3}
|
||||
weight: 1
|
||||
spawnChanceCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
@ -102,10 +108,14 @@ MonoBehaviour:
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
initialSpawnChance: 0
|
||||
maximumSpawnChance: 0
|
||||
initialSpawnChance: 0.05
|
||||
maximumSpawnChance: 0.14
|
||||
collectibles:
|
||||
prefabs: []
|
||||
prefabs:
|
||||
- prefab: {fileID: 7341068655679281185, guid: 9987915360f9bf740bc0939e23db9349, type: 3}
|
||||
weight: 1
|
||||
- prefab: {fileID: 1649926752591026283, guid: 42ac5c9fb765781449b1a8cdc5bd3d64, type: 3}
|
||||
weight: 0.35
|
||||
spawnChanceCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
@ -130,5 +140,5 @@ MonoBehaviour:
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
initialSpawnChance: 0
|
||||
maximumSpawnChance: 0
|
||||
initialSpawnChance: 0.22
|
||||
maximumSpawnChance: 0.45
|
||||
|
||||
@ -13,13 +13,15 @@ MonoBehaviour:
|
||||
m_Name: SimpleStage
|
||||
m_EditorClassIdentifier: Assembly-CSharp::DanroJump.Gameplay.GameplayDifficultyStage
|
||||
stageName: "\u041F\u0440\u043E\u0441\u0442\u043E\u0439 \u044D\u0442\u0430\u043F"
|
||||
startY: 200
|
||||
startY: 50
|
||||
verticalLength: 200
|
||||
horizontalDistribution: 0
|
||||
platforms:
|
||||
platforms:
|
||||
- prefab: {fileID: 964816656659499055, guid: b314e5b810bdbd841824f4b5d47bdd92, type: 3}
|
||||
weight: 1
|
||||
- prefab: {fileID: 964816656659499055, guid: fa1b0ae89608c924e92657d291389138, type: 3}
|
||||
weight: 0.35
|
||||
verticalSpacingCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
@ -77,7 +79,9 @@ MonoBehaviour:
|
||||
initialSpawnChance: 0.3
|
||||
maximumSpawnChance: 0.75
|
||||
enemies:
|
||||
prefabs: []
|
||||
prefabs:
|
||||
- prefab: {fileID: 0}
|
||||
weight: 1
|
||||
spawnChanceCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
@ -102,10 +106,16 @@ MonoBehaviour:
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
initialSpawnChance: 0
|
||||
maximumSpawnChance: 0
|
||||
initialSpawnChance: 0.02
|
||||
maximumSpawnChance: 0.08
|
||||
collectibles:
|
||||
prefabs: []
|
||||
prefabs:
|
||||
- prefab: {fileID: 7341068655679281185, guid: 9987915360f9bf740bc0939e23db9349, type: 3}
|
||||
weight: 1
|
||||
- prefab: {fileID: 1649926752591026283, guid: 42ac5c9fb765781449b1a8cdc5bd3d64, type: 3}
|
||||
weight: 0.35
|
||||
- prefab: {fileID: 382672864354709237, guid: 23063041ef8ecb449b37527f2279534f, type: 3}
|
||||
weight: 0.35
|
||||
spawnChanceCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
@ -130,5 +140,5 @@ MonoBehaviour:
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
initialSpawnChance: 0
|
||||
maximumSpawnChance: 0
|
||||
initialSpawnChance: 0.18
|
||||
maximumSpawnChance: 0.35
|
||||
|
||||
@ -4,8 +4,14 @@ using UnityEngine;
|
||||
|
||||
namespace DanroJump.Editor.Gameplay
|
||||
{
|
||||
/// <summary>
|
||||
/// Editor-окно для быстрой проверки текущего этапа сложности и прогресса генерации.
|
||||
/// </summary>
|
||||
public sealed class GameplayProgressionOverlayWindow : EditorWindow
|
||||
{
|
||||
/// <summary>
|
||||
/// Открывает overlay-окно прогрессии из меню Unity.
|
||||
/// </summary>
|
||||
[MenuItem("Window/Danro Jump/Gameplay Progression Overlay")]
|
||||
public static void Open()
|
||||
{
|
||||
@ -14,16 +20,25 @@ namespace DanroJump.Editor.Gameplay
|
||||
window.Show();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Подписывается на editor update, чтобы overlay обновлялся без ручного Repaint.
|
||||
/// </summary>
|
||||
private void OnEnable()
|
||||
{
|
||||
EditorApplication.update += Repaint;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Снимает подписку на editor update при закрытии окна.
|
||||
/// </summary>
|
||||
private void OnDisable()
|
||||
{
|
||||
EditorApplication.update -= Repaint;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Рисует актуальные данные сцены без ручной привязки к конкретному объекту.
|
||||
/// </summary>
|
||||
private void OnGUI()
|
||||
{
|
||||
var progression = FindFirstObjectByType<GameplayDifficultyProgression>();
|
||||
@ -32,6 +47,9 @@ namespace DanroJump.Editor.Gameplay
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Добавляет компактный preview прогрессии прямо в инспектор GameplayDifficultyProgression.
|
||||
/// </summary>
|
||||
[CustomEditor(typeof(GameplayDifficultyProgression))]
|
||||
public sealed class GameplayDifficultyProgressionEditor : UnityEditor.Editor
|
||||
{
|
||||
@ -46,8 +64,14 @@ namespace DanroJump.Editor.Gameplay
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Общий IMGUI-рендерер для отдельного окна и встроенного блока в инспекторе.
|
||||
/// </summary>
|
||||
internal static class GameplayProgressionOverlayGui
|
||||
{
|
||||
/// <summary>
|
||||
/// Рисует состояние этапа игрока и этапа генерации платформ.
|
||||
/// </summary>
|
||||
public static void Draw(GameplayDifficultyProgression progression, PlatformSpawner spawner, bool showHeader)
|
||||
{
|
||||
if (showHeader)
|
||||
@ -83,6 +107,9 @@ namespace DanroJump.Editor.Gameplay
|
||||
$"Generation Y: {spawner.CurrentGenerationY:0.##} | Distribution: {spawner.CurrentPlatformDistribution:0.##}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Рисует одну карточку этапа с числовым прогрессом и progress bar.
|
||||
/// </summary>
|
||||
private static void DrawStageBlock(string title, string stageName, float progress, string subtitle)
|
||||
{
|
||||
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||||
@ -101,6 +128,9 @@ namespace DanroJump.Editor.Gameplay
|
||||
EditorGUILayout.EndVertical();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Возвращает подсказку о том, из какого режима редактора сейчас читаются данные.
|
||||
/// </summary>
|
||||
private static string GetPlayModeHint()
|
||||
{
|
||||
return EditorApplication.isPlaying ? "Play Mode: данные обновляются runtime-логикой" : "Edit Mode: данные рассчитаны по текущим ссылкам сцены";
|
||||
|
||||
@ -5,11 +5,70 @@ using UnityEngine.SceneManagement;
|
||||
|
||||
namespace DanroJump.Bootstrap
|
||||
{
|
||||
/// <summary>
|
||||
/// Первая точка входа приложения: фиксирует портретное соотношение сторон и загружает главное меню.
|
||||
/// </summary>
|
||||
[DefaultExecutionOrder(-10000)]
|
||||
public sealed class BootstrapEntryPoint : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private string mainMenuSceneName = "MainMenu";
|
||||
private const float AspectTolerance = 0.0025f;
|
||||
private static BootstrapEntryPoint instance;
|
||||
|
||||
[SerializeField] private string mainMenuSceneName = "MainMenu";
|
||||
[SerializeField] private bool forceBuildAspectRatio = true;
|
||||
[SerializeField] [Min(1)] private int targetAspectWidth = 9;
|
||||
[SerializeField] [Min(1)] private int targetAspectHeight = 16;
|
||||
[SerializeField] [Min(1)] private int preferredPortraitHeight = 1920;
|
||||
[SerializeField] private bool clampToDisplaySize = true;
|
||||
[SerializeField] private FullScreenMode buildFullScreenMode = FullScreenMode.Windowed;
|
||||
[SerializeField] [Min(1)] private int startupEnforcementFrames = 8;
|
||||
[SerializeField] [Min(0.1f)] private float aspectCheckInterval = 0.5f;
|
||||
|
||||
private float nextAspectCheckTime;
|
||||
|
||||
/// <summary>
|
||||
/// Создает singleton bootstrap-объект и применяет разрешение билда до загрузки меню.
|
||||
/// </summary>
|
||||
private void Awake()
|
||||
{
|
||||
if (instance != null && instance != this)
|
||||
{
|
||||
Destroy(gameObject);
|
||||
return;
|
||||
}
|
||||
|
||||
instance = this;
|
||||
DontDestroyOnLoad(gameObject);
|
||||
|
||||
// В редакторе не вмешиваемся в Game View, а в билде принудительно держим 9:16.
|
||||
if (!Application.isEditor && forceBuildAspectRatio)
|
||||
{
|
||||
ApplyBuildAspectResolution();
|
||||
StartCoroutine(EnforceBuildAspectOnStartup());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Периодически возвращает разрешение к целевому aspect ratio, если окно было изменено.
|
||||
/// </summary>
|
||||
private void Update()
|
||||
{
|
||||
if (Application.isEditor || !forceBuildAspectRatio || Time.unscaledTime < nextAspectCheckTime)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
nextAspectCheckTime = Time.unscaledTime + aspectCheckInterval;
|
||||
|
||||
if (!HasTargetAspectRatio(Screen.width, Screen.height))
|
||||
{
|
||||
ApplyBuildAspectResolution();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Загружает сцену главного меню после bootstrap-настройки.
|
||||
/// </summary>
|
||||
private IEnumerator Start()
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(mainMenuSceneName))
|
||||
@ -35,6 +94,95 @@ namespace DanroJump.Bootstrap
|
||||
yield return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Очищает singleton-ссылку при выходе из Play Mode или уничтожении bootstrap-объекта.
|
||||
/// </summary>
|
||||
private void OnDestroy()
|
||||
{
|
||||
if (instance == this)
|
||||
{
|
||||
instance = null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Несколько кадров подряд повторяет установку разрешения, пока Unity завершает старт окна.
|
||||
/// </summary>
|
||||
private IEnumerator EnforceBuildAspectOnStartup()
|
||||
{
|
||||
for (int i = 0; i < startupEnforcementFrames; i++)
|
||||
{
|
||||
if (!HasTargetAspectRatio(Screen.width, Screen.height))
|
||||
{
|
||||
ApplyBuildAspectResolution();
|
||||
}
|
||||
|
||||
yield return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Применяет рассчитанное разрешение к окну игры.
|
||||
/// </summary>
|
||||
private void ApplyBuildAspectResolution()
|
||||
{
|
||||
Vector2Int resolution = CalculateTargetResolution();
|
||||
Screen.SetResolution(resolution.x, resolution.y, buildFullScreenMode);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Рассчитывает целевое портретное разрешение с ограничением по размеру основного дисплея.
|
||||
/// </summary>
|
||||
private Vector2Int CalculateTargetResolution()
|
||||
{
|
||||
int height = Mathf.Max(1, preferredPortraitHeight);
|
||||
int width = Mathf.Max(1, Mathf.RoundToInt(height * GetTargetAspect()));
|
||||
|
||||
if (clampToDisplaySize && Display.main != null)
|
||||
{
|
||||
int displayWidth = Display.main.systemWidth;
|
||||
int displayHeight = Display.main.systemHeight;
|
||||
|
||||
if (displayHeight > 0 && height > displayHeight)
|
||||
{
|
||||
height = displayHeight;
|
||||
width = Mathf.Max(1, Mathf.RoundToInt(height * GetTargetAspect()));
|
||||
}
|
||||
|
||||
if (displayWidth > 0 && width > displayWidth)
|
||||
{
|
||||
width = displayWidth;
|
||||
height = Mathf.Max(1, Mathf.RoundToInt(width / GetTargetAspect()));
|
||||
}
|
||||
}
|
||||
|
||||
return new Vector2Int(width, height);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Проверяет, совпадает ли текущее разрешение с целевым соотношением сторон.
|
||||
/// </summary>
|
||||
private bool HasTargetAspectRatio(int width, int height)
|
||||
{
|
||||
if (width <= 0 || height <= 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return Mathf.Abs(width / (float)height - GetTargetAspect()) <= AspectTolerance;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Возвращает целевой aspect ratio из настроек ширины и высоты.
|
||||
/// </summary>
|
||||
private float GetTargetAspect()
|
||||
{
|
||||
return targetAspectWidth / (float)targetAspectHeight;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Проверяет, добавлена ли сцена в Build Settings.
|
||||
/// </summary>
|
||||
private static bool SceneExistsInBuildSettings(string sceneName)
|
||||
{
|
||||
for (int i = 0; i < SceneManager.sceneCountInBuildSettings; i++)
|
||||
|
||||
@ -0,0 +1,33 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace DanroJump.Gameplay
|
||||
{
|
||||
/// <summary>
|
||||
/// Collectible, который дает игроку усиленный вертикальный отскок и очки.
|
||||
/// </summary>
|
||||
public sealed class BounceBoostCollectible : CollectibleBase
|
||||
{
|
||||
[SerializeField] [Min(0f)] private float bounceVelocity = 24f;
|
||||
[SerializeField] [Min(0)] private int scoreValue = 5;
|
||||
|
||||
private GameplaySession session;
|
||||
|
||||
/// <summary>
|
||||
/// Получает игровую сессию для начисления очков.
|
||||
/// </summary>
|
||||
[Zenject.Inject]
|
||||
public void Construct(GameplaySession injectedSession)
|
||||
{
|
||||
session = injectedSession;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Применяет усиленный прыжок и награду за подбор.
|
||||
/// </summary>
|
||||
protected override void OnCollected(JumpPlayerController player)
|
||||
{
|
||||
player.BounceWithEnemyPassThrough(bounceVelocity);
|
||||
session?.AddScore(scoreValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 45176cc3d2b0adf4592469063916cafe
|
||||
@ -0,0 +1,33 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace DanroJump.Gameplay
|
||||
{
|
||||
/// <summary>
|
||||
/// Collectible монеты, который увеличивает счетчик монет и очки сессии.
|
||||
/// </summary>
|
||||
public sealed class CoinCollectible : CollectibleBase
|
||||
{
|
||||
[SerializeField] [Min(1)] private int coinValue = 1;
|
||||
[SerializeField] [Min(0)] private int scoreValue = 1;
|
||||
|
||||
private GameplaySession session;
|
||||
|
||||
/// <summary>
|
||||
/// Получает игровую сессию для записи награды.
|
||||
/// </summary>
|
||||
[Zenject.Inject]
|
||||
public void Construct(GameplaySession injectedSession)
|
||||
{
|
||||
session = injectedSession;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Начисляет монеты и очки после подбора.
|
||||
/// </summary>
|
||||
protected override void OnCollected(JumpPlayerController player)
|
||||
{
|
||||
session?.AddCoins(coinValue);
|
||||
session?.AddScore(scoreValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: deb903e81ee443948b7397fcac22b117
|
||||
@ -2,13 +2,22 @@ using UnityEngine;
|
||||
|
||||
namespace DanroJump.Gameplay
|
||||
{
|
||||
/// <summary>
|
||||
/// Базовый класс collectible-предметов с trigger-контактом и защитой от повторного подбора.
|
||||
/// </summary>
|
||||
[RequireComponent(typeof(Collider2D))]
|
||||
public abstract class CollectibleBase : MonoBehaviour, ICollectible, IPlayerContactHandler
|
||||
{
|
||||
[SerializeField] private bool disableOnCollected = true;
|
||||
|
||||
/// <summary>
|
||||
/// Показывает, был ли предмет уже подобран в текущем цикле жизни объекта.
|
||||
/// </summary>
|
||||
public bool IsCollected { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// В редакторе автоматически переводит коллайдер предмета в trigger.
|
||||
/// </summary>
|
||||
protected virtual void Reset()
|
||||
{
|
||||
if (TryGetComponent(out Collider2D collectibleCollider))
|
||||
@ -17,27 +26,39 @@ namespace DanroJump.Gameplay
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// При переиспользовании prefab сбрасывает состояние подбора.
|
||||
/// </summary>
|
||||
protected virtual void OnEnable()
|
||||
{
|
||||
IsCollected = false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Реагирует на вход игрока в trigger-зону предмета.
|
||||
/// </summary>
|
||||
private void OnTriggerEnter2D(Collider2D other)
|
||||
{
|
||||
if (other.TryGetComponent(out JumpPlayerController player))
|
||||
if (PlayerContactUtility.TryGetAlivePlayer(other, out var player))
|
||||
{
|
||||
HandlePlayerContact(player, this);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Обрабатывает контакт через общий интерфейс игровых объектов.
|
||||
/// </summary>
|
||||
public void HandlePlayerContact(JumpPlayerController player, Component source)
|
||||
{
|
||||
Collect(player);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Применяет эффект предмета и при необходимости выключает объект.
|
||||
/// </summary>
|
||||
public void Collect(JumpPlayerController player)
|
||||
{
|
||||
if (IsCollected || player == null)
|
||||
if (IsCollected || player == null || player.IsDead)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -51,6 +72,9 @@ namespace DanroJump.Gameplay
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Точка расширения для конкретного эффекта collectible.
|
||||
/// </summary>
|
||||
protected virtual void OnCollected(JumpPlayerController player)
|
||||
{
|
||||
}
|
||||
|
||||
@ -0,0 +1,34 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace DanroJump.Gameplay
|
||||
{
|
||||
/// <summary>
|
||||
/// Collectible, который временно поднимает игрока вверх с заданной скоростью.
|
||||
/// </summary>
|
||||
public sealed class HeightLiftCollectible : CollectibleBase
|
||||
{
|
||||
[SerializeField] [Min(0f)] private float liftSpeed = 18f;
|
||||
[SerializeField] [Min(0f)] private float liftHeight = 12f;
|
||||
[SerializeField] [Min(0)] private int scoreValue = 8;
|
||||
|
||||
private GameplaySession session;
|
||||
|
||||
/// <summary>
|
||||
/// Получает игровую сессию для начисления очков.
|
||||
/// </summary>
|
||||
[Zenject.Inject]
|
||||
public void Construct(GameplaySession injectedSession)
|
||||
{
|
||||
session = injectedSession;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Запускает плавный подъем игрока и начисляет награду.
|
||||
/// </summary>
|
||||
protected override void OnCollected(JumpPlayerController player)
|
||||
{
|
||||
player.ApplyHeightLift(liftSpeed, liftHeight);
|
||||
session?.AddScore(scoreValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d6608696d5f177540b0f06b9cbb46826
|
||||
@ -1,9 +1,18 @@
|
||||
namespace DanroJump.Gameplay
|
||||
{
|
||||
/// <summary>
|
||||
/// Общий контракт подбираемого предмета.
|
||||
/// </summary>
|
||||
public interface ICollectible
|
||||
{
|
||||
/// <summary>
|
||||
/// True, если предмет уже был подобран текущим игроком.
|
||||
/// </summary>
|
||||
bool IsCollected { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Применяет эффект предмета к игроку.
|
||||
/// </summary>
|
||||
void Collect(JumpPlayerController player);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,8 +2,14 @@ using UnityEngine;
|
||||
|
||||
namespace DanroJump.Gameplay
|
||||
{
|
||||
/// <summary>
|
||||
/// Контракт объектов, которые реагируют на контакт с игроком.
|
||||
/// </summary>
|
||||
public interface IPlayerContactHandler
|
||||
{
|
||||
/// <summary>
|
||||
/// Обрабатывает контакт игрока с источником события.
|
||||
/// </summary>
|
||||
void HandlePlayerContact(JumpPlayerController player, Component source);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,15 +2,35 @@ using UnityEngine;
|
||||
|
||||
namespace DanroJump.Gameplay
|
||||
{
|
||||
/// <summary>
|
||||
/// Collectible, который начисляет только очки.
|
||||
/// </summary>
|
||||
public sealed class ScoreCollectible : CollectibleBase
|
||||
{
|
||||
[SerializeField] private int scoreValue = 1;
|
||||
|
||||
private GameplaySession session;
|
||||
|
||||
/// <summary>
|
||||
/// Количество очков, начисляемое при подборе.
|
||||
/// </summary>
|
||||
public int Value => scoreValue;
|
||||
|
||||
/// <summary>
|
||||
/// Получает игровую сессию для начисления очков.
|
||||
/// </summary>
|
||||
[Zenject.Inject]
|
||||
public void Construct(GameplaySession injectedSession)
|
||||
{
|
||||
session = injectedSession;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Добавляет очки в текущую сессию после подбора.
|
||||
/// </summary>
|
||||
protected override void OnCollected(JumpPlayerController player)
|
||||
{
|
||||
Debug.Log($"{nameof(ScoreCollectible)} collected for {scoreValue} points.", this);
|
||||
session?.AddScore(scoreValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,52 +2,167 @@ using UnityEngine;
|
||||
|
||||
namespace DanroJump.Gameplay
|
||||
{
|
||||
/// <summary>
|
||||
/// Базовый класс противника с обработкой trigger- и collision-контакта с игроком.
|
||||
/// </summary>
|
||||
[RequireComponent(typeof(Collider2D))]
|
||||
public abstract class EnemyBase : MonoBehaviour, IEnemy, IPlayerContactHandler
|
||||
{
|
||||
[SerializeField] private EnemySpawnKind spawnKind = EnemySpawnKind.GroundedOnly;
|
||||
[SerializeField] [Min(0)] private int stompScore = 10;
|
||||
[SerializeField] private float stompTopTolerance = 0.2f;
|
||||
[SerializeField] [Range(0f, 1f)] private float stompMinimumHeightFactor = 0.55f;
|
||||
|
||||
private GameplaySession session;
|
||||
private Collider2D enemyCollider;
|
||||
|
||||
/// <summary>
|
||||
/// Тип мест, где этот prefab врага разрешено создавать.
|
||||
/// </summary>
|
||||
public EnemySpawnKind SpawnKind => spawnKind;
|
||||
|
||||
/// <summary>
|
||||
/// True, если врага можно создавать на точках платформ.
|
||||
/// </summary>
|
||||
public bool CanSpawnOnPlatform => spawnKind == EnemySpawnKind.GroundedOnly || spawnKind == EnemySpawnKind.Universal;
|
||||
|
||||
/// <summary>
|
||||
/// True, если врага можно создавать процедурно в поле, отдельно от платформ.
|
||||
/// </summary>
|
||||
public bool CanSpawnProcedurally => spawnKind == EnemySpawnKind.FlyingOnly || spawnKind == EnemySpawnKind.Universal;
|
||||
|
||||
/// <summary>
|
||||
/// True, если противник сейчас должен реагировать на игрока.
|
||||
/// </summary>
|
||||
public bool IsActive { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Получает игровую сессию для начисления очков за stomp.
|
||||
/// </summary>
|
||||
[Zenject.Inject]
|
||||
public void Construct(GameplaySession injectedSession)
|
||||
{
|
||||
session = injectedSession;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Активирует противника при включении объекта.
|
||||
/// </summary>
|
||||
protected virtual void OnEnable()
|
||||
{
|
||||
ActivateEnemy();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Деактивирует противника при выключении объекта.
|
||||
/// </summary>
|
||||
protected virtual void OnDisable()
|
||||
{
|
||||
DeactivateEnemy();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Передает trigger-контакт с игроком в конкретную реализацию.
|
||||
/// </summary>
|
||||
private void OnTriggerEnter2D(Collider2D other)
|
||||
{
|
||||
if (other.TryGetComponent(out JumpPlayerController player))
|
||||
if (PlayerContactUtility.TryGetAlivePlayer(other, out var player))
|
||||
{
|
||||
HandlePlayerContact(player, this);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Передает физическое столкновение с игроком в конкретную реализацию.
|
||||
/// </summary>
|
||||
private void OnCollisionEnter2D(Collision2D collision)
|
||||
{
|
||||
if (collision.collider.TryGetComponent(out JumpPlayerController player))
|
||||
if (PlayerContactUtility.TryGetAlivePlayer(collision.collider, out var player))
|
||||
{
|
||||
HandlePlayerContact(player, this);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Включает противника.
|
||||
/// </summary>
|
||||
public virtual void ActivateEnemy()
|
||||
{
|
||||
IsActive = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Выключает противника.
|
||||
/// </summary>
|
||||
public virtual void DeactivateEnemy()
|
||||
{
|
||||
IsActive = false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Сбрасывает противника к активному состоянию.
|
||||
/// </summary>
|
||||
public virtual void ResetEnemy()
|
||||
{
|
||||
ActivateEnemy();
|
||||
}
|
||||
|
||||
public abstract void HandlePlayerContact(JumpPlayerController player, Component source);
|
||||
/// <summary>
|
||||
/// Обрабатывает stomp сверху или убивает игрока при обычном контакте.
|
||||
/// </summary>
|
||||
public virtual void HandlePlayerContact(JumpPlayerController player, Component source)
|
||||
{
|
||||
if (!IsActive || player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.TryIgnoreEnemy(this))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (IsStomp(player))
|
||||
{
|
||||
HandleStomp(player);
|
||||
return;
|
||||
}
|
||||
|
||||
player.Kill();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Реакция врага на успешное уничтожение прыжком сверху.
|
||||
/// </summary>
|
||||
protected virtual void HandleStomp(JumpPlayerController player)
|
||||
{
|
||||
session?.AddScore(stompScore);
|
||||
player.Bounce(player.AutoJumpVelocity);
|
||||
DeactivateEnemy();
|
||||
gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Проверяет, что игрок падает и его GroundCheck находится выше верхней части противника.
|
||||
/// </summary>
|
||||
protected virtual bool IsStomp(JumpPlayerController player)
|
||||
{
|
||||
enemyCollider ??= GetComponent<Collider2D>();
|
||||
var bounds = enemyCollider != null
|
||||
? enemyCollider.bounds
|
||||
: new Bounds(transform.position, Vector3.one);
|
||||
var groundCheck = player.GroundCheckPosition;
|
||||
var isAboveEnemyHorizontally =
|
||||
groundCheck.x >= bounds.min.x - stompTopTolerance &&
|
||||
groundCheck.x <= bounds.max.x + stompTopTolerance;
|
||||
var stompLineY = Mathf.Lerp(bounds.min.y, bounds.max.y, stompMinimumHeightFactor);
|
||||
var isInUpperZone =
|
||||
groundCheck.y >= stompLineY - stompTopTolerance ||
|
||||
player.PreviousGroundCheckY >= bounds.max.y - stompTopTolerance;
|
||||
|
||||
return player.VerticalVelocity <= 0.05f &&
|
||||
isAboveEnemyHorizontally &&
|
||||
isInUpperZone;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
35
Assets/Scripts/Runtime/Gameplay/Enemies/EnemyPrefabRules.cs
Normal file
35
Assets/Scripts/Runtime/Gameplay/Enemies/EnemyPrefabRules.cs
Normal file
@ -0,0 +1,35 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace DanroJump.Gameplay
|
||||
{
|
||||
/// <summary>
|
||||
/// Проверяет, в каких контекстах разрешено создавать enemy-prefab.
|
||||
/// </summary>
|
||||
public static class EnemyPrefabRules
|
||||
{
|
||||
/// <summary>
|
||||
/// True, если prefab можно создать на платформенной точке.
|
||||
/// </summary>
|
||||
public static bool CanSpawnOnPlatform(GameObject prefab)
|
||||
{
|
||||
return TryGetEnemy(prefab, out var enemy) && enemy.CanSpawnOnPlatform;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// True, если prefab можно создать процедурно в свободном поле.
|
||||
/// </summary>
|
||||
public static bool CanSpawnProcedurally(GameObject prefab)
|
||||
{
|
||||
return TryGetEnemy(prefab, out var enemy) && enemy.CanSpawnProcedurally;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получает базовый enemy-компонент из prefab.
|
||||
/// </summary>
|
||||
public static bool TryGetEnemy(GameObject prefab, out EnemyBase enemy)
|
||||
{
|
||||
enemy = prefab != null ? prefab.GetComponentInChildren<EnemyBase>(true) : null;
|
||||
return enemy != null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d0181c1c29bf84f4dba77f0ca874181e
|
||||
23
Assets/Scripts/Runtime/Gameplay/Enemies/EnemySpawnKind.cs
Normal file
23
Assets/Scripts/Runtime/Gameplay/Enemies/EnemySpawnKind.cs
Normal file
@ -0,0 +1,23 @@
|
||||
namespace DanroJump.Gameplay
|
||||
{
|
||||
/// <summary>
|
||||
/// Описывает, в каких местах допустимо создавать врага.
|
||||
/// </summary>
|
||||
public enum EnemySpawnKind
|
||||
{
|
||||
/// <summary>
|
||||
/// Враг живет на платформе и не должен появляться в воздухе сам по себе.
|
||||
/// </summary>
|
||||
GroundedOnly = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Враг появляется только в свободном поле, отдельно от платформ.
|
||||
/// </summary>
|
||||
FlyingOnly = 1,
|
||||
|
||||
/// <summary>
|
||||
/// Враг подходит и для платформенного, и для процедурного полевого спавна.
|
||||
/// </summary>
|
||||
Universal = 2
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 99f6706e719352342843eda151910111
|
||||
@ -1,11 +1,23 @@
|
||||
namespace DanroJump.Gameplay
|
||||
{
|
||||
/// <summary>
|
||||
/// Контракт противника, которого можно активировать, деактивировать и сбрасывать при рецикле платформы.
|
||||
/// </summary>
|
||||
public interface IEnemy
|
||||
{
|
||||
/// <summary>
|
||||
/// Переводит противника в активное игровое состояние.
|
||||
/// </summary>
|
||||
void ActivateEnemy();
|
||||
|
||||
/// <summary>
|
||||
/// Выключает игровую логику противника.
|
||||
/// </summary>
|
||||
void DeactivateEnemy();
|
||||
|
||||
/// <summary>
|
||||
/// Возвращает противника к начальному состоянию.
|
||||
/// </summary>
|
||||
void ResetEnemy();
|
||||
}
|
||||
}
|
||||
|
||||
122
Assets/Scripts/Runtime/Gameplay/Enemies/PatrolEnemy.cs
Normal file
122
Assets/Scripts/Runtime/Gameplay/Enemies/PatrolEnemy.cs
Normal file
@ -0,0 +1,122 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace DanroJump.Gameplay
|
||||
{
|
||||
/// <summary>
|
||||
/// Противник, который патрулирует локальный отрезок и может быть побежден прыжком сверху.
|
||||
/// </summary>
|
||||
public sealed class PatrolEnemy : EnemyBase
|
||||
{
|
||||
[SerializeField] private Vector2 localPatrolAxis = Vector2.right;
|
||||
[SerializeField] [Min(0f)] private float patrolDistance = 1.2f;
|
||||
[SerializeField] [Min(0f)] private float patrolSpeed = 1.4f;
|
||||
[SerializeField] private bool flipWhenMovingBack = true;
|
||||
[SerializeField] private bool visualFacesPositiveDirection = true;
|
||||
[SerializeField] private Transform visualRoot;
|
||||
|
||||
private Transform cachedTransform;
|
||||
private Vector3 visualRootInitialScale = Vector3.one;
|
||||
private Vector3 basePosition;
|
||||
private Vector2 normalizedPatrolAxis = Vector2.right;
|
||||
private Vector3 patrolAxis = Vector3.right;
|
||||
private int direction = 1;
|
||||
|
||||
/// <summary>
|
||||
/// Запоминает локальную стартовую позицию патруля.
|
||||
/// </summary>
|
||||
private void Awake()
|
||||
{
|
||||
cachedTransform = transform;
|
||||
ResolveVisualRoot();
|
||||
RefreshPatrolAxis();
|
||||
basePosition = cachedTransform.localPosition;
|
||||
ApplyFacing();
|
||||
}
|
||||
|
||||
#if UNITY_EDITOR
|
||||
private void OnValidate()
|
||||
{
|
||||
RefreshPatrolAxis();
|
||||
}
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Двигает противника туда-обратно по локальной оси.
|
||||
/// </summary>
|
||||
private void Update()
|
||||
{
|
||||
if (!IsActive || patrolDistance <= 0f || patrolSpeed <= 0f)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var nextPosition = cachedTransform.localPosition + patrolAxis * (direction * patrolSpeed * Time.deltaTime);
|
||||
var offset = Vector2.Dot((Vector2)(nextPosition - basePosition), normalizedPatrolAxis);
|
||||
|
||||
if (Mathf.Abs(offset) >= patrolDistance)
|
||||
{
|
||||
direction *= -1;
|
||||
nextPosition = basePosition + patrolAxis * Mathf.Clamp(offset, -patrolDistance, patrolDistance);
|
||||
ApplyFacing();
|
||||
}
|
||||
|
||||
cachedTransform.localPosition = nextPosition;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Возвращает противника в начало патруля при рецикле платформы.
|
||||
/// </summary>
|
||||
public override void ResetEnemy()
|
||||
{
|
||||
base.ResetEnemy();
|
||||
(cachedTransform != null ? cachedTransform : transform).localPosition = basePosition;
|
||||
direction = 1;
|
||||
ApplyFacing();
|
||||
}
|
||||
|
||||
private void RefreshPatrolAxis()
|
||||
{
|
||||
normalizedPatrolAxis = localPatrolAxis.sqrMagnitude > 0f ? localPatrolAxis.normalized : Vector2.right;
|
||||
patrolAxis = normalizedPatrolAxis;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Находит визуальный корень, который можно отражать без изменения коллайдера.
|
||||
/// </summary>
|
||||
private void ResolveVisualRoot()
|
||||
{
|
||||
if (visualRoot == null)
|
||||
{
|
||||
var spriteRenderer = GetComponentInChildren<SpriteRenderer>(true);
|
||||
visualRoot = spriteRenderer != null ? spriteRenderer.transform : transform;
|
||||
}
|
||||
|
||||
visualRootInitialScale = visualRoot != null ? visualRoot.localScale : Vector3.one;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Разворачивает визуал при движении назад, если это включено в инспекторе.
|
||||
/// </summary>
|
||||
private void ApplyFacing()
|
||||
{
|
||||
if (visualRoot == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var scale = visualRootInitialScale;
|
||||
if (flipWhenMovingBack)
|
||||
{
|
||||
var facingSign = direction < 0 ? -1f : 1f;
|
||||
if (!visualFacesPositiveDirection)
|
||||
{
|
||||
facingSign *= -1f;
|
||||
}
|
||||
|
||||
scale.x = Mathf.Abs(scale.x) * facingSign;
|
||||
}
|
||||
|
||||
visualRoot.localScale = scale;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 605dc94842c31e540ae7a09b17007591
|
||||
@ -0,0 +1,207 @@
|
||||
using UnityEngine;
|
||||
using Zenject;
|
||||
|
||||
namespace DanroJump.Gameplay
|
||||
{
|
||||
/// <summary>
|
||||
/// Создает летающих и универсальных врагов в диапазонах высоты, которые подготовил PlatformSpawner.
|
||||
/// Перед созданием проверяет, что область врага не пересекает платформенные коллайдеры.
|
||||
/// </summary>
|
||||
public sealed class ProceduralEnemySpawner : MonoBehaviour
|
||||
{
|
||||
[Header("Spawn cadence")]
|
||||
[SerializeField] [Min(0f)] private float initialSpawnY = 8f;
|
||||
[SerializeField] [Min(0.1f)] private float verticalStep = 12f;
|
||||
[SerializeField] [Min(0)] private int maxAliveEnemies = 8;
|
||||
[SerializeField] [Min(1)] private int spawnAttempts = 12;
|
||||
|
||||
[Header("Spawn area")]
|
||||
[SerializeField] [Min(0f)] private float horizontalPadding = 0.85f;
|
||||
[SerializeField] [Min(0f)] private float verticalJitter = 1.5f;
|
||||
[SerializeField] private Vector2 fallbackEnemyHalfExtents = new(0.55f, 0.55f);
|
||||
[SerializeField] private Vector2 platformClearance = new(0.15f, 0.15f);
|
||||
[SerializeField] private LayerMask blockingMask = ~0;
|
||||
|
||||
private readonly Collider2D[] overlapBuffer = new Collider2D[16];
|
||||
private readonly System.Collections.Generic.List<GameObject> aliveEnemies = new();
|
||||
private DiContainer container;
|
||||
private Camera gameplayCamera;
|
||||
private IGameplayDifficultyProgression difficultyProgression;
|
||||
private System.Random random;
|
||||
private float nextSpawnY;
|
||||
private bool isInitialized;
|
||||
|
||||
/// <summary>
|
||||
/// Инициализирует спавнер из PlatformSpawner, чтобы seed и генерация были синхронизированы.
|
||||
/// </summary>
|
||||
public void Initialize(
|
||||
DiContainer injectedContainer,
|
||||
Camera injectedGameplayCamera,
|
||||
IGameplayDifficultyProgression injectedDifficultyProgression,
|
||||
int seed)
|
||||
{
|
||||
container = injectedContainer;
|
||||
gameplayCamera = injectedGameplayCamera;
|
||||
difficultyProgression = injectedDifficultyProgression;
|
||||
random = new System.Random(seed);
|
||||
nextSpawnY = initialSpawnY;
|
||||
isInitialized = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Создает врагов в новом вертикальном диапазоне, который только что сгенерировал PlatformSpawner.
|
||||
/// </summary>
|
||||
public void SpawnForGeneratedRange(float fromY, float toY)
|
||||
{
|
||||
CleanupDestroyedEnemies();
|
||||
if (!CanTrySpawn())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var minY = Mathf.Min(fromY, toY);
|
||||
var maxY = Mathf.Max(fromY, toY);
|
||||
while (nextSpawnY < minY)
|
||||
{
|
||||
nextSpawnY += verticalStep;
|
||||
}
|
||||
|
||||
while (nextSpawnY <= maxY && CanTrySpawn())
|
||||
{
|
||||
TrySpawnEnemyAtNextStep(minY, maxY);
|
||||
nextSpawnY += verticalStep;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Удаляет процедурных врагов ниже линии рецикла платформ.
|
||||
/// </summary>
|
||||
public void CleanupBelow(float worldY)
|
||||
{
|
||||
for (var index = aliveEnemies.Count - 1; index >= 0; index--)
|
||||
{
|
||||
var enemy = aliveEnemies[index];
|
||||
if (enemy == null)
|
||||
{
|
||||
aliveEnemies.RemoveAt(index);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (enemy.transform.position.y < worldY)
|
||||
{
|
||||
enemy.SetActive(false);
|
||||
Destroy(enemy);
|
||||
aliveEnemies.RemoveAt(index);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private bool CanTrySpawn()
|
||||
{
|
||||
return isInitialized &&
|
||||
gameplayCamera != null &&
|
||||
container != null &&
|
||||
difficultyProgression != null &&
|
||||
(maxAliveEnemies <= 0 || aliveEnemies.Count < maxAliveEnemies);
|
||||
}
|
||||
|
||||
private void TrySpawnEnemyAtNextStep(float minGeneratedY, float maxGeneratedY)
|
||||
{
|
||||
if (!difficultyProgression.TryGetProceduralEnemyPrefab(nextSpawnY, random, out var prefab))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var halfExtents = GetEnemyHalfExtents(prefab);
|
||||
for (var attempt = 0; attempt < spawnAttempts; attempt++)
|
||||
{
|
||||
var position = CreateSpawnPosition(minGeneratedY, maxGeneratedY, halfExtents);
|
||||
if (IntersectsBlockingCollider(position, halfExtents + platformClearance))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
Spawn(prefab, position);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private Vector3 CreateSpawnPosition(float minGeneratedY, float maxGeneratedY, Vector2 halfExtents)
|
||||
{
|
||||
var cameraHalfWidth = gameplayCamera.orthographicSize * gameplayCamera.aspect;
|
||||
var minX = gameplayCamera.transform.position.x - cameraHalfWidth + horizontalPadding + halfExtents.x;
|
||||
var maxX = gameplayCamera.transform.position.x + cameraHalfWidth - horizontalPadding - halfExtents.x;
|
||||
var minY = minGeneratedY + halfExtents.y;
|
||||
var maxY = Mathf.Max(minY, maxGeneratedY - halfExtents.y);
|
||||
var jitteredY = nextSpawnY + RandomRange(-verticalJitter, verticalJitter);
|
||||
|
||||
return new Vector3(
|
||||
RandomRange(minX, maxX),
|
||||
Mathf.Clamp(jitteredY, minY, maxY),
|
||||
0f);
|
||||
}
|
||||
|
||||
private void Spawn(GameObject prefab, Vector3 position)
|
||||
{
|
||||
var instance = container.InstantiatePrefab(prefab, position, Quaternion.identity, transform);
|
||||
instance.SetActive(true);
|
||||
aliveEnemies.Add(instance);
|
||||
}
|
||||
|
||||
private bool IntersectsBlockingCollider(Vector3 position, Vector2 halfExtents)
|
||||
{
|
||||
var contactFilter = new ContactFilter2D
|
||||
{
|
||||
useLayerMask = true,
|
||||
layerMask = blockingMask,
|
||||
useTriggers = false
|
||||
};
|
||||
|
||||
var count = Physics2D.OverlapBox(position, halfExtents * 2f, 0f, contactFilter, overlapBuffer);
|
||||
for (var index = 0; index < count; index++)
|
||||
{
|
||||
var hit = overlapBuffer[index];
|
||||
if (hit != null && !hit.GetComponentInParent<EnemyBase>())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private Vector2 GetEnemyHalfExtents(GameObject prefab)
|
||||
{
|
||||
var collider = prefab != null ? prefab.GetComponentInChildren<Collider2D>(true) : null;
|
||||
if (collider == null)
|
||||
{
|
||||
return fallbackEnemyHalfExtents;
|
||||
}
|
||||
|
||||
return new Vector2(
|
||||
Mathf.Max(fallbackEnemyHalfExtents.x, collider.bounds.extents.x),
|
||||
Mathf.Max(fallbackEnemyHalfExtents.y, collider.bounds.extents.y));
|
||||
}
|
||||
|
||||
private void CleanupDestroyedEnemies()
|
||||
{
|
||||
for (var index = aliveEnemies.Count - 1; index >= 0; index--)
|
||||
{
|
||||
if (aliveEnemies[index] == null || !aliveEnemies[index].activeInHierarchy)
|
||||
{
|
||||
aliveEnemies.RemoveAt(index);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private float RandomRange(float min, float max)
|
||||
{
|
||||
if (max <= min)
|
||||
{
|
||||
return min;
|
||||
}
|
||||
|
||||
return Mathf.Lerp(min, max, (float)(random?.NextDouble() ?? 0d));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 47ed0f3875f8ad348bdfdce600932c12
|
||||
36
Assets/Scripts/Runtime/Gameplay/Equipment/HazardEquipment.cs
Normal file
36
Assets/Scripts/Runtime/Gameplay/Equipment/HazardEquipment.cs
Normal file
@ -0,0 +1,36 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace DanroJump.Gameplay
|
||||
{
|
||||
/// <summary>
|
||||
/// Опасное оборудование платформы, которое убивает игрока при контакте.
|
||||
/// </summary>
|
||||
public sealed class HazardEquipment : PlatformEquipmentBase
|
||||
{
|
||||
[SerializeField] [Min(0f)] private float activationCooldown = 0.2f;
|
||||
|
||||
private float lastActivationTime = -999f;
|
||||
|
||||
/// <summary>
|
||||
/// Сбрасывает cooldown при переиспользовании оборудования.
|
||||
/// </summary>
|
||||
public override void ResetEquipment()
|
||||
{
|
||||
lastActivationTime = -999f;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Убивает игрока, если контакт не находится внутри cooldown.
|
||||
/// </summary>
|
||||
public override void HandlePlayerContact(JumpPlayerController player, Component source)
|
||||
{
|
||||
if (player == null || Time.time - lastActivationTime < activationCooldown)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
lastActivationTime = Time.time;
|
||||
player.Kill();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cf34504aafe850849b76ddd3857f681b
|
||||
@ -0,0 +1,13 @@
|
||||
namespace DanroJump.Gameplay
|
||||
{
|
||||
/// <summary>
|
||||
/// Контракт оборудования, которое должно срабатывать от посадки игрока сверху.
|
||||
/// </summary>
|
||||
public interface ILandingEquipment
|
||||
{
|
||||
/// <summary>
|
||||
/// Пробует активировать оборудование из общего landing flow игрока.
|
||||
/// </summary>
|
||||
bool TryActivateFromLanding(JumpPlayerController player);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ed809fd23ca2e954694b7d5bbf0b20ff
|
||||
@ -1,9 +1,18 @@
|
||||
namespace DanroJump.Gameplay
|
||||
{
|
||||
/// <summary>
|
||||
/// Контракт оборудования, которое устанавливается на платформу.
|
||||
/// </summary>
|
||||
public interface IPlatformEquipment
|
||||
{
|
||||
/// <summary>
|
||||
/// Привязывает оборудование к runtime-платформе.
|
||||
/// </summary>
|
||||
void Install(IPlatformRuntime platform);
|
||||
|
||||
/// <summary>
|
||||
/// Сбрасывает состояние оборудования при спавне или переиспользовании.
|
||||
/// </summary>
|
||||
void ResetEquipment();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,11 +1,16 @@
|
||||
using System.Collections;
|
||||
using System;
|
||||
using System.Threading;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
|
||||
namespace DanroJump.Gameplay
|
||||
{
|
||||
/// <summary>
|
||||
/// Пружинная площадка, которая усиливает прыжок игрока и проигрывает squash/stretch-анимацию.
|
||||
/// </summary>
|
||||
[DisallowMultipleComponent]
|
||||
[RequireComponent(typeof(Collider2D))]
|
||||
public sealed class JumpPad : PlatformEquipmentBase
|
||||
public sealed class JumpPad : PlatformEquipmentBase, ILandingEquipment
|
||||
{
|
||||
[SerializeField] [Min(1f)] private float jumpHeightMultiplier = 3f;
|
||||
[SerializeField] private float landingVelocityThreshold = 0.05f;
|
||||
@ -18,13 +23,19 @@ namespace DanroJump.Gameplay
|
||||
[SerializeField] [Min(0f)] private float recoverDuration = 0.14f;
|
||||
|
||||
private Collider2D jumpPadCollider;
|
||||
private Coroutine stretchRoutine;
|
||||
private CancellationTokenSource stretchCancellation;
|
||||
private Vector3 visualBaseScale = Vector3.one;
|
||||
private float lastActivationTime = -1f;
|
||||
private bool hasVisualBaseScale;
|
||||
|
||||
/// <summary>
|
||||
/// Во сколько раз пружина усиливает стандартный прыжок игрока.
|
||||
/// </summary>
|
||||
public float JumpHeightMultiplier => jumpHeightMultiplier;
|
||||
|
||||
/// <summary>
|
||||
/// Подготавливает trigger-коллайдер и визуальную часть пружины.
|
||||
/// </summary>
|
||||
private void Awake()
|
||||
{
|
||||
EnsureTriggerCollider();
|
||||
@ -32,16 +43,25 @@ namespace DanroJump.Gameplay
|
||||
CacheVisualBaseScale();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Проверяет контакт при первом входе игрока в trigger.
|
||||
/// </summary>
|
||||
private void OnTriggerEnter2D(Collider2D other)
|
||||
{
|
||||
TryHandlePlayerContact(other);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Повторно проверяет контакт, если игрок уже находится внутри trigger.
|
||||
/// </summary>
|
||||
private void OnTriggerStay2D(Collider2D other)
|
||||
{
|
||||
TryHandlePlayerContact(other);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Преобразует Collider2D в игрока и передает контакт в общий handler.
|
||||
/// </summary>
|
||||
private void TryHandlePlayerContact(Collider2D other)
|
||||
{
|
||||
if (other.TryGetComponent(out JumpPlayerController player))
|
||||
@ -50,6 +70,9 @@ namespace DanroJump.Gameplay
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Сбрасывает cooldown, коллайдер и визуальный scale при переиспользовании.
|
||||
/// </summary>
|
||||
public override void ResetEquipment()
|
||||
{
|
||||
lastActivationTime = -1f;
|
||||
@ -59,11 +82,18 @@ namespace DanroJump.Gameplay
|
||||
ResetVisualScale();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Пробует активировать пружину от контакта игрока.
|
||||
/// </summary>
|
||||
public override void HandlePlayerContact(JumpPlayerController player, Component source)
|
||||
{
|
||||
TryActivate(player);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Активирует усиленный прыжок, если игрок действительно приземляется сверху.
|
||||
/// </summary>
|
||||
/// <returns>True, если пружина сработала.</returns>
|
||||
public bool TryActivate(JumpPlayerController player)
|
||||
{
|
||||
if (!CanActivate(player))
|
||||
@ -71,12 +101,20 @@ namespace DanroJump.Gameplay
|
||||
return false;
|
||||
}
|
||||
|
||||
player.Bounce(CalculateBoostVelocity(player));
|
||||
player.BounceWithEnemyPassThrough(CalculateBoostVelocity(player));
|
||||
lastActivationTime = Time.time;
|
||||
PlayStretchAnimation();
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool TryActivateFromLanding(JumpPlayerController player)
|
||||
{
|
||||
return TryActivate(player);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Проверяет направление движения, cooldown и высоту GroundCheck относительно верха пружины.
|
||||
/// </summary>
|
||||
private bool CanActivate(JumpPlayerController player)
|
||||
{
|
||||
if (player == null || Time.time - lastActivationTime < activationCooldown)
|
||||
@ -84,7 +122,9 @@ namespace DanroJump.Gameplay
|
||||
return false;
|
||||
}
|
||||
|
||||
if (player.VerticalVelocity > landingVelocityThreshold)
|
||||
var isLanding = player.VerticalVelocity <= landingVelocityThreshold ||
|
||||
player.PreviousVerticalVelocity <= landingVelocityThreshold;
|
||||
if (!isLanding)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@ -94,14 +134,26 @@ namespace DanroJump.Gameplay
|
||||
EnsureTriggerCollider();
|
||||
}
|
||||
|
||||
return jumpPadCollider != null && player.GroundCheckY >= jumpPadCollider.bounds.min.y - landingTopTolerance;
|
||||
if (jumpPadCollider == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var landingLineY = jumpPadCollider.bounds.max.y - landingTopTolerance;
|
||||
return player.GroundCheckY >= landingLineY || player.PreviousGroundCheckY >= landingLineY;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Переводит множитель высоты в скорость прыжка через квадратный корень.
|
||||
/// </summary>
|
||||
private float CalculateBoostVelocity(JumpPlayerController player)
|
||||
{
|
||||
return player.AutoJumpVelocity * Mathf.Sqrt(jumpHeightMultiplier);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Гарантирует, что коллайдер пружины работает как trigger.
|
||||
/// </summary>
|
||||
private void EnsureTriggerCollider()
|
||||
{
|
||||
jumpPadCollider = GetComponent<Collider2D>();
|
||||
@ -111,6 +163,9 @@ namespace DanroJump.Gameplay
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Находит визуальный корень пружины для stretch-анимации.
|
||||
/// </summary>
|
||||
private void ResolveVisualRoot()
|
||||
{
|
||||
if (visualRoot != null)
|
||||
@ -125,6 +180,9 @@ namespace DanroJump.Gameplay
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Запоминает исходный scale визуала, чтобы корректно восстановить его после анимации.
|
||||
/// </summary>
|
||||
private void CacheVisualBaseScale()
|
||||
{
|
||||
if (visualRoot == null || hasVisualBaseScale)
|
||||
@ -136,6 +194,9 @@ namespace DanroJump.Gameplay
|
||||
hasVisualBaseScale = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Запускает короткую анимацию растяжения пружины.
|
||||
/// </summary>
|
||||
private void PlayStretchAnimation()
|
||||
{
|
||||
ResolveVisualRoot();
|
||||
@ -146,21 +207,17 @@ namespace DanroJump.Gameplay
|
||||
return;
|
||||
}
|
||||
|
||||
if (stretchRoutine != null)
|
||||
{
|
||||
StopCoroutine(stretchRoutine);
|
||||
}
|
||||
|
||||
stretchRoutine = StartCoroutine(StretchVisualRoutine());
|
||||
CancelStretchAnimation();
|
||||
stretchCancellation = new CancellationTokenSource();
|
||||
StretchVisualAsync(stretchCancellation).Forget();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Останавливает активную stretch-анимацию и возвращает базовый scale.
|
||||
/// </summary>
|
||||
private void ResetVisualScale()
|
||||
{
|
||||
if (stretchRoutine != null)
|
||||
{
|
||||
StopCoroutine(stretchRoutine);
|
||||
stretchRoutine = null;
|
||||
}
|
||||
CancelStretchAnimation();
|
||||
|
||||
if (visualRoot != null && hasVisualBaseScale)
|
||||
{
|
||||
@ -168,39 +225,102 @@ namespace DanroJump.Gameplay
|
||||
}
|
||||
}
|
||||
|
||||
private IEnumerator StretchVisualRoutine()
|
||||
private void OnDestroy()
|
||||
{
|
||||
CancelStretchAnimation();
|
||||
}
|
||||
|
||||
private void CancelStretchAnimation()
|
||||
{
|
||||
if (stretchCancellation == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
stretchCancellation.Cancel();
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
|
||||
stretchCancellation.Dispose();
|
||||
stretchCancellation = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Последовательно растягивает визуал и возвращает его к исходному размеру.
|
||||
/// </summary>
|
||||
private async UniTaskVoid StretchVisualAsync(CancellationTokenSource cancellationSource)
|
||||
{
|
||||
var stretchedScale = new Vector3(
|
||||
visualBaseScale.x * stretchScale.x,
|
||||
visualBaseScale.y * stretchScale.y,
|
||||
visualBaseScale.z);
|
||||
|
||||
yield return AnimateVisualScale(visualBaseScale, stretchedScale, stretchOutDuration);
|
||||
yield return AnimateVisualScale(stretchedScale, visualBaseScale, recoverDuration);
|
||||
var token = cancellationSource.Token;
|
||||
try
|
||||
{
|
||||
await AnimateVisualScaleAsync(visualBaseScale, stretchedScale, stretchOutDuration, token);
|
||||
await AnimateVisualScaleAsync(stretchedScale, visualBaseScale, recoverDuration, token);
|
||||
|
||||
visualRoot.localScale = visualBaseScale;
|
||||
stretchRoutine = null;
|
||||
if (!token.IsCancellationRequested && visualRoot != null)
|
||||
{
|
||||
visualRoot.localScale = visualBaseScale;
|
||||
}
|
||||
}
|
||||
catch (OperationCanceledException) when (token.IsCancellationRequested)
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (stretchCancellation == cancellationSource)
|
||||
{
|
||||
stretchCancellation = null;
|
||||
cancellationSource.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private IEnumerator AnimateVisualScale(Vector3 from, Vector3 to, float duration)
|
||||
/// <summary>
|
||||
/// Интерполирует scale визуального корня за указанное время.
|
||||
/// </summary>
|
||||
private async UniTask AnimateVisualScaleAsync(Vector3 from, Vector3 to, float duration, CancellationToken cancellationToken)
|
||||
{
|
||||
if (duration <= 0f)
|
||||
{
|
||||
visualRoot.localScale = to;
|
||||
yield break;
|
||||
if (visualRoot != null)
|
||||
{
|
||||
visualRoot.localScale = to;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
var elapsed = 0f;
|
||||
while (elapsed < duration)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
|
||||
if (visualRoot == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
elapsed += Time.deltaTime;
|
||||
var t = Mathf.Clamp01(elapsed / duration);
|
||||
var easedT = 1f - (1f - t) * (1f - t);
|
||||
visualRoot.localScale = Vector3.LerpUnclamped(from, to, easedT);
|
||||
yield return null;
|
||||
await UniTask.Yield(PlayerLoopTiming.Update, cancellationToken);
|
||||
}
|
||||
|
||||
visualRoot.localScale = to;
|
||||
if (visualRoot != null)
|
||||
{
|
||||
visualRoot.localScale = to;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,39 +2,63 @@ using UnityEngine;
|
||||
|
||||
namespace DanroJump.Gameplay
|
||||
{
|
||||
/// <summary>
|
||||
/// Базовый класс оборудования платформы с trigger-контактом игрока.
|
||||
/// </summary>
|
||||
[RequireComponent(typeof(Collider2D))]
|
||||
public abstract class PlatformEquipmentBase : MonoBehaviour, IPlatformEquipment, IPlayerContactHandler
|
||||
{
|
||||
/// <summary>
|
||||
/// Платформа, на которую установлено оборудование.
|
||||
/// </summary>
|
||||
protected IPlatformRuntime Platform { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// В редакторе переводит коллайдер оборудования в trigger.
|
||||
/// </summary>
|
||||
protected virtual void Reset()
|
||||
{
|
||||
var equipmentCollider = GetComponent<Collider2D>();
|
||||
equipmentCollider.isTrigger = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Сбрасывает состояние при включении, чтобы объект можно было переиспользовать.
|
||||
/// </summary>
|
||||
private void OnEnable()
|
||||
{
|
||||
ResetEquipment();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Передает контакт с игроком в конкретную реализацию оборудования.
|
||||
/// </summary>
|
||||
private void OnTriggerEnter2D(Collider2D other)
|
||||
{
|
||||
if (other.TryGetComponent(out JumpPlayerController player))
|
||||
if (PlayerContactUtility.TryGetAlivePlayer(other, out var player))
|
||||
{
|
||||
HandlePlayerContact(player, this);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Привязывает оборудование к платформе.
|
||||
/// </summary>
|
||||
public virtual void Install(IPlatformRuntime platform)
|
||||
{
|
||||
Platform = platform;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Точка расширения для сброса внутреннего состояния оборудования.
|
||||
/// </summary>
|
||||
public virtual void ResetEquipment()
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Обрабатывает контакт игрока с оборудованием.
|
||||
/// </summary>
|
||||
public abstract void HandlePlayerContact(JumpPlayerController player, Component source);
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,46 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace DanroJump.Gameplay
|
||||
{
|
||||
/// <summary>
|
||||
/// Оборудование платформы, которое временно ускоряет горизонтальное движение игрока.
|
||||
/// </summary>
|
||||
public sealed class SpeedBoostEquipment : PlatformEquipmentBase
|
||||
{
|
||||
[SerializeField] [Min(0.01f)] private float moveSpeedMultiplier = 1.45f;
|
||||
[SerializeField] [Min(0.01f)] private float duration = 3f;
|
||||
[SerializeField] [Min(0f)] private float bounceVelocity;
|
||||
[SerializeField] [Min(0f)] private float activationCooldown = 0.25f;
|
||||
|
||||
private float lastActivationTime = -999f;
|
||||
|
||||
/// <summary>
|
||||
/// Сбрасывает cooldown при переиспользовании оборудования.
|
||||
/// </summary>
|
||||
public override void ResetEquipment()
|
||||
{
|
||||
lastActivationTime = -999f;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Применяет ускорение и опциональный отскок при контакте с игроком.
|
||||
/// </summary>
|
||||
public override void HandlePlayerContact(JumpPlayerController player, Component source)
|
||||
{
|
||||
if (player == null || Time.time - lastActivationTime < activationCooldown)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
player.ApplyMoveSpeedMultiplier(moveSpeedMultiplier, duration);
|
||||
|
||||
// Bounce опционален: при нуле оборудование влияет только на скорость.
|
||||
if (bounceVelocity > 0f)
|
||||
{
|
||||
player.Bounce(bounceVelocity);
|
||||
}
|
||||
|
||||
lastActivationTime = Time.time;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 747a5c8ca2dafe94babc0829532cf3b4
|
||||
@ -2,20 +2,107 @@ using UnityEngine;
|
||||
|
||||
namespace DanroJump.Gameplay
|
||||
{
|
||||
public sealed class SpringEquipment : PlatformEquipmentBase
|
||||
/// <summary>
|
||||
/// Простая пружина платформы, которая задает игроку фиксированный вертикальный отскок.
|
||||
/// </summary>
|
||||
public sealed class SpringEquipment : PlatformEquipmentBase, ILandingEquipment
|
||||
{
|
||||
[SerializeField] private float bounceVelocity = 22f;
|
||||
[SerializeField] private float landingVelocityThreshold = 0.05f;
|
||||
[SerializeField] private float landingTopTolerance = 0.2f;
|
||||
[SerializeField] private float activationCooldown = 0.08f;
|
||||
|
||||
private Collider2D springCollider;
|
||||
private float lastActivationTime = -1f;
|
||||
|
||||
/// <summary>
|
||||
/// Вертикальная скорость, которую пружина задает игроку.
|
||||
/// </summary>
|
||||
public float BounceVelocity => bounceVelocity;
|
||||
|
||||
/// <summary>
|
||||
/// Сбрасывает cooldown и кэширует trigger-коллайдер.
|
||||
/// </summary>
|
||||
public override void ResetEquipment()
|
||||
{
|
||||
lastActivationTime = -1f;
|
||||
EnsureTriggerCollider();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Отталкивает игрока вверх только при падении сверху.
|
||||
/// </summary>
|
||||
public override void HandlePlayerContact(JumpPlayerController player, Component source)
|
||||
{
|
||||
TryActivate(player);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Пробует активировать пружину от контакта игрока.
|
||||
/// </summary>
|
||||
public bool TryActivate(JumpPlayerController player)
|
||||
{
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
player.Bounce(bounceVelocity);
|
||||
if (!CanActivate(player))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
player.BounceWithEnemyPassThrough(bounceVelocity);
|
||||
lastActivationTime = Time.time;
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool TryActivateFromLanding(JumpPlayerController player)
|
||||
{
|
||||
return TryActivate(player);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Проверяет направление движения, cooldown и высоту GroundCheck относительно верха пружины.
|
||||
/// </summary>
|
||||
private bool CanActivate(JumpPlayerController player)
|
||||
{
|
||||
if (Time.time - lastActivationTime < activationCooldown)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var isLanding = player.VerticalVelocity <= landingVelocityThreshold ||
|
||||
player.PreviousVerticalVelocity <= landingVelocityThreshold;
|
||||
if (!isLanding)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (springCollider == null)
|
||||
{
|
||||
EnsureTriggerCollider();
|
||||
}
|
||||
|
||||
if (springCollider == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var landingLineY = springCollider.bounds.max.y - landingTopTolerance;
|
||||
return player.GroundCheckY >= landingLineY || player.PreviousGroundCheckY >= landingLineY;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Гарантирует, что коллайдер пружины работает как trigger.
|
||||
/// </summary>
|
||||
private void EnsureTriggerCollider()
|
||||
{
|
||||
springCollider = GetComponent<Collider2D>();
|
||||
if (springCollider != null)
|
||||
{
|
||||
springCollider.isTrigger = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,29 +4,56 @@ using Zenject;
|
||||
|
||||
namespace DanroJump.Gameplay
|
||||
{
|
||||
/// <summary>
|
||||
/// Выбирает активный этап сложности по максимальной высоте игрока или Y-координате генерации.
|
||||
/// </summary>
|
||||
public sealed class GameplayDifficultyProgression : MonoBehaviour, IGameplayDifficultyProgression
|
||||
{
|
||||
[SerializeField] private JumpPlayerController player;
|
||||
[SerializeField] private bool progressionEnabled = true;
|
||||
[SerializeField] private List<GameplayDifficultyStage> stages = new();
|
||||
|
||||
public bool HasStages => stages != null && stages.Exists(stage => stage != null);
|
||||
/// <summary>
|
||||
/// Показывает, есть ли хотя бы один настроенный этап сложности.
|
||||
/// </summary>
|
||||
public bool HasStages => progressionEnabled && stages != null && stages.Exists(stage => stage != null);
|
||||
|
||||
/// <summary>
|
||||
/// Начальная Y-координата генерации по первому этапу.
|
||||
/// </summary>
|
||||
public float InitialSpawnY => GetInitialSpawnY();
|
||||
|
||||
/// <summary>
|
||||
/// Прогресс игрока внутри текущего этапа по максимальной высоте забега.
|
||||
/// </summary>
|
||||
public float CurrentProgress => CalculateProgress(player != null ? player.HighestY : 0f);
|
||||
|
||||
/// <summary>
|
||||
/// Имя текущего этапа игрока для HUD и editor overlay.
|
||||
/// </summary>
|
||||
public string CurrentStageName => GetStage(player != null ? player.HighestY : 0f)?.StageName ?? string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Получает игрока из SceneContext, чтобы UI и диагностические окна видели текущий этап забега.
|
||||
/// </summary>
|
||||
[Inject]
|
||||
public void Construct(JumpPlayerController injectedPlayer)
|
||||
{
|
||||
player = injectedPlayer;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Выбирает prefab платформы для указанной высоты по настройкам активного этапа.
|
||||
/// </summary>
|
||||
public GameObject GetPlatformPrefab(float worldY, System.Random random)
|
||||
{
|
||||
var stage = GetStage(worldY);
|
||||
return stage != null ? stage.GetPlatformPrefab(random) : null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Возвращает расстояние между платформами для указанной высоты.
|
||||
/// </summary>
|
||||
public float GetVerticalSpacing(float worldY)
|
||||
{
|
||||
var stage = GetStage(worldY);
|
||||
@ -38,12 +65,18 @@ namespace DanroJump.Gameplay
|
||||
return stage.GetVerticalSpacing(worldY);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Возвращает распределение платформ по ширине уровня для указанной высоты.
|
||||
/// </summary>
|
||||
public float GetHorizontalDistribution(float worldY)
|
||||
{
|
||||
var stage = GetStage(worldY);
|
||||
return stage != null ? stage.GetHorizontalDistribution() : 0f;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Создает профиль контента активного этапа: collectibles, equipment и enemies.
|
||||
/// </summary>
|
||||
public IPlatformContentSource CreateContentSource(float worldY)
|
||||
{
|
||||
var stage = GetStage(worldY);
|
||||
@ -55,11 +88,32 @@ namespace DanroJump.Gameplay
|
||||
return stage.CreateContentSource(worldY);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Пробует выбрать процедурного врага для указанной высоты из активного ScriptableObject-этапа.
|
||||
/// </summary>
|
||||
public bool TryGetProceduralEnemyPrefab(float worldY, System.Random random, out GameObject prefab)
|
||||
{
|
||||
var stage = GetStage(worldY);
|
||||
if (stage == null)
|
||||
{
|
||||
prefab = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
return stage.TryGetProceduralEnemyPrefab(worldY, random, out prefab);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Возвращает имя этапа для диагностики и overlay-окна.
|
||||
/// </summary>
|
||||
public string GetStageName(float worldY)
|
||||
{
|
||||
return GetStage(worldY)?.StageName ?? string.Empty;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Возвращает прогресс внутри текущего этапа в диапазоне 0..1.
|
||||
/// </summary>
|
||||
public float GetStageProgress(float worldY)
|
||||
{
|
||||
var stage = GetStage(worldY);
|
||||
@ -72,12 +126,18 @@ namespace DanroJump.Gameplay
|
||||
return stage != null ? stage.CalculateProgress(worldY) : 0f;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Возвращает стартовую высоту генерации из первого доступного этапа.
|
||||
/// </summary>
|
||||
private float GetInitialSpawnY()
|
||||
{
|
||||
var firstStage = GetFirstStage();
|
||||
return firstStage != null ? firstStage.StartY : 0f;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Находит первый этап по минимальной стартовой высоте.
|
||||
/// </summary>
|
||||
private GameplayDifficultyStage GetFirstStage()
|
||||
{
|
||||
if (stages == null || stages.Count == 0)
|
||||
@ -102,6 +162,9 @@ namespace DanroJump.Gameplay
|
||||
return firstStage;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Находит последний этап, стартовая высота которого уже пройдена.
|
||||
/// </summary>
|
||||
private GameplayDifficultyStage GetStage(float worldY)
|
||||
{
|
||||
if (!progressionEnabled || stages == null || stages.Count == 0)
|
||||
@ -123,12 +186,15 @@ namespace DanroJump.Gameplay
|
||||
}
|
||||
}
|
||||
|
||||
// The last reached stage intentionally keeps running forever after its length ends.
|
||||
// verticalLength controls curve progress only; it does not disable the stage.
|
||||
// Последний достигнутый этап намеренно продолжается бесконечно.
|
||||
// verticalLength управляет только прогрессом кривых, а не выключением этапа.
|
||||
return currentStage;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Интерфейс чтения прогрессии сложности для gameplay-систем и диагностических окон.
|
||||
/// </summary>
|
||||
public interface IGameplayDifficultyProgression
|
||||
{
|
||||
float CurrentProgress { get; }
|
||||
@ -139,6 +205,7 @@ namespace DanroJump.Gameplay
|
||||
float GetVerticalSpacing(float worldY);
|
||||
float GetHorizontalDistribution(float worldY);
|
||||
IPlatformContentSource CreateContentSource(float worldY);
|
||||
bool TryGetProceduralEnemyPrefab(float worldY, System.Random random, out GameObject prefab);
|
||||
string GetStageName(float worldY);
|
||||
float GetStageProgress(float worldY);
|
||||
}
|
||||
|
||||
@ -4,12 +4,19 @@ using UnityEngine.Serialization;
|
||||
|
||||
namespace DanroJump.Gameplay
|
||||
{
|
||||
/// <summary>
|
||||
/// ScriptableObject-описание одного вертикального этапа сложности.
|
||||
/// Хранит веса платформ, кривые расстояний и вероятности спавна контента.
|
||||
/// </summary>
|
||||
[CreateAssetMenu(
|
||||
fileName = "GameplayDifficultyStage",
|
||||
menuName = "Danro Jump/Gameplay/Difficulty Stage",
|
||||
order = 10)]
|
||||
public sealed class GameplayDifficultyStage : ScriptableObject
|
||||
{
|
||||
/// <summary>
|
||||
/// Настройки платформ этапа: какие prefab доступны и как меняется вертикальный шаг.
|
||||
/// </summary>
|
||||
[System.Serializable]
|
||||
private sealed class StagePlatformSettings
|
||||
{
|
||||
@ -18,11 +25,17 @@ namespace DanroJump.Gameplay
|
||||
[SerializeField] [Min(0.1f)] private float initialVerticalSpacing = 1.15f;
|
||||
[SerializeField] [Min(0.1f)] private float maximumVerticalSpacing = 1.95f;
|
||||
|
||||
/// <summary>
|
||||
/// Выбирает prefab платформы по весам.
|
||||
/// </summary>
|
||||
public GameObject GetPlatformPrefab(System.Random random)
|
||||
{
|
||||
return WeightedPrefabOption.TrySelect(platforms, random, out var prefab) ? prefab : null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Вычисляет расстояние до следующей платформы по прогрессу этапа.
|
||||
/// </summary>
|
||||
public float EvaluateVerticalSpacing(float progress)
|
||||
{
|
||||
var spacingProgress = EvaluateCurve01(verticalSpacingCurve, progress);
|
||||
@ -32,6 +45,9 @@ namespace DanroJump.Gameplay
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Настройки одной категории спавнимого контента этапа.
|
||||
/// </summary>
|
||||
[System.Serializable]
|
||||
private sealed class StageContentSettings
|
||||
{
|
||||
@ -40,14 +56,54 @@ namespace DanroJump.Gameplay
|
||||
[SerializeField] [Range(0f, 1f)] private float initialSpawnChance;
|
||||
[SerializeField] [Range(0f, 1f)] private float maximumSpawnChance;
|
||||
|
||||
/// <summary>
|
||||
/// Взвешенный список prefab этой категории контента.
|
||||
/// </summary>
|
||||
public IReadOnlyList<WeightedPrefabOption> Prefabs => prefabs;
|
||||
|
||||
/// <summary>
|
||||
/// Вычисляет шанс появления контента по прогрессу этапа.
|
||||
/// </summary>
|
||||
public float EvaluateSpawnChance(float progress)
|
||||
{
|
||||
if (!HasValidPrefab())
|
||||
{
|
||||
return 0f;
|
||||
}
|
||||
|
||||
var chanceProgress = EvaluateCurve01(spawnChanceCurve, progress);
|
||||
var maxChance = Mathf.Max(initialSpawnChance, maximumSpawnChance);
|
||||
return Mathf.Lerp(initialSpawnChance, maxChance, chanceProgress);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Выбирает prefab из этой категории с учетом дополнительного фильтра.
|
||||
/// </summary>
|
||||
public bool TryGetPrefab(
|
||||
System.Random random,
|
||||
System.Predicate<GameObject> prefabFilter,
|
||||
out GameObject prefab)
|
||||
{
|
||||
return WeightedPrefabOption.TrySelect(prefabs, random, prefabFilter, out prefab);
|
||||
}
|
||||
|
||||
private bool HasValidPrefab()
|
||||
{
|
||||
if (prefabs == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
foreach (var option in prefabs)
|
||||
{
|
||||
if (option?.Prefab != null && option.Weight > 0f)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
[Header("Общие настройки этапа")]
|
||||
@ -69,24 +125,43 @@ namespace DanroJump.Gameplay
|
||||
[Header("Подбираемые предметы")]
|
||||
[SerializeField] private StageContentSettings collectibles = new();
|
||||
|
||||
/// <summary>
|
||||
/// Отображаемое имя этапа для инспектора, overlay и диагностики.
|
||||
/// </summary>
|
||||
public string StageName => stageName;
|
||||
|
||||
/// <summary>
|
||||
/// Y-координата, с которой этап начинает действовать.
|
||||
/// </summary>
|
||||
public float StartY => startY;
|
||||
|
||||
/// <summary>
|
||||
/// Выбирает платформу этапа по весам.
|
||||
/// </summary>
|
||||
public GameObject GetPlatformPrefab(System.Random random)
|
||||
{
|
||||
return platforms.GetPlatformPrefab(random);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Возвращает вертикальное расстояние до следующей платформы на указанной высоте.
|
||||
/// </summary>
|
||||
public float GetVerticalSpacing(float worldY)
|
||||
{
|
||||
return platforms.EvaluateVerticalSpacing(CalculateProgress(worldY));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Возвращает распределение платформ по горизонтали: -1 центр, 0 вся ширина, 1 края.
|
||||
/// </summary>
|
||||
public float GetHorizontalDistribution()
|
||||
{
|
||||
return Mathf.Clamp(horizontalDistribution, -1f, 1f);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Создает источник контента с вероятностями, актуальными для указанной высоты.
|
||||
/// </summary>
|
||||
public IPlatformContentSource CreateContentSource(float worldY)
|
||||
{
|
||||
var progress = CalculateProgress(worldY);
|
||||
@ -99,6 +174,31 @@ namespace DanroJump.Gameplay
|
||||
enemies.EvaluateSpawnChance(progress));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Пробует выбрать процедурного врага из настроек противников текущего этапа.
|
||||
/// </summary>
|
||||
public bool TryGetProceduralEnemyPrefab(float worldY, System.Random random, out GameObject prefab)
|
||||
{
|
||||
var progress = CalculateProgress(worldY);
|
||||
var spawnChance = enemies.EvaluateSpawnChance(progress);
|
||||
if (spawnChance <= 0f)
|
||||
{
|
||||
prefab = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (spawnChance < 1f && (random != null ? random.NextDouble() : 0d) > spawnChance)
|
||||
{
|
||||
prefab = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
return enemies.TryGetPrefab(random, EnemyPrefabRules.CanSpawnProcedurally, out prefab);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Считает прогресс внутри этапа в диапазоне 0..1.
|
||||
/// </summary>
|
||||
public float CalculateProgress(float worldY)
|
||||
{
|
||||
if (verticalLength <= 0f)
|
||||
@ -109,6 +209,9 @@ namespace DanroJump.Gameplay
|
||||
return Mathf.Clamp01((worldY - startY) / verticalLength);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Безопасно вычисляет значение кривой и ограничивает результат диапазоном 0..1.
|
||||
/// </summary>
|
||||
private static float EvaluateCurve01(AnimationCurve curve, float progress)
|
||||
{
|
||||
if (curve == null || curve.length == 0)
|
||||
|
||||
@ -3,6 +3,10 @@ using Zenject;
|
||||
|
||||
namespace DanroJump.Gameplay
|
||||
{
|
||||
/// <summary>
|
||||
/// Регистрирует зависимости игровой сцены в SceneContext Extenject.
|
||||
/// Является единой точкой связывания gameplay-сервисов и сценовых объектов.
|
||||
/// </summary>
|
||||
public sealed class GameplayInstaller : MonoInstaller
|
||||
{
|
||||
[SerializeField] private JumpPlayerController player;
|
||||
@ -10,19 +14,25 @@ namespace DanroJump.Gameplay
|
||||
[SerializeField] private PlatformSpawner platformSpawner;
|
||||
[SerializeField] private GameplayDifficultyProgression difficultyProgression;
|
||||
|
||||
/// <summary>
|
||||
/// Привязывает игрока, камеру, спавнер, прогрессию сложности и runtime-сервисы.
|
||||
/// </summary>
|
||||
public override void InstallBindings()
|
||||
{
|
||||
if (!ValidateReferences())
|
||||
{
|
||||
return;
|
||||
throw new ZenjectException($"{nameof(GameplayInstaller)} has missing required scene references.");
|
||||
}
|
||||
|
||||
Container.BindInstance(player).AsSingle();
|
||||
Container.BindInstance(gameplayCamera).AsSingle();
|
||||
Container.BindInstance(platformSpawner).AsSingle();
|
||||
Container.BindInstance(difficultyProgression).AsSingle();
|
||||
Container.Bind<IGameplayDifficultyProgression>().FromInstance(difficultyProgression).AsSingle();
|
||||
Container.Bind<GameplaySession>().AsSingle().NonLazy();
|
||||
Container.Bind<PlatformContentSpawner>().AsSingle();
|
||||
|
||||
// Сценовые MonoBehaviour уже существуют, поэтому явно ставим их в очередь на injection.
|
||||
Container.QueueForInject(player);
|
||||
Container.QueueForInject(difficultyProgression);
|
||||
Container.QueueForInject(platformSpawner);
|
||||
@ -33,6 +43,10 @@ namespace DanroJump.Gameplay
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Проверяет обязательные ссылки сцены до регистрации зависимостей.
|
||||
/// </summary>
|
||||
/// <returns>True, если SceneContext настроен достаточно для запуска gameplay.</returns>
|
||||
private bool ValidateReferences()
|
||||
{
|
||||
var isValid = true;
|
||||
@ -45,6 +59,9 @@ namespace DanroJump.Gameplay
|
||||
return isValid;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Валидирует одну сценовую ссылку и пишет понятную ошибку в Unity Console.
|
||||
/// </summary>
|
||||
private bool ValidateReference(Object reference, string fieldName)
|
||||
{
|
||||
if (reference != null)
|
||||
@ -55,5 +72,6 @@ namespace DanroJump.Gameplay
|
||||
Debug.LogError($"{nameof(GameplayInstaller)} is missing '{fieldName}' reference.", this);
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
246
Assets/Scripts/Runtime/Gameplay/GameplaySession.cs
Normal file
246
Assets/Scripts/Runtime/Gameplay/GameplaySession.cs
Normal file
@ -0,0 +1,246 @@
|
||||
using System;
|
||||
using DanroJump.SceneFlow;
|
||||
using DanroJump.Settings;
|
||||
using UnityEngine;
|
||||
|
||||
namespace DanroJump.Gameplay
|
||||
{
|
||||
/// <summary>
|
||||
/// Хранит состояние текущего забега: счет, монеты, жизни, высоту и рекорд.
|
||||
/// </summary>
|
||||
public sealed class GameplaySession : IDisposable
|
||||
{
|
||||
private const string RecordHeightPrefsKey = "DanroJump.Gameplay.RecordHeight";
|
||||
private const int DefaultStartingLives = 3;
|
||||
private static readonly TimeSpan GameOverReturnDelay = TimeSpan.FromSeconds(0.35f);
|
||||
|
||||
private readonly JumpPlayerController player;
|
||||
private readonly IReadOnlyServiceSettings serviceSettings;
|
||||
private readonly ISceneFlowService sceneFlow;
|
||||
private readonly int startingLives;
|
||||
private float savedRecordHeight;
|
||||
|
||||
/// <summary>
|
||||
/// Очки, набранные в текущем забеге.
|
||||
/// </summary>
|
||||
public int Score { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Монеты, собранные в текущем забеге.
|
||||
/// </summary>
|
||||
public int Coins { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Количество смертей в текущем забеге.
|
||||
/// </summary>
|
||||
public int DeathCount { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Оставшиеся жизни до завершения забега.
|
||||
/// </summary>
|
||||
public int RemainingLives { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Текущее состояние gameplay-сессии.
|
||||
/// </summary>
|
||||
public GameplaySessionState State { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Фактическая текущая высота игрока над стартом.
|
||||
/// </summary>
|
||||
public float CurrentHeight => player != null ? Mathf.Max(0f, player.transform.position.y) : 0f;
|
||||
|
||||
/// <summary>
|
||||
/// Максимальная высота, достигнутая в текущем забеге.
|
||||
/// </summary>
|
||||
public float MaxRunHeight => player != null ? Mathf.Max(0f, player.HighestY) : 0f;
|
||||
|
||||
/// <summary>
|
||||
/// Лучшая высота текущего забега.
|
||||
/// </summary>
|
||||
public float BestHeight => MaxRunHeight;
|
||||
|
||||
/// <summary>
|
||||
/// Абсолютный рекорд с учетом сохраненного значения и текущего забега.
|
||||
/// </summary>
|
||||
public float RecordHeight => Mathf.Max(savedRecordHeight, MaxRunHeight);
|
||||
|
||||
/// <summary>
|
||||
/// Показывает, находится ли игрок в состоянии смерти или завершенного забега.
|
||||
/// </summary>
|
||||
public bool IsPlayerDead => State == GameplaySessionState.Respawning || State == GameplaySessionState.GameOver;
|
||||
|
||||
public event Action Changed;
|
||||
|
||||
/// <summary>
|
||||
/// Создает сессию и подписывается на события смерти/respawn игрока.
|
||||
/// </summary>
|
||||
public GameplaySession(
|
||||
JumpPlayerController player,
|
||||
[Zenject.InjectOptional] IReadOnlyServiceSettings serviceSettings = null,
|
||||
[Zenject.InjectOptional] ISceneFlowService sceneFlow = null)
|
||||
{
|
||||
this.player = player;
|
||||
this.serviceSettings = serviceSettings;
|
||||
this.sceneFlow = sceneFlow;
|
||||
startingLives = ResolveStartingLives();
|
||||
RemainingLives = startingLives;
|
||||
State = GameplaySessionState.Running;
|
||||
savedRecordHeight = PlayerPrefs.GetFloat(RecordHeightPrefsKey, 0f);
|
||||
|
||||
if (this.player != null)
|
||||
{
|
||||
this.player.Died += HandlePlayerDied;
|
||||
this.player.Respawned += HandlePlayerRespawned;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Добавляет очки в текущий забег.
|
||||
/// </summary>
|
||||
public void AddScore(int amount)
|
||||
{
|
||||
if (amount <= 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Score += amount;
|
||||
Changed?.Invoke();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Добавляет монеты в текущий забег.
|
||||
/// </summary>
|
||||
public void AddCoins(int amount)
|
||||
{
|
||||
if (amount <= 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Coins += amount;
|
||||
Changed?.Invoke();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Полностью сбрасывает забег, сохранив рекорд при необходимости.
|
||||
/// </summary>
|
||||
public void ResetSession()
|
||||
{
|
||||
SaveRecordIfNeeded();
|
||||
Score = 0;
|
||||
Coins = 0;
|
||||
DeathCount = 0;
|
||||
RemainingLives = startingLives;
|
||||
State = GameplaySessionState.Running;
|
||||
player?.ResetRun();
|
||||
Changed?.Invoke();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Сохраняет рекорд и отписывается от событий игрока.
|
||||
/// </summary>
|
||||
public void Dispose()
|
||||
{
|
||||
SaveRecordIfNeeded();
|
||||
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
player.Died -= HandlePlayerDied;
|
||||
player.Respawned -= HandlePlayerRespawned;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Обновляет состояние сессии после смерти игрока.
|
||||
/// </summary>
|
||||
private void HandlePlayerDied(JumpPlayerController _)
|
||||
{
|
||||
DeathCount++;
|
||||
RemainingLives = Mathf.Max(0, RemainingLives - 1);
|
||||
State = RemainingLives > 0 ? GameplaySessionState.Respawning : GameplaySessionState.GameOver;
|
||||
if (State == GameplaySessionState.GameOver)
|
||||
{
|
||||
player?.BlockPendingRespawn();
|
||||
StartGameOverReturn();
|
||||
}
|
||||
else
|
||||
{
|
||||
player?.ScheduleRespawn(player.DeathRespawnDelay);
|
||||
}
|
||||
|
||||
SaveRecordIfNeeded();
|
||||
Changed?.Invoke();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Возвращает сессию в Running после respawn, если игра еще не закончена.
|
||||
/// </summary>
|
||||
private void HandlePlayerRespawned(JumpPlayerController _)
|
||||
{
|
||||
if (State != GameplaySessionState.GameOver)
|
||||
{
|
||||
State = GameplaySessionState.Running;
|
||||
}
|
||||
|
||||
Changed?.Invoke();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Читает стартовое количество жизней из сервисных настроек.
|
||||
/// </summary>
|
||||
private int ResolveStartingLives()
|
||||
{
|
||||
if (serviceSettings == null)
|
||||
{
|
||||
return DefaultStartingLives;
|
||||
}
|
||||
|
||||
var configuredLives = serviceSettings.GetInt(ServiceSettingsKeys.StartingLives);
|
||||
return Mathf.Max(1, configuredLives);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Сохраняет лучший результат по высоте в PlayerPrefs.
|
||||
/// </summary>
|
||||
private void SaveRecordIfNeeded()
|
||||
{
|
||||
if (MaxRunHeight <= savedRecordHeight)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
savedRecordHeight = MaxRunHeight;
|
||||
PlayerPrefs.SetFloat(RecordHeightPrefsKey, savedRecordHeight);
|
||||
PlayerPrefs.Save();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Запускает возврат в главное меню после финальной смерти.
|
||||
/// </summary>
|
||||
private void StartGameOverReturn()
|
||||
{
|
||||
if (sceneFlow == null)
|
||||
{
|
||||
Debug.LogWarning($"{nameof(GameplaySession)} cannot return to main menu because {nameof(ISceneFlowService)} is not bound.");
|
||||
return;
|
||||
}
|
||||
|
||||
sceneFlow.ReturnToMainMenuAfterGameOver(GameOverReturnDelay);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Состояние игрового забега.
|
||||
/// </summary>
|
||||
public enum GameplaySessionState
|
||||
{
|
||||
Waiting = 0,
|
||||
Running = 1,
|
||||
Respawning = 2,
|
||||
GameOver = 3,
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/Runtime/Gameplay/GameplaySession.cs.meta
Normal file
2
Assets/Scripts/Runtime/Gameplay/GameplaySession.cs.meta
Normal file
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 993f37ab6fd94234b9fc09213874df63
|
||||
@ -2,6 +2,9 @@ using UnityEngine;
|
||||
|
||||
namespace DanroJump.Gameplay
|
||||
{
|
||||
/// <summary>
|
||||
/// Маркер обычной платформы, которую игрок может использовать для автопрыжка.
|
||||
/// </summary>
|
||||
[RequireComponent(typeof(Collider2D))]
|
||||
public sealed class JumpPlatform : MonoBehaviour
|
||||
{
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -3,31 +3,44 @@ using Zenject;
|
||||
|
||||
namespace DanroJump.Gameplay
|
||||
{
|
||||
/// <summary>
|
||||
/// Кастомная one-way логика платформы.
|
||||
/// Игнорирует столкновение, если GroundCheck игрока ниже верхней границы платформы.
|
||||
/// </summary>
|
||||
[DisallowMultipleComponent]
|
||||
[RequireComponent(typeof(Collider2D))]
|
||||
public sealed class OneWayPlatformCollider : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private JumpPlayerController player;
|
||||
[SerializeField] private float topBoundaryPadding;
|
||||
[SerializeField] private float landingVelocityThreshold = 0.05f;
|
||||
[SerializeField] private float crossingGraceDistance = 0.8f;
|
||||
|
||||
private Collider2D platformCollider;
|
||||
private BoxCollider2D boxPlatformCollider;
|
||||
private Collider2D playerCollider;
|
||||
private bool isIgnoringPlayerCollision;
|
||||
|
||||
/// <summary>
|
||||
/// Y-координата верхней границы коллайдера платформы.
|
||||
/// </summary>
|
||||
public float TopY
|
||||
{
|
||||
get
|
||||
{
|
||||
if (platformCollider is BoxCollider2D boxCollider)
|
||||
if (boxPlatformCollider != null)
|
||||
{
|
||||
var localTop = boxCollider.offset + Vector2.up * (boxCollider.size.y * 0.5f);
|
||||
return boxCollider.transform.TransformPoint(localTop).y;
|
||||
var localTop = boxPlatformCollider.offset + Vector2.up * (boxPlatformCollider.size.y * 0.5f);
|
||||
return boxPlatformCollider.transform.TransformPoint(localTop).y;
|
||||
}
|
||||
|
||||
return platformCollider != null ? platformCollider.bounds.max.y : transform.position.y;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получает игрока через DI, чтобы не искать его по сцене на каждой платформе.
|
||||
/// </summary>
|
||||
[Inject]
|
||||
public void Construct(JumpPlayerController injectedPlayer)
|
||||
{
|
||||
@ -35,9 +48,13 @@ namespace DanroJump.Gameplay
|
||||
ResolvePlayerCollider();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Подготавливает Collider2D и отключает стандартный PlatformEffector2D, если он остался на prefab.
|
||||
/// </summary>
|
||||
private void Awake()
|
||||
{
|
||||
platformCollider = GetComponent<Collider2D>();
|
||||
boxPlatformCollider = platformCollider as BoxCollider2D;
|
||||
platformCollider.usedByEffector = false;
|
||||
|
||||
if (TryGetComponent(out PlatformEffector2D platformEffector))
|
||||
@ -48,16 +65,33 @@ namespace DanroJump.Gameplay
|
||||
RefreshColliderState();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// После повторного включения сразу синхронизирует IgnoreCollision, не ожидая следующего FixedUpdate.
|
||||
/// </summary>
|
||||
private void OnEnable()
|
||||
{
|
||||
RefreshColliderState();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// При выключении платформы обязательно возвращает столкновение с игроком.
|
||||
/// </summary>
|
||||
private void OnDisable()
|
||||
{
|
||||
SetPlayerCollisionIgnored(false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Синхронизирует состояние IgnoreCollision с текущей позицией GroundCheck игрока.
|
||||
/// </summary>
|
||||
private void FixedUpdate()
|
||||
{
|
||||
RefreshColliderState();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Обновляет режим столкновения между платформой и игроком.
|
||||
/// </summary>
|
||||
private void RefreshColliderState()
|
||||
{
|
||||
if (player == null && !ResolvePlayer())
|
||||
@ -73,16 +107,48 @@ namespace DanroJump.Gameplay
|
||||
SetPlayerCollisionIgnored(!ShouldCollideWith(player));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Проверяет, должен ли игрок столкнуться с платформой в текущем физическом шаге.
|
||||
/// </summary>
|
||||
/// <param name="targetPlayer">Игрок, для которого проверяется столкновение.</param>
|
||||
/// <returns>True, если игрок падает сверху или только что пересек верх платформы сверху вниз.</returns>
|
||||
public bool ShouldCollideWith(JumpPlayerController targetPlayer)
|
||||
{
|
||||
return targetPlayer != null && targetPlayer.GroundCheckY >= TopY + topBoundaryPadding;
|
||||
if (targetPlayer == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var topY = TopY + topBoundaryPadding;
|
||||
var isFalling = targetPlayer.VerticalVelocity <= landingVelocityThreshold ||
|
||||
targetPlayer.PreviousVerticalVelocity <= landingVelocityThreshold;
|
||||
if (!isFalling)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (targetPlayer.GroundCheckY >= topY)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// Grace-зона закрывает быстрые кадры, когда GroundCheck успел проскочить немного ниже верхней границы.
|
||||
var crossedFromAbove = targetPlayer.PreviousGroundCheckY >= topY &&
|
||||
targetPlayer.GroundCheckY >= topY - crossingGraceDistance;
|
||||
return crossedFromAbove;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Возвращает true, если ссылка на игрока уже получена.
|
||||
/// </summary>
|
||||
private bool ResolvePlayer()
|
||||
{
|
||||
return player != null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Кэширует коллайдер игрока для Physics2D.IgnoreCollision.
|
||||
/// </summary>
|
||||
private bool ResolvePlayerCollider()
|
||||
{
|
||||
if (player == null)
|
||||
@ -93,6 +159,9 @@ namespace DanroJump.Gameplay
|
||||
return player.TryGetComponent(out playerCollider);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Включает или выключает физическое столкновение пары игрок-платформа.
|
||||
/// </summary>
|
||||
private void SetPlayerCollisionIgnored(bool shouldIgnore)
|
||||
{
|
||||
if (platformCollider == null || playerCollider == null || isIgnoringPlayerCollision == shouldIgnore)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user