From 99c88c071f3742fdd1f2380a85c53c4a089da6ea Mon Sep 17 00:00:00 2001 From: Bragin Stepan Date: Thu, 26 Feb 2026 00:27:42 +0500 Subject: [PATCH] feat: add deal damage after teleport system --- .../Gameplay/Entities/EntitiesFactory.cs | 18 +- .../Gameplay/Entities/Generated/EntityAPI.cs | 67 ++++++ .../Systems/DealDamageAfterTeleportSystem.cs | 71 ++++++ .../DealDamageAfterTeleportSystem.cs.meta | 11 + .../Features/Teleport/TeleportComponents.cs | 4 + .../Gameplay/Infrastructure/TestGameplay.cs | 15 +- Assets/_Project/Scenes/Gameplay.unity | 214 +++++++++++++++++- 7 files changed, 380 insertions(+), 20 deletions(-) create mode 100644 Assets/_Project/Develop/Runtime/Logic/Gameplay/Features/Teleport/Systems/DealDamageAfterTeleportSystem.cs create mode 100644 Assets/_Project/Develop/Runtime/Logic/Gameplay/Features/Teleport/Systems/DealDamageAfterTeleportSystem.cs.meta diff --git a/Assets/_Project/Develop/Runtime/Logic/Gameplay/Entities/EntitiesFactory.cs b/Assets/_Project/Develop/Runtime/Logic/Gameplay/Entities/EntitiesFactory.cs index 74bff16..ab951c3 100644 --- a/Assets/_Project/Develop/Runtime/Logic/Gameplay/Entities/EntitiesFactory.cs +++ b/Assets/_Project/Develop/Runtime/Logic/Gameplay/Entities/EntitiesFactory.cs @@ -130,15 +130,6 @@ namespace _Project.Develop.Runtime.Entities return entity; } - public Entity CreateMage(Vector3 position) - { - Entity entity = CreateEmpty(); - - _monoEntitiesFactory.Create(entity, position, PathToResources.Entity.Mage); - - return entity; - } - public Entity CreateGhost(Vector3 position) { Entity entity = CreateEmpty(); @@ -153,8 +144,8 @@ namespace _Project.Develop.Runtime.Entities .AddRotateDirection() .AddMoveSpeed(new ReactiveVariable(10)) .AddRotationSpeed(new ReactiveVariable(800)) - .AddMaxHealth(new ReactiveVariable(150)) - .AddCurrentHealth(new ReactiveVariable(150)) + .AddMaxHealth(new ReactiveVariable(50)) + .AddCurrentHealth(new ReactiveVariable(50)) .AddBodyContactDamage(new ReactiveVariable(50)) .AddTakeDamageRequest() .AddTakeDamageEvent() @@ -231,6 +222,10 @@ namespace _Project.Develop.Runtime.Entities .AddFindTeleportPointRequest() .AddEndTeleportEvent() + .AddTeleportDamage(new ReactiveVariable(50)) + .AddTeleportDamageRadius(new ReactiveVariable(6)) + .AddTeleportDamageMask(Layers.CharactersMask) + .AddTeleportEnergyCost(new ReactiveVariable(20)) .AddTeleportSearchRadius(new ReactiveVariable(6)) @@ -294,6 +289,7 @@ namespace _Project.Develop.Runtime.Entities .AddSystem(new FindRandomPointForTeleportSystem()) .AddSystem(new EndTeleportSystem()) .AddSystem(new InstantTeleportSystem()) + .AddSystem(new DealDamageAfterTeleportSystem(_collidersRegistryService)) .AddSystem(new BodyContactsDetectingSystem()) .AddSystem(new BodyContactsEntitiesFilterSystem(_collidersRegistryService)) diff --git a/Assets/_Project/Develop/Runtime/Logic/Gameplay/Entities/Generated/EntityAPI.cs b/Assets/_Project/Develop/Runtime/Logic/Gameplay/Entities/Generated/EntityAPI.cs index c261145..89d3721 100644 --- a/Assets/_Project/Develop/Runtime/Logic/Gameplay/Entities/Generated/EntityAPI.cs +++ b/Assets/_Project/Develop/Runtime/Logic/Gameplay/Entities/Generated/EntityAPI.cs @@ -327,6 +327,73 @@ namespace _Project.Develop.Runtime.Entities return AddComponent(new _Project.Develop.Runtime.Logic.Gameplay.Features.Teleport.TeleportEnergyCost() {Value = value}); } + public _Project.Develop.Runtime.Logic.Gameplay.Features.Teleport.TeleportDamage TeleportDamageC => GetComponent<_Project.Develop.Runtime.Logic.Gameplay.Features.Teleport.TeleportDamage>(); + + public _Project.Develop.Runtime.Utils.ReactiveManagement.ReactiveVariable TeleportDamage => TeleportDamageC.Value; + + public bool TryGetTeleportDamage(out _Project.Develop.Runtime.Utils.ReactiveManagement.ReactiveVariable value) + { + bool result = TryGetComponent(out _Project.Develop.Runtime.Logic.Gameplay.Features.Teleport.TeleportDamage component); + if(result) + value = component.Value; + else + value = default(_Project.Develop.Runtime.Utils.ReactiveManagement.ReactiveVariable); + return result; + } + + public _Project.Develop.Runtime.Entities.Entity AddTeleportDamage() + { + return AddComponent(new _Project.Develop.Runtime.Logic.Gameplay.Features.Teleport.TeleportDamage() { Value = new _Project.Develop.Runtime.Utils.ReactiveManagement.ReactiveVariable() }); + } + + public _Project.Develop.Runtime.Entities.Entity AddTeleportDamage(_Project.Develop.Runtime.Utils.ReactiveManagement.ReactiveVariable value) + { + return AddComponent(new _Project.Develop.Runtime.Logic.Gameplay.Features.Teleport.TeleportDamage() {Value = value}); + } + + public _Project.Develop.Runtime.Logic.Gameplay.Features.Teleport.TeleportDamageRadius TeleportDamageRadiusC => GetComponent<_Project.Develop.Runtime.Logic.Gameplay.Features.Teleport.TeleportDamageRadius>(); + + public _Project.Develop.Runtime.Utils.ReactiveManagement.ReactiveVariable TeleportDamageRadius => TeleportDamageRadiusC.Value; + + public bool TryGetTeleportDamageRadius(out _Project.Develop.Runtime.Utils.ReactiveManagement.ReactiveVariable value) + { + bool result = TryGetComponent(out _Project.Develop.Runtime.Logic.Gameplay.Features.Teleport.TeleportDamageRadius component); + if(result) + value = component.Value; + else + value = default(_Project.Develop.Runtime.Utils.ReactiveManagement.ReactiveVariable); + return result; + } + + public _Project.Develop.Runtime.Entities.Entity AddTeleportDamageRadius() + { + return AddComponent(new _Project.Develop.Runtime.Logic.Gameplay.Features.Teleport.TeleportDamageRadius() { Value = new _Project.Develop.Runtime.Utils.ReactiveManagement.ReactiveVariable() }); + } + + public _Project.Develop.Runtime.Entities.Entity AddTeleportDamageRadius(_Project.Develop.Runtime.Utils.ReactiveManagement.ReactiveVariable value) + { + return AddComponent(new _Project.Develop.Runtime.Logic.Gameplay.Features.Teleport.TeleportDamageRadius() {Value = value}); + } + + public _Project.Develop.Runtime.Logic.Gameplay.Features.Teleport.TeleportDamageMask TeleportDamageMaskC => GetComponent<_Project.Develop.Runtime.Logic.Gameplay.Features.Teleport.TeleportDamageMask>(); + + public UnityEngine.LayerMask TeleportDamageMask => TeleportDamageMaskC.Value; + + public bool TryGetTeleportDamageMask(out UnityEngine.LayerMask value) + { + bool result = TryGetComponent(out _Project.Develop.Runtime.Logic.Gameplay.Features.Teleport.TeleportDamageMask component); + if(result) + value = component.Value; + else + value = default(UnityEngine.LayerMask); + return result; + } + + public _Project.Develop.Runtime.Entities.Entity AddTeleportDamageMask(UnityEngine.LayerMask value) + { + return AddComponent(new _Project.Develop.Runtime.Logic.Gameplay.Features.Teleport.TeleportDamageMask() {Value = value}); + } + public _Project.Develop.Runtime.Logic.Gameplay.Features.Sensors.CapsuleColliderComponent CapsuleColliderC => GetComponent<_Project.Develop.Runtime.Logic.Gameplay.Features.Sensors.CapsuleColliderComponent>(); public UnityEngine.CapsuleCollider CapsuleCollider => CapsuleColliderC.Value; diff --git a/Assets/_Project/Develop/Runtime/Logic/Gameplay/Features/Teleport/Systems/DealDamageAfterTeleportSystem.cs b/Assets/_Project/Develop/Runtime/Logic/Gameplay/Features/Teleport/Systems/DealDamageAfterTeleportSystem.cs new file mode 100644 index 0000000..1741172 --- /dev/null +++ b/Assets/_Project/Develop/Runtime/Logic/Gameplay/Features/Teleport/Systems/DealDamageAfterTeleportSystem.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using _Project.Develop.Runtime.Entities; +using _Project.Develop.Runtime.Utils.ReactiveManagement; +using _Project.Develop.Runtime.Utils.ReactiveManagement.Event; +using UnityEngine; + +namespace _Project.Develop.Runtime.Logic.Gameplay.Features.Teleport.Systems +{ + public class DealDamageAfterTeleportSystem : IInitializableSystem, IDisposableSystem + { + private Entity _entity; + private Transform _toPoint; + private ReactiveEvent _endTeleportEvent; + + private float _damage; + private float _radius; + private LayerMask _mask; + + private readonly CollidersRegistryService _collidersRegistryService; + private readonly Collider[] _contacts = new Collider[32]; + + private IDisposable _endTeleportDisposable; + + public DealDamageAfterTeleportSystem(CollidersRegistryService collidersRegistryService) + { + _collidersRegistryService = collidersRegistryService; + } + + public void OnInit(Entity entity) + { + _entity = entity; + _toPoint = entity.TeleportToPoint; + _endTeleportEvent = entity.EndTeleportEvent; + _damage = entity.TeleportDamage.Value; + _radius = entity.TeleportDamageRadius.Value; + _mask = entity.TeleportDamageMask; + + _endTeleportDisposable = _endTeleportEvent.Subscribe(OnEndTeleport); + } + + public void OnDispose() + { + _endTeleportDisposable.Dispose(); + } + + private void OnEndTeleport() + { + if (_radius <= 0 || _damage <= 0) return; + + int count = Physics.OverlapSphereNonAlloc( + _toPoint.position, + _radius, + _contacts, + _mask, + QueryTriggerInteraction.Ignore); + + for (int i = 0; i < count; i++) + { + Entity contactEntity = _collidersRegistryService.GetBy(_contacts[i]); + + if (contactEntity != null + && contactEntity != _entity + && contactEntity.TryGetTakeDamageRequest(out ReactiveEvent takeDamageRequest)) + { + takeDamageRequest.Invoke(_damage); + } + } + } + } +} diff --git a/Assets/_Project/Develop/Runtime/Logic/Gameplay/Features/Teleport/Systems/DealDamageAfterTeleportSystem.cs.meta b/Assets/_Project/Develop/Runtime/Logic/Gameplay/Features/Teleport/Systems/DealDamageAfterTeleportSystem.cs.meta new file mode 100644 index 0000000..95e39db --- /dev/null +++ b/Assets/_Project/Develop/Runtime/Logic/Gameplay/Features/Teleport/Systems/DealDamageAfterTeleportSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ad75604cc8b98c14cb3fc0c6e331efc0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Develop/Runtime/Logic/Gameplay/Features/Teleport/TeleportComponents.cs b/Assets/_Project/Develop/Runtime/Logic/Gameplay/Features/Teleport/TeleportComponents.cs index 098d605..1a33f2b 100644 --- a/Assets/_Project/Develop/Runtime/Logic/Gameplay/Features/Teleport/TeleportComponents.cs +++ b/Assets/_Project/Develop/Runtime/Logic/Gameplay/Features/Teleport/TeleportComponents.cs @@ -22,4 +22,8 @@ namespace _Project.Develop.Runtime.Logic.Gameplay.Features.Teleport public class EndTeleportEvent : IEntityComponent { public ReactiveEvent Value; } public class TeleportEnergyCost : IEntityComponent { public ReactiveVariable Value; } + + public class TeleportDamage : IEntityComponent { public ReactiveVariable Value; } + public class TeleportDamageRadius : IEntityComponent { public ReactiveVariable Value; } + public class TeleportDamageMask : IEntityComponent { public LayerMask Value; } } \ No newline at end of file diff --git a/Assets/_Project/Develop/Runtime/Logic/Gameplay/Infrastructure/TestGameplay.cs b/Assets/_Project/Develop/Runtime/Logic/Gameplay/Infrastructure/TestGameplay.cs index 1760a24..2287f57 100644 --- a/Assets/_Project/Develop/Runtime/Logic/Gameplay/Infrastructure/TestGameplay.cs +++ b/Assets/_Project/Develop/Runtime/Logic/Gameplay/Infrastructure/TestGameplay.cs @@ -24,8 +24,11 @@ namespace _Project.Develop.Runtime.Logic.Gameplay.Features public void Run() { - _entity = _entitiesFactory.CreateTeleportWizard(Vector3.zero + Vector3.forward * 5); - // _entitiesFactory.CreateHero(Vector3.zero); + _entity = _entitiesFactory.CreateTeleportWizard(Vector3.zero); + + _entitiesFactory.CreateGhost(Vector3.zero + Vector3.forward * 5); + _entitiesFactory.CreateGhost(Vector3.zero + Vector3.right * 5); + _entitiesFactory.CreateGhost(Vector3.zero + Vector3.left * 5); _isRunning = true; } @@ -41,12 +44,8 @@ namespace _Project.Develop.Runtime.Logic.Gameplay.Features if (_entity == null) return; - GUI.Label(new Rect(10, 20, 200, 50), $"Energy: {_entity.CurrentEnergy.Value}/{_entity.MaxEnergy.Value}"); - // GUI.Label(new Rect(10, 40, 200, 50), $"CurrentEnergy: {_entity.CurrentEnergy.Value}"); - // GUI.Label(new Rect(10, 60, 200, 50), $"CurrentEnergy: {_entity.CurrentEnergy.Value}"); - // GUI.Label(new Rect(10, 80, 200, 50), $"CurrentEnergy: {_entity.CurrentEnergy.Value}"); - // GUI.Label(new Rect(10, 100, 200, 50), $"CurrentEnergy: {_entity.CurrentEnergy.Value}"); - // GUI.Label(new Rect(10, 120, 200, 50), $"CurrentEnergy: {_entity.CurrentEnergy.Value}"); + GUI.Label(new Rect(10, 20, 200, 50), $"Health: {_entity.CurrentHealth.Value}/{_entity.MaxHealth.Value}"); + GUI.Label(new Rect(10, 40, 200, 50), $"Energy: {_entity.CurrentEnergy.Value}/{_entity.MaxEnergy.Value}"); } } } \ No newline at end of file diff --git a/Assets/_Project/Scenes/Gameplay.unity b/Assets/_Project/Scenes/Gameplay.unity index 3b65fdf..f00df5b 100644 --- a/Assets/_Project/Scenes/Gameplay.unity +++ b/Assets/_Project/Scenes/Gameplay.unity @@ -222,7 +222,7 @@ Transform: m_GameObject: {fileID: 63063970} serializedVersion: 2 m_LocalRotation: {x: -0, y: 0.70710576, z: -0, w: 0.70710784} - m_LocalPosition: {x: -0.31, y: 1.57, z: 17.87} + m_LocalPosition: {x: -0.31, y: 0.93, z: 17.87} m_LocalScale: {x: 1, y: 4.3882, z: -9.5648985} m_ConstrainProportionsScale: 0 m_Children: [] @@ -377,6 +377,111 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: b8be3a7a8111473cbe01d1fabc512e42, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!1 &427995196 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 427995200} + - component: {fileID: 427995199} + - component: {fileID: 427995198} + - component: {fileID: 427995197} + m_Layer: 7 + m_Name: r (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &427995197 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 427995196} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &427995198 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 427995196} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &427995199 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 427995196} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &427995200 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 427995196} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: 0.70710576, z: -0, w: 0.70710784} + m_LocalPosition: {x: 15.94, y: 0.93, z: 17.87} + m_LocalScale: {x: 1, y: 4.3882, z: -9.5648985} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} --- !u!1 &601836776 GameObject: m_ObjectHideFlags: 0 @@ -774,6 +879,111 @@ MonoBehaviour: m_LightCookieSize: {x: 1, y: 1} m_LightCookieOffset: {x: 0, y: 0} m_SoftShadowQuality: 0 +--- !u!1 &1894801034 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1894801038} + - component: {fileID: 1894801037} + - component: {fileID: 1894801036} + - component: {fileID: 1894801035} + m_Layer: 7 + m_Name: r (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &1894801035 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1894801034} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1894801036 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1894801034} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1894801037 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1894801034} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1894801038 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1894801034} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: 0.70710576, z: -0, w: 0.70710784} + m_LocalPosition: {x: -17.11, y: 0.93, z: 17.87} + m_LocalScale: {x: 1, y: 4.3882, z: -9.5648985} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} --- !u!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 @@ -783,3 +993,5 @@ SceneRoots: - {fileID: 1616281628} - {fileID: 92564821} - {fileID: 63063974} + - {fileID: 1894801038} + - {fileID: 427995200}