몬스터 이동 AI
- 코어로의 경로가 막혀있을 경우 장애물을 파괴하여 경로 확보 몬스터를 소환하는 EnemyPortal 생성
This commit is contained in:
@@ -92,6 +92,7 @@
|
|||||||
<Compile Include="Assets\Scripts\GhostMaterialTest.cs" />
|
<Compile Include="Assets\Scripts\GhostMaterialTest.cs" />
|
||||||
<Compile Include="Assets\Scripts\BuildingPlacement.cs" />
|
<Compile Include="Assets\Scripts\BuildingPlacement.cs" />
|
||||||
<Compile Include="Assets\Scripts\Core.cs" />
|
<Compile Include="Assets\Scripts\Core.cs" />
|
||||||
|
<Compile Include="Assets\Scripts\EnemyPortal.cs" />
|
||||||
<Compile Include="Assets\FlatKit\Demos\Common\Scripts\Motion\LinearMotion.cs" />
|
<Compile Include="Assets\FlatKit\Demos\Common\Scripts\Motion\LinearMotion.cs" />
|
||||||
<Compile Include="Assets\Scripts\IDamageable.cs" />
|
<Compile Include="Assets\Scripts\IDamageable.cs" />
|
||||||
<Compile Include="Assets\Scripts\NetworkSpawnManager.cs" />
|
<Compile Include="Assets\Scripts\NetworkSpawnManager.cs" />
|
||||||
|
|||||||
@@ -14,12 +14,25 @@ MonoBehaviour:
|
|||||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.BuildingData
|
m_EditorClassIdentifier: Assembly-CSharp::Northbound.BuildingData
|
||||||
buildingName: BaseTower
|
buildingName: BaseTower
|
||||||
prefab: {fileID: 3733880183385667081, guid: 1979909431408184b9bc587877c5b4b4, type: 3}
|
prefab: {fileID: 3733880183385667081, guid: 1979909431408184b9bc587877c5b4b4, type: 3}
|
||||||
|
icon: {fileID: 0}
|
||||||
width: 5
|
width: 5
|
||||||
length: 5
|
length: 5
|
||||||
height: 5
|
height: 5
|
||||||
placementOffset: {x: 0, y: 0, z: 0}
|
placementOffset: {x: 0, y: 0, z: 0}
|
||||||
allowRotation: 1
|
allowRotation: 1
|
||||||
maxHealth: 1000
|
requiredWorkAmount: 100
|
||||||
|
workPerInteraction: 10
|
||||||
|
interactionCooldown: 1
|
||||||
|
constructionAnimationTrigger: Build
|
||||||
|
constructionEquipment:
|
||||||
|
socketName: RightHand
|
||||||
|
equipmentPrefab: {fileID: 0}
|
||||||
|
attachOnStart: 1
|
||||||
|
detachOnEnd: 1
|
||||||
|
keepEquipped: 0
|
||||||
|
attachDelay: 0
|
||||||
|
detachDelay: 0
|
||||||
|
maxHealth: 100
|
||||||
isIndestructible: 0
|
isIndestructible: 0
|
||||||
autoRegenerate: 0
|
autoRegenerate: 0
|
||||||
regenPerSecond: 1
|
regenPerSecond: 1
|
||||||
|
|||||||
@@ -59,3 +59,8 @@ MonoBehaviour:
|
|||||||
SourcePrefabToOverride: {fileID: 0}
|
SourcePrefabToOverride: {fileID: 0}
|
||||||
SourceHashToOverride: 0
|
SourceHashToOverride: 0
|
||||||
OverridingTargetPrefab: {fileID: 0}
|
OverridingTargetPrefab: {fileID: 0}
|
||||||
|
- Override: 0
|
||||||
|
Prefab: {fileID: 351020651857757465, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
SourcePrefabToOverride: {fileID: 0}
|
||||||
|
SourceHashToOverride: 0
|
||||||
|
OverridingTargetPrefab: {fileID: 0}
|
||||||
|
|||||||
213
Assets/Materials/flatkit hexagons_medieval enemy.mat
Normal file
213
Assets/Materials/flatkit hexagons_medieval enemy.mat
Normal file
@@ -0,0 +1,213 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!114 &-4035507967926131752
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 11
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 0}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion
|
||||||
|
version: 10
|
||||||
|
--- !u!21 &2100000
|
||||||
|
Material:
|
||||||
|
serializedVersion: 8
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_Name: flatkit hexagons_medieval enemy
|
||||||
|
m_Shader: {fileID: 4800000, guid: bee44b4a58655ee4cbff107302a3e131, type: 3}
|
||||||
|
m_Parent: {fileID: 0}
|
||||||
|
m_ModifiedSerializedProperties: 0
|
||||||
|
m_ValidKeywords:
|
||||||
|
- _CELPRIMARYMODE_SINGLE
|
||||||
|
- _DETAILMAPBLENDINGMODE_MULTIPLY
|
||||||
|
- _GRADIENTSPACE_WORLD
|
||||||
|
- _OUTLINESPACE_SCREEN
|
||||||
|
- _TEXTUREBLENDINGMODE_MULTIPLY
|
||||||
|
m_InvalidKeywords:
|
||||||
|
- _UNITYSHADOWMODE_NONE
|
||||||
|
m_LightmapFlags: 4
|
||||||
|
m_EnableInstancingVariants: 0
|
||||||
|
m_DoubleSidedGI: 0
|
||||||
|
m_CustomRenderQueue: 2000
|
||||||
|
stringTagMap:
|
||||||
|
RenderType: Opaque
|
||||||
|
disabledShaderPasses:
|
||||||
|
- MOTIONVECTORS
|
||||||
|
- SRPDEFAULTUNLIT
|
||||||
|
m_LockedProperties:
|
||||||
|
m_SavedProperties:
|
||||||
|
serializedVersion: 3
|
||||||
|
m_TexEnvs:
|
||||||
|
- _BaseMap:
|
||||||
|
m_Texture: {fileID: 2800000, guid: b9dd7682e7a0a6041b2590e464add09c, type: 3}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _BumpMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _CelCurveTexture:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _CelStepTexture:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _DetailAlbedoMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _DetailMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _DetailMask:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _DetailNormalMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _EmissionMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _MainTex:
|
||||||
|
m_Texture: {fileID: 2800000, guid: b9dd7682e7a0a6041b2590e464add09c, type: 3}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _MetallicGlossMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _OcclusionMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _ParallaxMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SpecGlossMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- unity_Lightmaps:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- unity_LightmapsInd:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- unity_ShadowMasks:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
m_Ints: []
|
||||||
|
m_Floats:
|
||||||
|
- _AddPrecomputedVelocity: 0
|
||||||
|
- _AlphaClip: 0
|
||||||
|
- _AlphaToMask: 0
|
||||||
|
- _BaseMapPremultiply: 0
|
||||||
|
- _Blend: 0
|
||||||
|
- _BlendModePreserveSpecular: 1
|
||||||
|
- _BumpScale: 1
|
||||||
|
- _CameraDistanceImpact: 0.5
|
||||||
|
- _CelExtraEnabled: 0
|
||||||
|
- _CelNumSteps: 7
|
||||||
|
- _CelPrimaryMode: 1
|
||||||
|
- _ClearCoatMask: 0
|
||||||
|
- _ClearCoatSmoothness: 0
|
||||||
|
- _Cull: 2
|
||||||
|
- _Cutoff: 0.5
|
||||||
|
- _DetailAlbedoMapScale: 1
|
||||||
|
- _DetailMapBlendingMode: 0
|
||||||
|
- _DetailMapImpact: 0
|
||||||
|
- _DetailNormalMapScale: 1
|
||||||
|
- _DstBlend: 0
|
||||||
|
- _DstBlendAlpha: 0
|
||||||
|
- _EnvironmentReflections: 1
|
||||||
|
- _FlatRimEdgeSmoothness: 1
|
||||||
|
- _FlatRimLightAlign: 0
|
||||||
|
- _FlatRimSize: 0.1
|
||||||
|
- _FlatSpecularEdgeSmoothness: 0
|
||||||
|
- _FlatSpecularSize: 0
|
||||||
|
- _Flatness: 1
|
||||||
|
- _FlatnessExtra: 1
|
||||||
|
- _GlossMapScale: 1
|
||||||
|
- _Glossiness: 0.5
|
||||||
|
- _GlossyReflections: 1
|
||||||
|
- _GradientAngle: 0
|
||||||
|
- _GradientCenterX: 0
|
||||||
|
- _GradientCenterY: 0
|
||||||
|
- _GradientEnabled: 0
|
||||||
|
- _GradientSize: 10
|
||||||
|
- _GradientSpace: 0
|
||||||
|
- _LightContribution: 0
|
||||||
|
- _LightFalloffSize: 0
|
||||||
|
- _LightmapDirectionPitch: 0
|
||||||
|
- _LightmapDirectionYaw: 0
|
||||||
|
- _Metallic: 0
|
||||||
|
- _Mode: 0
|
||||||
|
- _OcclusionStrength: 1
|
||||||
|
- _OutlineDepthOffset: 0.3
|
||||||
|
- _OutlineEnabled: 0
|
||||||
|
- _OutlineScale: 1
|
||||||
|
- _OutlineSpace: 0
|
||||||
|
- _OutlineWidth: 1
|
||||||
|
- _OverrideLightmapDir: 0
|
||||||
|
- _Parallax: 0.02
|
||||||
|
- _QueueOffset: 0
|
||||||
|
- _ReceiveShadows: 1
|
||||||
|
- _RimEnabled: 0
|
||||||
|
- _SelfShadingSize: 0.7
|
||||||
|
- _SelfShadingSizeExtra: 0.464
|
||||||
|
- _ShadowEdgeSize: 0.25
|
||||||
|
- _ShadowEdgeSizeExtra: 0.124
|
||||||
|
- _Smoothness: 0.5
|
||||||
|
- _SmoothnessTextureChannel: 0
|
||||||
|
- _SpecularEnabled: 0
|
||||||
|
- _SpecularHighlights: 1
|
||||||
|
- _SrcBlend: 1
|
||||||
|
- _SrcBlendAlpha: 1
|
||||||
|
- _Surface: 0
|
||||||
|
- _TextureBlendingMode: 0
|
||||||
|
- _TextureImpact: 1
|
||||||
|
- _UVSec: 0
|
||||||
|
- _UnityShadowMode: 0
|
||||||
|
- _UnityShadowOcclusion: 0
|
||||||
|
- _UnityShadowPower: 0.2
|
||||||
|
- _UnityShadowSharpness: 1
|
||||||
|
- _VertexColorsEnabled: 0
|
||||||
|
- _VertexExtrusionSmoothNormals: 0
|
||||||
|
- _WorkflowMode: 1
|
||||||
|
- _XRMotionVectorsPass: 1
|
||||||
|
- _ZWrite: 1
|
||||||
|
m_Colors:
|
||||||
|
- _BaseColor: {r: 1, g: 0, b: 0, a: 1}
|
||||||
|
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _ColorDim: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
- _ColorDimCurve: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _ColorDimExtra: {r: 1, g: 0, b: 0, a: 1}
|
||||||
|
- _ColorDimSteps: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
- _ColorGradient: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _DetailMapColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
- _FlatRimColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
- _FlatSpecularColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _LightmapDirection: {r: 0, g: 1, b: 0, a: 0}
|
||||||
|
- _OutlineColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
||||||
|
- _UnityShadowColor: {r: 0.85023, g: 0.85034, b: 0.8504499, a: 0.85056}
|
||||||
|
m_BuildTextureStacks: []
|
||||||
|
m_AllowLocking: 1
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 6a8d9e46e46bff3418a222db6f5786a5
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 2100000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
127
Assets/Prefabs/EnemyPortal.prefab
Normal file
127
Assets/Prefabs/EnemyPortal.prefab
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!1 &3432047510330746227
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 228462577495887354}
|
||||||
|
- component: {fileID: 6859825394817103090}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: EnemyPortal
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!4 &228462577495887354
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 3432047510330746227}
|
||||||
|
serializedVersion: 2
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: -19.4593, y: 1.00002, z: -58.8717}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children:
|
||||||
|
- {fileID: 1144932316349886388}
|
||||||
|
m_Father: {fileID: 0}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
--- !u!114 &6859825394817103090
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 3432047510330746227}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: cb91abd3aae74d941a739a48aefb74a1, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Assembly-CSharp::EnemyPortal
|
||||||
|
Enemies:
|
||||||
|
- {fileID: 5176576196123937037, guid: 951b69041a2ace947afd721fefb3eaba, type: 3}
|
||||||
|
--- !u!1001 &606055883085645919
|
||||||
|
PrefabInstance:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Modification:
|
||||||
|
serializedVersion: 3
|
||||||
|
m_TransformParent: {fileID: 228462577495887354}
|
||||||
|
m_Modifications:
|
||||||
|
- target: {fileID: -8679921383154817045, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_LocalScale.x
|
||||||
|
value: 10
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_LocalScale.y
|
||||||
|
value: 10
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_LocalScale.z
|
||||||
|
value: 10
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_LocalPosition.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_LocalPosition.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_LocalPosition.z
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_LocalRotation.w
|
||||||
|
value: 1
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_LocalRotation.x
|
||||||
|
value: 0.00000008146034
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_LocalRotation.y
|
||||||
|
value: -0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_LocalRotation.z
|
||||||
|
value: -0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_LocalEulerAnglesHint.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_LocalEulerAnglesHint.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_LocalEulerAnglesHint.z
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -7511558181221131132, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: 'm_Materials.Array.data[0]'
|
||||||
|
value:
|
||||||
|
objectReference: {fileID: 2100000, guid: 6a8d9e46e46bff3418a222db6f5786a5, type: 2}
|
||||||
|
- target: {fileID: 919132149155446097, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_Name
|
||||||
|
value: wall_straight_gate
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
m_RemovedComponents: []
|
||||||
|
m_RemovedGameObjects: []
|
||||||
|
m_AddedGameObjects: []
|
||||||
|
m_AddedComponents: []
|
||||||
|
m_SourcePrefab: {fileID: 100100000, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
--- !u!4 &1144932316349886388 stripped
|
||||||
|
Transform:
|
||||||
|
m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
m_PrefabInstance: {fileID: 606055883085645919}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
7
Assets/Prefabs/EnemyPortal.prefab.meta
Normal file
7
Assets/Prefabs/EnemyPortal.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 11e3760dda2c0164abf759c18d918893
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -9,7 +9,7 @@ GameObject:
|
|||||||
serializedVersion: 6
|
serializedVersion: 6
|
||||||
m_Component:
|
m_Component:
|
||||||
- component: {fileID: 9184257640407244267}
|
- component: {fileID: 9184257640407244267}
|
||||||
m_Layer: 0
|
m_Layer: 9
|
||||||
m_Name: FrontExitPoint
|
m_Name: FrontExitPoint
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
m_Icon: {fileID: 0}
|
m_Icon: {fileID: 0}
|
||||||
@@ -40,7 +40,7 @@ GameObject:
|
|||||||
serializedVersion: 6
|
serializedVersion: 6
|
||||||
m_Component:
|
m_Component:
|
||||||
- component: {fileID: 1475778514072803484}
|
- component: {fileID: 1475778514072803484}
|
||||||
m_Layer: 0
|
m_Layer: 9
|
||||||
m_Name: BackExitPoint
|
m_Name: BackExitPoint
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
m_Icon: {fileID: 0}
|
m_Icon: {fileID: 0}
|
||||||
@@ -78,8 +78,7 @@ GameObject:
|
|||||||
- component: {fileID: 6336968390548483685}
|
- component: {fileID: 6336968390548483685}
|
||||||
- component: {fileID: 1893682255695519596}
|
- component: {fileID: 1893682255695519596}
|
||||||
- component: {fileID: 2622677457934171119}
|
- component: {fileID: 2622677457934171119}
|
||||||
- component: {fileID: 2624539771375861302}
|
m_Layer: 9
|
||||||
m_Layer: 0
|
|
||||||
m_Name: Gate
|
m_Name: Gate
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
m_Icon: {fileID: 0}
|
m_Icon: {fileID: 0}
|
||||||
@@ -137,7 +136,7 @@ NavMeshObstacle:
|
|||||||
m_Shape: 1
|
m_Shape: 1
|
||||||
m_Extents: {x: 4, y: 4, z: 1.5}
|
m_Extents: {x: 4, y: 4, z: 1.5}
|
||||||
m_MoveThreshold: 0.1
|
m_MoveThreshold: 0.1
|
||||||
m_Carve: 0
|
m_Carve: 1
|
||||||
m_CarveOnlyStationary: 1
|
m_CarveOnlyStationary: 1
|
||||||
m_Center: {x: 0, y: 0, z: 0}
|
m_Center: {x: 0, y: 0, z: 0}
|
||||||
m_TimeToStationary: 0.5
|
m_TimeToStationary: 0.5
|
||||||
@@ -205,7 +204,7 @@ MonoBehaviour:
|
|||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.Building
|
m_EditorClassIdentifier: Assembly-CSharp::Northbound.Building
|
||||||
ShowTopMostFoldoutHeaderGroup: 1
|
ShowTopMostFoldoutHeaderGroup: 1
|
||||||
buildingData: {fileID: 0}
|
buildingData: {fileID: 11400000, guid: 0e495d169ee3bce449f4b1aea83d6818, type: 2}
|
||||||
gridPosition: {x: 0, y: 0, z: 0}
|
gridPosition: {x: 0, y: 0, z: 0}
|
||||||
rotation: 0
|
rotation: 0
|
||||||
initialTeam: 1
|
initialTeam: 1
|
||||||
@@ -260,31 +259,6 @@ BoxCollider:
|
|||||||
serializedVersion: 3
|
serializedVersion: 3
|
||||||
m_Size: {x: 8, y: 8, z: 1}
|
m_Size: {x: 8, y: 8, z: 1}
|
||||||
m_Center: {x: 0, y: 0, z: 2}
|
m_Center: {x: 0, y: 0, z: 2}
|
||||||
--- !u!114 &2624539771375861302
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 2998551506809628252}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_EditorHideFlags: 0
|
|
||||||
m_Script: {fileID: 11500000, guid: 6eeb5dc026fdf4b488bc7ae0138ab719, type: 3}
|
|
||||||
m_Name:
|
|
||||||
m_EditorClassIdentifier: Unity.AI.Navigation::Unity.AI.Navigation.NavMeshLink
|
|
||||||
m_SerializedVersion: 1
|
|
||||||
m_AgentTypeID: 0
|
|
||||||
m_StartPoint: {x: 0, y: 0, z: -2.5}
|
|
||||||
m_EndPoint: {x: 0, y: 0, z: 2.5}
|
|
||||||
m_StartTransform: {fileID: 0}
|
|
||||||
m_EndTransform: {fileID: 0}
|
|
||||||
m_Activated: 1
|
|
||||||
m_Width: 0
|
|
||||||
m_CostModifier: 1
|
|
||||||
m_IsOverridingCost: 0
|
|
||||||
m_Bidirectional: 1
|
|
||||||
m_AutoUpdatePosition: 0
|
|
||||||
m_Area: 0
|
|
||||||
--- !u!1001 &665699090875585891
|
--- !u!1001 &665699090875585891
|
||||||
PrefabInstance:
|
PrefabInstance:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -349,10 +323,22 @@ PrefabInstance:
|
|||||||
propertyPath: 'm_Materials.Array.data[0]'
|
propertyPath: 'm_Materials.Array.data[0]'
|
||||||
value:
|
value:
|
||||||
objectReference: {fileID: 2100000, guid: 91e05bbf1e5cbfb4d865c8e2febc4673, type: 2}
|
objectReference: {fileID: 2100000, guid: 91e05bbf1e5cbfb4d865c8e2febc4673, type: 2}
|
||||||
|
- target: {fileID: -4677237296440866189, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_Layer
|
||||||
|
value: 9
|
||||||
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 919132149155446097, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
- target: {fileID: 919132149155446097, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
propertyPath: m_Name
|
propertyPath: m_Name
|
||||||
value: wall_straight_gate
|
value: wall_straight_gate
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 919132149155446097, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_Layer
|
||||||
|
value: 9
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 1046628172763319773, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_Layer
|
||||||
|
value: 9
|
||||||
|
objectReference: {fileID: 0}
|
||||||
m_RemovedComponents: []
|
m_RemovedComponents: []
|
||||||
m_RemovedGameObjects: []
|
m_RemovedGameObjects: []
|
||||||
m_AddedGameObjects: []
|
m_AddedGameObjects: []
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ Transform:
|
|||||||
m_GameObject: {fileID: 5176576196123937037}
|
m_GameObject: {fileID: 5176576196123937037}
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
m_LocalPosition: {x: 0, y: 1, z: -20.95}
|
m_LocalPosition: {x: 0, y: 1, z: 0}
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
@@ -107,7 +107,7 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3}
|
m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.NetworkObject
|
m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.NetworkObject
|
||||||
GlobalObjectIdHash: 1957460564
|
GlobalObjectIdHash: 1279840896
|
||||||
InScenePlacedSourceGlobalObjectIdHash: 0
|
InScenePlacedSourceGlobalObjectIdHash: 0
|
||||||
DeferredDespawnTick: 0
|
DeferredDespawnTick: 0
|
||||||
Ownership: 1
|
Ownership: 1
|
||||||
@@ -148,7 +148,7 @@ NavMeshAgent:
|
|||||||
m_Enabled: 1
|
m_Enabled: 1
|
||||||
m_AgentTypeID: 0
|
m_AgentTypeID: 0
|
||||||
m_Radius: 3.2048812
|
m_Radius: 3.2048812
|
||||||
m_Speed: 7.93
|
m_Speed: 5
|
||||||
m_Acceleration: 8
|
m_Acceleration: 8
|
||||||
avoidancePriority: 50
|
avoidancePriority: 50
|
||||||
m_AngularSpeed: 120
|
m_AngularSpeed: 120
|
||||||
@@ -174,20 +174,20 @@ MonoBehaviour:
|
|||||||
m_EditorClassIdentifier: Assembly-CSharp::Northbound.EnemyAIController
|
m_EditorClassIdentifier: Assembly-CSharp::Northbound.EnemyAIController
|
||||||
ShowTopMostFoldoutHeaderGroup: 1
|
ShowTopMostFoldoutHeaderGroup: 1
|
||||||
aiType: 3
|
aiType: 3
|
||||||
detectionRange: 10
|
detectionRange: 6
|
||||||
detectionAngle: 360
|
detectionAngle: 360
|
||||||
playerLayer:
|
playerLayer:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
m_Bits: 512
|
m_Bits: 512
|
||||||
obstacleLayer:
|
obstacleLayer:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
m_Bits: 4294967295
|
m_Bits: 640
|
||||||
maxChaseDistance: 30
|
maxChaseDistance: 30
|
||||||
chaseGiveUpDistance: 25
|
chaseGiveUpDistance: 25
|
||||||
attackRange: 5
|
attackRange: 5
|
||||||
attackInterval: 1.5
|
attackInterval: 1.5
|
||||||
attackDamage: 10
|
attackDamage: 50
|
||||||
moveSpeed: 3.5
|
moveSpeed: 5
|
||||||
chaseSpeedMultiplier: 1.2
|
chaseSpeedMultiplier: 1.2
|
||||||
showDebugInfo: 1
|
showDebugInfo: 1
|
||||||
--- !u!136 &795251864369751459
|
--- !u!136 &795251864369751459
|
||||||
|
|||||||
@@ -11,7 +11,9 @@ GameObject:
|
|||||||
- component: {fileID: 5749230937810543840}
|
- component: {fileID: 5749230937810543840}
|
||||||
- component: {fileID: 4564973829688190844}
|
- component: {fileID: 4564973829688190844}
|
||||||
- component: {fileID: 2599592318476693256}
|
- component: {fileID: 2599592318476693256}
|
||||||
m_Layer: 0
|
- component: {fileID: 1907881863544148932}
|
||||||
|
- component: {fileID: 3214893598090363914}
|
||||||
|
m_Layer: 9
|
||||||
m_Name: Wall
|
m_Name: Wall
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
m_Icon: {fileID: 0}
|
m_Icon: {fileID: 0}
|
||||||
@@ -67,10 +69,61 @@ NavMeshObstacle:
|
|||||||
m_Shape: 1
|
m_Shape: 1
|
||||||
m_Extents: {x: 4, y: 4, z: 1.5}
|
m_Extents: {x: 4, y: 4, z: 1.5}
|
||||||
m_MoveThreshold: 0.1
|
m_MoveThreshold: 0.1
|
||||||
m_Carve: 0
|
m_Carve: 1
|
||||||
m_CarveOnlyStationary: 1
|
m_CarveOnlyStationary: 1
|
||||||
m_Center: {x: 0, y: 0, z: 0}
|
m_Center: {x: 0, y: 0, z: 0}
|
||||||
m_TimeToStationary: 0.5
|
m_TimeToStationary: 0
|
||||||
|
--- !u!114 &1907881863544148932
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 351020651857757465}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.NetworkObject
|
||||||
|
GlobalObjectIdHash: 1061286994
|
||||||
|
InScenePlacedSourceGlobalObjectIdHash: 1061286994
|
||||||
|
DeferredDespawnTick: 0
|
||||||
|
Ownership: 1
|
||||||
|
AlwaysReplicateAsRoot: 0
|
||||||
|
SynchronizeTransform: 1
|
||||||
|
ActiveSceneSynchronization: 0
|
||||||
|
SceneMigrationSynchronization: 0
|
||||||
|
SpawnWithObservers: 1
|
||||||
|
DontDestroyWithOwner: 0
|
||||||
|
AutoObjectParentSync: 1
|
||||||
|
SyncOwnerTransformWhenParented: 1
|
||||||
|
AllowOwnerToParent: 0
|
||||||
|
--- !u!114 &3214893598090363914
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 351020651857757465}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 0ceedb9b012d848478813136b65738ae, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Assembly-CSharp::Northbound.Building
|
||||||
|
ShowTopMostFoldoutHeaderGroup: 1
|
||||||
|
buildingData: {fileID: 11400000, guid: 0e495d169ee3bce449f4b1aea83d6818, type: 2}
|
||||||
|
gridPosition: {x: 0, y: 0, z: 0}
|
||||||
|
rotation: 0
|
||||||
|
initialTeam: 1
|
||||||
|
initialOwnerId: 1
|
||||||
|
useInitialOwner: 1
|
||||||
|
showHealthBar: 1
|
||||||
|
healthBarPrefab: {fileID: 0}
|
||||||
|
destroyEffectPrefab: {fileID: 0}
|
||||||
|
damageEffectPrefab: {fileID: 0}
|
||||||
|
effectSpawnPoint: {fileID: 0}
|
||||||
|
showGridBounds: 1
|
||||||
|
gridBoundsColor: {r: 0, g: 1, b: 1, a: 1}
|
||||||
--- !u!1001 &8926581783111832504
|
--- !u!1001 &8926581783111832504
|
||||||
PrefabInstance:
|
PrefabInstance:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -139,6 +192,10 @@ PrefabInstance:
|
|||||||
propertyPath: m_Name
|
propertyPath: m_Name
|
||||||
value: wall_straight
|
value: wall_straight
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 919132149155446097, guid: 19a9a3527b4bd784f9c2c298374a843d, type: 3}
|
||||||
|
propertyPath: m_Layer
|
||||||
|
value: 9
|
||||||
|
objectReference: {fileID: 0}
|
||||||
m_RemovedComponents: []
|
m_RemovedComponents: []
|
||||||
m_RemovedGameObjects: []
|
m_RemovedGameObjects: []
|
||||||
m_AddedGameObjects: []
|
m_AddedGameObjects: []
|
||||||
|
|||||||
@@ -164,6 +164,14 @@ PrefabInstance:
|
|||||||
propertyPath: m_Name
|
propertyPath: m_Name
|
||||||
value: Wall (6)
|
value: Wall (6)
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 351020651857757465, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: m_StaticEditorFlags
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 1907881863544148932, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: GlobalObjectIdHash
|
||||||
|
value: 1401823836
|
||||||
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 5749230937810543840, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
- target: {fileID: 5749230937810543840, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
propertyPath: m_LocalPosition.x
|
propertyPath: m_LocalPosition.x
|
||||||
value: 66
|
value: 66
|
||||||
@@ -204,12 +212,8 @@ PrefabInstance:
|
|||||||
propertyPath: m_LocalEulerAnglesHint.z
|
propertyPath: m_LocalEulerAnglesHint.z
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 8965311896012452947, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
- target: {fileID: 8584141298868924137, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
propertyPath: m_LocalPosition.x
|
propertyPath: m_StaticEditorFlags
|
||||||
value: 0
|
|
||||||
objectReference: {fileID: 0}
|
|
||||||
- target: {fileID: 8965311896012452947, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
|
||||||
propertyPath: m_LocalPosition.z
|
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
m_RemovedComponents: []
|
m_RemovedComponents: []
|
||||||
@@ -222,6 +226,79 @@ Transform:
|
|||||||
m_CorrespondingSourceObject: {fileID: 5749230937810543840, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
m_CorrespondingSourceObject: {fileID: 5749230937810543840, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
m_PrefabInstance: {fileID: 97216554}
|
m_PrefabInstance: {fileID: 97216554}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
--- !u!1001 &182965999
|
||||||
|
PrefabInstance:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Modification:
|
||||||
|
serializedVersion: 3
|
||||||
|
m_TransformParent: {fileID: 1988388203}
|
||||||
|
m_Modifications:
|
||||||
|
- target: {fileID: -8679921383154817045, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_LocalScale.x
|
||||||
|
value: 10
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_LocalScale.y
|
||||||
|
value: 10
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_LocalScale.z
|
||||||
|
value: 10
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_LocalPosition.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_LocalPosition.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_LocalPosition.z
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_LocalRotation.w
|
||||||
|
value: 1
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_LocalRotation.x
|
||||||
|
value: 0.00000008146034
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_LocalRotation.y
|
||||||
|
value: -0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_LocalRotation.z
|
||||||
|
value: -0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_LocalEulerAnglesHint.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_LocalEulerAnglesHint.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -8679921383154817045, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_LocalEulerAnglesHint.z
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: -7511558181221131132, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: 'm_Materials.Array.data[0]'
|
||||||
|
value:
|
||||||
|
objectReference: {fileID: 2100000, guid: 6a8d9e46e46bff3418a222db6f5786a5, type: 2}
|
||||||
|
- target: {fileID: 919132149155446097, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
propertyPath: m_Name
|
||||||
|
value: wall_straight_gate
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
m_RemovedComponents: []
|
||||||
|
m_RemovedGameObjects: []
|
||||||
|
m_AddedGameObjects: []
|
||||||
|
m_AddedComponents: []
|
||||||
|
m_SourcePrefab: {fileID: 100100000, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
--- !u!1 &306979656
|
--- !u!1 &306979656
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -387,6 +464,22 @@ PrefabInstance:
|
|||||||
propertyPath: m_Name
|
propertyPath: m_Name
|
||||||
value: Wall (2)
|
value: Wall (2)
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 351020651857757465, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: m_Layer
|
||||||
|
value: 9
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 351020651857757465, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: m_StaticEditorFlags
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 1907881863544148932, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: GlobalObjectIdHash
|
||||||
|
value: 1773363615
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 1907881863544148932, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: InScenePlacedSourceGlobalObjectIdHash
|
||||||
|
value: 1061286994
|
||||||
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 5749230937810543840, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
- target: {fileID: 5749230937810543840, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
propertyPath: m_LocalPosition.x
|
propertyPath: m_LocalPosition.x
|
||||||
value: 26
|
value: 26
|
||||||
@@ -427,6 +520,14 @@ PrefabInstance:
|
|||||||
propertyPath: m_LocalEulerAnglesHint.z
|
propertyPath: m_LocalEulerAnglesHint.z
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 8584141298868924137, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: m_Layer
|
||||||
|
value: 9
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 8584141298868924137, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: m_StaticEditorFlags
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 8965311896012452947, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
- target: {fileID: 8965311896012452947, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
propertyPath: m_LocalPosition.x
|
propertyPath: m_LocalPosition.x
|
||||||
value: 0
|
value: 0
|
||||||
@@ -959,6 +1060,30 @@ PrefabInstance:
|
|||||||
serializedVersion: 3
|
serializedVersion: 3
|
||||||
m_TransformParent: {fileID: 1068750869}
|
m_TransformParent: {fileID: 1068750869}
|
||||||
m_Modifications:
|
m_Modifications:
|
||||||
|
- target: {fileID: 431325329827407922, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
|
propertyPath: m_Layer
|
||||||
|
value: 9
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 431325329827407922, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
|
propertyPath: m_StaticEditorFlags
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 529351500009441178, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
|
propertyPath: m_Layer
|
||||||
|
value: 9
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 529351500009441178, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
|
propertyPath: m_StaticEditorFlags
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 557134691980400830, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
|
propertyPath: m_Layer
|
||||||
|
value: 9
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 557134691980400830, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
|
propertyPath: m_StaticEditorFlags
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 2557322720114216881, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
- target: {fileID: 2557322720114216881, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
propertyPath: GlobalObjectIdHash
|
propertyPath: GlobalObjectIdHash
|
||||||
value: 4017687754
|
value: 4017687754
|
||||||
@@ -967,10 +1092,34 @@ PrefabInstance:
|
|||||||
propertyPath: InScenePlacedSourceGlobalObjectIdHash
|
propertyPath: InScenePlacedSourceGlobalObjectIdHash
|
||||||
value: 1171432577
|
value: 1171432577
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2607013536690627895, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
|
propertyPath: m_Layer
|
||||||
|
value: 9
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2607013536690627895, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
|
propertyPath: m_StaticEditorFlags
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 2998551506809628252, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
- target: {fileID: 2998551506809628252, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
propertyPath: m_Name
|
propertyPath: m_Name
|
||||||
value: Gate (1)
|
value: Gate (1)
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2998551506809628252, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
|
propertyPath: m_Layer
|
||||||
|
value: 9
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2998551506809628252, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
|
propertyPath: m_StaticEditorFlags
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 3902954835252584208, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
|
propertyPath: m_Layer
|
||||||
|
value: 9
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 3902954835252584208, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
|
propertyPath: m_StaticEditorFlags
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 7180212943015590733, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
- target: {fileID: 7180212943015590733, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
propertyPath: m_LocalPosition.x
|
propertyPath: m_LocalPosition.x
|
||||||
value: 58
|
value: 58
|
||||||
@@ -1297,6 +1446,18 @@ PrefabInstance:
|
|||||||
propertyPath: m_Name
|
propertyPath: m_Name
|
||||||
value: Wall (4)
|
value: Wall (4)
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 351020651857757465, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: m_Layer
|
||||||
|
value: 9
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 351020651857757465, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: m_StaticEditorFlags
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 1907881863544148932, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: GlobalObjectIdHash
|
||||||
|
value: 844294403
|
||||||
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 5749230937810543840, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
- target: {fileID: 5749230937810543840, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
propertyPath: m_LocalPosition.x
|
propertyPath: m_LocalPosition.x
|
||||||
value: 42
|
value: 42
|
||||||
@@ -1337,12 +1498,12 @@ PrefabInstance:
|
|||||||
propertyPath: m_LocalEulerAnglesHint.z
|
propertyPath: m_LocalEulerAnglesHint.z
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 8965311896012452947, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
- target: {fileID: 8584141298868924137, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
propertyPath: m_LocalPosition.x
|
propertyPath: m_Layer
|
||||||
value: 0
|
value: 9
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 8965311896012452947, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
- target: {fileID: 8584141298868924137, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
propertyPath: m_LocalPosition.z
|
propertyPath: m_StaticEditorFlags
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
m_RemovedComponents: []
|
m_RemovedComponents: []
|
||||||
@@ -1523,7 +1684,7 @@ MonoBehaviour:
|
|||||||
m_LayerMask:
|
m_LayerMask:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
m_Bits: 4294967295
|
m_Bits: 4294967295
|
||||||
m_UseGeometry: 0
|
m_UseGeometry: 1
|
||||||
m_DefaultArea: 0
|
m_DefaultArea: 0
|
||||||
m_GenerateLinks: 0
|
m_GenerateLinks: 0
|
||||||
m_IgnoreNavMeshAgent: 1
|
m_IgnoreNavMeshAgent: 1
|
||||||
@@ -1621,7 +1782,7 @@ GameObject:
|
|||||||
serializedVersion: 6
|
serializedVersion: 6
|
||||||
m_Component:
|
m_Component:
|
||||||
- component: {fileID: 1068750869}
|
- component: {fileID: 1068750869}
|
||||||
m_Layer: 0
|
m_Layer: 9
|
||||||
m_Name: Walls
|
m_Name: Walls
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
m_Icon: {fileID: 0}
|
m_Icon: {fileID: 0}
|
||||||
@@ -1954,7 +2115,7 @@ MonoBehaviour:
|
|||||||
m_DisconnectTimeoutMS: 30000
|
m_DisconnectTimeoutMS: 30000
|
||||||
ConnectionData:
|
ConnectionData:
|
||||||
Address: 127.0.0.1
|
Address: 127.0.0.1
|
||||||
Port: 7790
|
Port: 7834
|
||||||
ServerListenAddress: 127.0.0.1
|
ServerListenAddress: 127.0.0.1
|
||||||
ClientBindPort: 0
|
ClientBindPort: 0
|
||||||
DebugSimulator:
|
DebugSimulator:
|
||||||
@@ -1976,6 +2137,81 @@ MonoBehaviour:
|
|||||||
spawnPoints: []
|
spawnPoints: []
|
||||||
useRandomSpawn: 0
|
useRandomSpawn: 0
|
||||||
findSpawnPointsAutomatically: 1
|
findSpawnPointsAutomatically: 1
|
||||||
|
--- !u!1 &1442785552
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 1442785555}
|
||||||
|
- component: {fileID: 1442785553}
|
||||||
|
- component: {fileID: 1442785554}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: GlobalTimer
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!114 &1442785553
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1442785552}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.NetworkObject
|
||||||
|
GlobalObjectIdHash: 3669992977
|
||||||
|
InScenePlacedSourceGlobalObjectIdHash: 0
|
||||||
|
DeferredDespawnTick: 0
|
||||||
|
Ownership: 1
|
||||||
|
AlwaysReplicateAsRoot: 0
|
||||||
|
SynchronizeTransform: 1
|
||||||
|
ActiveSceneSynchronization: 0
|
||||||
|
SceneMigrationSynchronization: 0
|
||||||
|
SpawnWithObservers: 1
|
||||||
|
DontDestroyWithOwner: 0
|
||||||
|
AutoObjectParentSync: 1
|
||||||
|
SyncOwnerTransformWhenParented: 1
|
||||||
|
AllowOwnerToParent: 0
|
||||||
|
--- !u!114 &1442785554
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1442785552}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: b643f7c446ade3f448e57e7501ac5a67, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Assembly-CSharp::Northbound.GlobalTimer
|
||||||
|
ShowTopMostFoldoutHeaderGroup: 1
|
||||||
|
cycleLength: 1
|
||||||
|
autoStart: 1
|
||||||
|
pauseOnZero: 1
|
||||||
|
showDebugLogs: 1
|
||||||
|
--- !u!4 &1442785555
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1442785552}
|
||||||
|
serializedVersion: 2
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: -20.15257, y: 1.00001, z: 4.73882}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 0}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!1001 &1536695129
|
--- !u!1001 &1536695129
|
||||||
PrefabInstance:
|
PrefabInstance:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -2062,6 +2298,18 @@ PrefabInstance:
|
|||||||
propertyPath: m_Name
|
propertyPath: m_Name
|
||||||
value: Wall (5)
|
value: Wall (5)
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 351020651857757465, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: m_Layer
|
||||||
|
value: 9
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 351020651857757465, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: m_StaticEditorFlags
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 1907881863544148932, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: GlobalObjectIdHash
|
||||||
|
value: 1658241711
|
||||||
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 5749230937810543840, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
- target: {fileID: 5749230937810543840, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
propertyPath: m_LocalPosition.x
|
propertyPath: m_LocalPosition.x
|
||||||
value: 50
|
value: 50
|
||||||
@@ -2102,12 +2350,12 @@ PrefabInstance:
|
|||||||
propertyPath: m_LocalEulerAnglesHint.z
|
propertyPath: m_LocalEulerAnglesHint.z
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 8965311896012452947, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
- target: {fileID: 8584141298868924137, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
propertyPath: m_LocalPosition.x
|
propertyPath: m_Layer
|
||||||
value: 0
|
value: 9
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 8965311896012452947, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
- target: {fileID: 8584141298868924137, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
propertyPath: m_LocalPosition.z
|
propertyPath: m_StaticEditorFlags
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
m_RemovedComponents: []
|
m_RemovedComponents: []
|
||||||
@@ -2202,6 +2450,11 @@ Transform:
|
|||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
--- !u!4 &1577315389 stripped
|
||||||
|
Transform:
|
||||||
|
m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 15f5826a4fa224044bdf0c1c6bc4685b, type: 3}
|
||||||
|
m_PrefabInstance: {fileID: 182965999}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
--- !u!1 &1672828972
|
--- !u!1 &1672828972
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -2309,6 +2562,18 @@ PrefabInstance:
|
|||||||
propertyPath: m_Name
|
propertyPath: m_Name
|
||||||
value: Wall (3)
|
value: Wall (3)
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 351020651857757465, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: m_Layer
|
||||||
|
value: 9
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 351020651857757465, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: m_StaticEditorFlags
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 1907881863544148932, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: GlobalObjectIdHash
|
||||||
|
value: 4240832885
|
||||||
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 5749230937810543840, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
- target: {fileID: 5749230937810543840, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
propertyPath: m_LocalPosition.x
|
propertyPath: m_LocalPosition.x
|
||||||
value: 34
|
value: 34
|
||||||
@@ -2349,12 +2614,12 @@ PrefabInstance:
|
|||||||
propertyPath: m_LocalEulerAnglesHint.z
|
propertyPath: m_LocalEulerAnglesHint.z
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 8965311896012452947, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
- target: {fileID: 8584141298868924137, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
propertyPath: m_LocalPosition.x
|
propertyPath: m_Layer
|
||||||
value: 0
|
value: 9
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 8965311896012452947, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
- target: {fileID: 8584141298868924137, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
propertyPath: m_LocalPosition.z
|
propertyPath: m_StaticEditorFlags
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
m_RemovedComponents: []
|
m_RemovedComponents: []
|
||||||
@@ -2550,6 +2815,18 @@ PrefabInstance:
|
|||||||
propertyPath: m_Name
|
propertyPath: m_Name
|
||||||
value: Wall (7)
|
value: Wall (7)
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 351020651857757465, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: m_Layer
|
||||||
|
value: 9
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 351020651857757465, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: m_StaticEditorFlags
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 1907881863544148932, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: GlobalObjectIdHash
|
||||||
|
value: 1634476936
|
||||||
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 5749230937810543840, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
- target: {fileID: 5749230937810543840, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
propertyPath: m_LocalPosition.x
|
propertyPath: m_LocalPosition.x
|
||||||
value: 74
|
value: 74
|
||||||
@@ -2590,12 +2867,12 @@ PrefabInstance:
|
|||||||
propertyPath: m_LocalEulerAnglesHint.z
|
propertyPath: m_LocalEulerAnglesHint.z
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 8965311896012452947, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
- target: {fileID: 8584141298868924137, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
propertyPath: m_LocalPosition.x
|
propertyPath: m_Layer
|
||||||
value: 0
|
value: 9
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 8965311896012452947, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
- target: {fileID: 8584141298868924137, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
propertyPath: m_LocalPosition.z
|
propertyPath: m_StaticEditorFlags
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
m_RemovedComponents: []
|
m_RemovedComponents: []
|
||||||
@@ -2691,6 +2968,53 @@ PrefabInstance:
|
|||||||
insertIndex: -1
|
insertIndex: -1
|
||||||
addedObject: {fileID: 985764489}
|
addedObject: {fileID: 985764489}
|
||||||
m_SourcePrefab: {fileID: 100100000, guid: 19ca9afdd7bb3a64c9036c18e8cee5f2, type: 3}
|
m_SourcePrefab: {fileID: 100100000, guid: 19ca9afdd7bb3a64c9036c18e8cee5f2, type: 3}
|
||||||
|
--- !u!1 &1988388201
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 1988388203}
|
||||||
|
- component: {fileID: 1988388202}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: EnemyPortal
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!114 &1988388202
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1988388201}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: cb91abd3aae74d941a739a48aefb74a1, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Assembly-CSharp::EnemyPortal
|
||||||
|
Enemies:
|
||||||
|
- {fileID: 5176576196123937037, guid: 951b69041a2ace947afd721fefb3eaba, type: 3}
|
||||||
|
--- !u!4 &1988388203
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1988388201}
|
||||||
|
serializedVersion: 2
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: -19.4593, y: 1.00002, z: -58.8717}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children:
|
||||||
|
- {fileID: 1577315389}
|
||||||
|
m_Father: {fileID: 0}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!1001 &2098115307
|
--- !u!1001 &2098115307
|
||||||
PrefabInstance:
|
PrefabInstance:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -2903,6 +3227,18 @@ PrefabInstance:
|
|||||||
propertyPath: m_Name
|
propertyPath: m_Name
|
||||||
value: Wall
|
value: Wall
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 351020651857757465, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: m_Layer
|
||||||
|
value: 9
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 351020651857757465, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: m_StaticEditorFlags
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 1907881863544148932, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: GlobalObjectIdHash
|
||||||
|
value: 379293221
|
||||||
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 5749230937810543840, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
- target: {fileID: 5749230937810543840, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
propertyPath: m_LocalPosition.x
|
propertyPath: m_LocalPosition.x
|
||||||
value: 2
|
value: 2
|
||||||
@@ -2943,6 +3279,14 @@ PrefabInstance:
|
|||||||
propertyPath: m_LocalEulerAnglesHint.z
|
propertyPath: m_LocalEulerAnglesHint.z
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 8584141298868924137, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: m_Layer
|
||||||
|
value: 9
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 8584141298868924137, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: m_StaticEditorFlags
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
m_RemovedComponents: []
|
m_RemovedComponents: []
|
||||||
m_RemovedGameObjects: []
|
m_RemovedGameObjects: []
|
||||||
m_AddedGameObjects: []
|
m_AddedGameObjects: []
|
||||||
@@ -2969,6 +3313,18 @@ PrefabInstance:
|
|||||||
propertyPath: interactionAnimationTrigger
|
propertyPath: interactionAnimationTrigger
|
||||||
value:
|
value:
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2236804103334722056, guid: e56926eda34629f4fbf3e4c53f0f8bd4, type: 3}
|
||||||
|
propertyPath: m_Size.x
|
||||||
|
value: 8
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2236804103334722056, guid: e56926eda34629f4fbf3e4c53f0f8bd4, type: 3}
|
||||||
|
propertyPath: m_Size.y
|
||||||
|
value: 8
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2236804103334722056, guid: e56926eda34629f4fbf3e4c53f0f8bd4, type: 3}
|
||||||
|
propertyPath: m_Size.z
|
||||||
|
value: 8
|
||||||
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 5173262576415873253, guid: e56926eda34629f4fbf3e4c53f0f8bd4, type: 3}
|
- target: {fileID: 5173262576415873253, guid: e56926eda34629f4fbf3e4c53f0f8bd4, type: 3}
|
||||||
propertyPath: GlobalObjectIdHash
|
propertyPath: GlobalObjectIdHash
|
||||||
value: 3998537868
|
value: 3998537868
|
||||||
@@ -3095,6 +3451,22 @@ PrefabInstance:
|
|||||||
propertyPath: m_Name
|
propertyPath: m_Name
|
||||||
value: Wall (1)
|
value: Wall (1)
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 351020651857757465, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: m_Layer
|
||||||
|
value: 9
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 351020651857757465, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: m_StaticEditorFlags
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 1907881863544148932, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: GlobalObjectIdHash
|
||||||
|
value: 649830493
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 1907881863544148932, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: InScenePlacedSourceGlobalObjectIdHash
|
||||||
|
value: 1061286994
|
||||||
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 5749230937810543840, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
- target: {fileID: 5749230937810543840, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
propertyPath: m_LocalPosition.x
|
propertyPath: m_LocalPosition.x
|
||||||
value: 10
|
value: 10
|
||||||
@@ -3135,6 +3507,14 @@ PrefabInstance:
|
|||||||
propertyPath: m_LocalEulerAnglesHint.z
|
propertyPath: m_LocalEulerAnglesHint.z
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 8584141298868924137, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: m_Layer
|
||||||
|
value: 9
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 8584141298868924137, guid: 88f7f1e8a019b674498ab5fd494c1d34, type: 3}
|
||||||
|
propertyPath: m_StaticEditorFlags
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
m_RemovedComponents: []
|
m_RemovedComponents: []
|
||||||
m_RemovedGameObjects: []
|
m_RemovedGameObjects: []
|
||||||
m_AddedGameObjects: []
|
m_AddedGameObjects: []
|
||||||
@@ -3164,14 +3544,62 @@ PrefabInstance:
|
|||||||
serializedVersion: 3
|
serializedVersion: 3
|
||||||
m_TransformParent: {fileID: 1068750869}
|
m_TransformParent: {fileID: 1068750869}
|
||||||
m_Modifications:
|
m_Modifications:
|
||||||
|
- target: {fileID: 431325329827407922, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
|
propertyPath: m_Layer
|
||||||
|
value: 9
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 431325329827407922, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
|
propertyPath: m_StaticEditorFlags
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 529351500009441178, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
|
propertyPath: m_Layer
|
||||||
|
value: 9
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 529351500009441178, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
|
propertyPath: m_StaticEditorFlags
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 557134691980400830, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
|
propertyPath: m_Layer
|
||||||
|
value: 9
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 557134691980400830, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
|
propertyPath: m_StaticEditorFlags
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 2557322720114216881, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
- target: {fileID: 2557322720114216881, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
propertyPath: GlobalObjectIdHash
|
propertyPath: GlobalObjectIdHash
|
||||||
value: 2819059600
|
value: 2819059600
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2607013536690627895, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
|
propertyPath: m_Layer
|
||||||
|
value: 9
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2607013536690627895, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
|
propertyPath: m_StaticEditorFlags
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 2998551506809628252, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
- target: {fileID: 2998551506809628252, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
propertyPath: m_Name
|
propertyPath: m_Name
|
||||||
value: Gate
|
value: Gate
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2998551506809628252, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
|
propertyPath: m_Layer
|
||||||
|
value: 9
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 2998551506809628252, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
|
propertyPath: m_StaticEditorFlags
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 3902954835252584208, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
|
propertyPath: m_Layer
|
||||||
|
value: 9
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 3902954835252584208, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
|
propertyPath: m_StaticEditorFlags
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
- target: {fileID: 7180212943015590733, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
- target: {fileID: 7180212943015590733, guid: 1be692ccde46d2a4baedc2ee75fbfbdb, type: 3}
|
||||||
propertyPath: m_LocalPosition.x
|
propertyPath: m_LocalPosition.x
|
||||||
value: 18
|
value: 18
|
||||||
@@ -3243,3 +3671,5 @@ SceneRoots:
|
|||||||
- {fileID: 1701756768}
|
- {fileID: 1701756768}
|
||||||
- {fileID: 2264374033617737844}
|
- {fileID: 2264374033617737844}
|
||||||
- {fileID: 1572384099}
|
- {fileID: 1572384099}
|
||||||
|
- {fileID: 1442785555}
|
||||||
|
- {fileID: 1988388203}
|
||||||
|
|||||||
Binary file not shown.
@@ -174,8 +174,6 @@ namespace Northbound
|
|||||||
{
|
{
|
||||||
DetachWeapon();
|
DetachWeapon();
|
||||||
}
|
}
|
||||||
|
|
||||||
Debug.Log("[AttackAction] 공격 완료");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ========================================
|
// ========================================
|
||||||
@@ -199,8 +197,6 @@ namespace Northbound
|
|||||||
string socket = socketName ?? equipmentData.socketName;
|
string socket = socketName ?? equipmentData.socketName;
|
||||||
_equipmentSocket.AttachToSocket(socket, equipmentData.equipmentPrefab);
|
_equipmentSocket.AttachToSocket(socket, equipmentData.equipmentPrefab);
|
||||||
_isWeaponEquipped = true;
|
_isWeaponEquipped = true;
|
||||||
|
|
||||||
Debug.Log($"[AttackAction] 무기 장착: {socket}");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DetachWeapon(string socketName = null)
|
private void DetachWeapon(string socketName = null)
|
||||||
@@ -214,8 +210,6 @@ namespace Northbound
|
|||||||
{
|
{
|
||||||
_equipmentSocket.DetachFromSocket(socket);
|
_equipmentSocket.DetachFromSocket(socket);
|
||||||
_isWeaponEquipped = false;
|
_isWeaponEquipped = false;
|
||||||
|
|
||||||
Debug.Log($"[AttackAction] 무기 해제: {socket}");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using Unity.Netcode;
|
using Unity.Netcode;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.AI;
|
using UnityEngine.AI;
|
||||||
|
using System.Collections;
|
||||||
|
|
||||||
namespace Northbound
|
namespace Northbound
|
||||||
{
|
{
|
||||||
@@ -18,38 +19,38 @@ namespace Northbound
|
|||||||
[Header("Detection")]
|
[Header("Detection")]
|
||||||
[Tooltip("플레이어 감지 범위")]
|
[Tooltip("플레이어 감지 범위")]
|
||||||
public float detectionRange = 15f;
|
public float detectionRange = 15f;
|
||||||
|
|
||||||
[Tooltip("시야 각도 (0-360, 360=전방향)")]
|
[Tooltip("시야 각도 (0-360, 360=전방향)")]
|
||||||
[Range(0, 360)]
|
[Range(0, 360)]
|
||||||
public float detectionAngle = 120f;
|
public float detectionAngle = 120f;
|
||||||
|
|
||||||
[Tooltip("탐지할 레이어")]
|
[Tooltip("탐지할 레이어")]
|
||||||
public LayerMask playerLayer = ~0;
|
public LayerMask playerLayer = ~0;
|
||||||
|
|
||||||
[Tooltip("시야 체크 장애물 레이어")]
|
[Tooltip("시야 체크 장애물 레이어")]
|
||||||
public LayerMask obstacleLayer = ~0;
|
public LayerMask obstacleLayer = ~0;
|
||||||
|
|
||||||
[Header("Chase Settings")]
|
[Header("Chase Settings")]
|
||||||
[Tooltip("추적 최대 거리 (이 거리 이상 추적하면 중단)")]
|
[Tooltip("추적 최대 거리 (이 거리 이상 추적하면 중단)")]
|
||||||
public float maxChaseDistance = 30f;
|
public float maxChaseDistance = 30f;
|
||||||
|
|
||||||
[Tooltip("추적 포기 거리 (플레이어와 이 거리 이상 멀어지면 추적 중단)")]
|
[Tooltip("추적 포기 거리 (플레이어와 이 거리 이상 멀어지면 추적 중단)")]
|
||||||
public float chaseGiveUpDistance = 25f;
|
public float chaseGiveUpDistance = 25f;
|
||||||
|
|
||||||
[Header("Combat")]
|
[Header("Combat")]
|
||||||
[Tooltip("공격 범위")]
|
[Tooltip("공격 범위")]
|
||||||
public float attackRange = 2f;
|
public float attackRange = 2f;
|
||||||
|
|
||||||
[Tooltip("공격 간격 (초)")]
|
[Tooltip("공격 간격 (초)")]
|
||||||
public float attackInterval = 1.5f;
|
public float attackInterval = 1.5f;
|
||||||
|
|
||||||
[Tooltip("공격 데미지")]
|
[Tooltip("공격 데미지")]
|
||||||
public int attackDamage = 10;
|
public int attackDamage = 10;
|
||||||
|
|
||||||
[Header("Movement")]
|
[Header("Movement")]
|
||||||
[Tooltip("이동 속도")]
|
[Tooltip("이동 속도")]
|
||||||
public float moveSpeed = 3.5f;
|
public float moveSpeed = 3.5f;
|
||||||
|
|
||||||
[Tooltip("추적 중 속도 배율")]
|
[Tooltip("추적 중 속도 배율")]
|
||||||
public float chaseSpeedMultiplier = 1.5f;
|
public float chaseSpeedMultiplier = 1.5f;
|
||||||
|
|
||||||
@@ -66,6 +67,7 @@ namespace Northbound
|
|||||||
private float _lastAttackTime;
|
private float _lastAttackTime;
|
||||||
private bool _hasSetCoreDestination;
|
private bool _hasSetCoreDestination;
|
||||||
private float _lastDetectionLogTime;
|
private float _lastDetectionLogTime;
|
||||||
|
private bool _isRecalculatingPath = false; // NavMesh 갱신 대기 플래그
|
||||||
|
|
||||||
private NetworkVariable<EnemyAIState> _currentState = new NetworkVariable<EnemyAIState>(
|
private NetworkVariable<EnemyAIState> _currentState = new NetworkVariable<EnemyAIState>(
|
||||||
EnemyAIState.Idle,
|
EnemyAIState.Idle,
|
||||||
@@ -100,17 +102,11 @@ namespace Northbound
|
|||||||
_agent.updateRotation = true;
|
_agent.updateRotation = true;
|
||||||
_agent.updateUpAxis = false;
|
_agent.updateUpAxis = false;
|
||||||
|
|
||||||
// NavMesh 위에 있는지 확인
|
|
||||||
if (!_agent.isOnNavMesh)
|
if (!_agent.isOnNavMesh)
|
||||||
{
|
{
|
||||||
Debug.LogWarning($"<color=orange>[EnemyAI] {gameObject.name}이(가) NavMesh 위에 있지 않습니다!</color>");
|
Debug.LogWarning($"<color=orange>[EnemyAI] {gameObject.name}이(가) NavMesh 위에 있지 않습니다!</color>");
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.Log($"<color=green>[EnemyAI] {gameObject.name} NavMeshAgent 초기화 완료</color>");
|
|
||||||
}
|
|
||||||
|
|
||||||
// AI 타입에 따라 초기 상태 설정
|
|
||||||
if (aiType == TeamType.Monster)
|
if (aiType == TeamType.Monster)
|
||||||
{
|
{
|
||||||
FindCore();
|
FindCore();
|
||||||
@@ -130,21 +126,11 @@ namespace Northbound
|
|||||||
|
|
||||||
switch (_currentState.Value)
|
switch (_currentState.Value)
|
||||||
{
|
{
|
||||||
case EnemyAIState.Idle:
|
case EnemyAIState.Idle: UpdateIdle(); break;
|
||||||
UpdateIdle();
|
case EnemyAIState.MoveToCore: UpdateMoveToCore(); break;
|
||||||
break;
|
case EnemyAIState.ChasePlayer: UpdateChasePlayer(); break;
|
||||||
case EnemyAIState.MoveToCore:
|
case EnemyAIState.Attack: UpdateAttack(); break;
|
||||||
UpdateMoveToCore();
|
case EnemyAIState.ReturnToOrigin: UpdateReturnToOrigin(); break;
|
||||||
break;
|
|
||||||
case EnemyAIState.ChasePlayer:
|
|
||||||
UpdateChasePlayer();
|
|
||||||
break;
|
|
||||||
case EnemyAIState.Attack:
|
|
||||||
UpdateAttack();
|
|
||||||
break;
|
|
||||||
case EnemyAIState.ReturnToOrigin:
|
|
||||||
UpdateReturnToOrigin();
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -152,7 +138,7 @@ namespace Northbound
|
|||||||
|
|
||||||
private void UpdateIdle()
|
private void UpdateIdle()
|
||||||
{
|
{
|
||||||
GameObject player = DetectPlayer();
|
GameObject player = DetectTarget();
|
||||||
if (player != null)
|
if (player != null)
|
||||||
{
|
{
|
||||||
SetTargetPlayer(player);
|
SetTargetPlayer(player);
|
||||||
@@ -162,89 +148,67 @@ namespace Northbound
|
|||||||
|
|
||||||
private void UpdateMoveToCore()
|
private void UpdateMoveToCore()
|
||||||
{
|
{
|
||||||
// 플레이어 감지
|
if (_isRecalculatingPath) return; // 코루틴 대기 중이면 중단
|
||||||
GameObject player = DetectPlayer();
|
if (_coreTransform == null) { FindCore(); return; }
|
||||||
if (player != null)
|
|
||||||
|
// 1. 코어로 가는 경로가 '완전(Complete)'한지 먼저 확인
|
||||||
|
// NavMesh가 갱신되었다면 에이전트는 즉시 Complete 상태가 됩니다.
|
||||||
|
if (_agent.hasPath && _agent.pathStatus == NavMeshPathStatus.PathComplete)
|
||||||
{
|
{
|
||||||
SetTargetPlayer(player);
|
if (!_hasSetCoreDestination)
|
||||||
TransitionToState(EnemyAIState.ChasePlayer);
|
{
|
||||||
|
_agent.SetDestination(_coreTransform.position);
|
||||||
|
_hasSetCoreDestination = true;
|
||||||
|
}
|
||||||
|
// [중요] 길이 열렸으므로 아래의 장애물 탐지 로직을 아예 실행하지 않고 리턴!
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 코어가 없으면 찾기
|
// 2. 코어 도달 확인
|
||||||
if (_coreTransform == null)
|
if (GetDistanceToCoreSurface() <= attackRange)
|
||||||
{
|
|
||||||
FindCore();
|
|
||||||
_hasSetCoreDestination = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 코어 표면까지의 실제 거리 계산
|
|
||||||
float distanceToCore = GetDistanceToCoreSurface();
|
|
||||||
|
|
||||||
// 공격 범위 안에 있으면 공격 상태로 전환
|
|
||||||
if (distanceToCore <= attackRange)
|
|
||||||
{
|
{
|
||||||
TransitionToState(EnemyAIState.Attack);
|
TransitionToState(EnemyAIState.Attack);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 경로가 설정되지 않았거나 무효화된 경우에만 설정
|
// 3. 길이 막혔을 때(Partial)만 아주 좁은 범위에서 장애물을 찾음
|
||||||
if (!_hasSetCoreDestination || !_agent.hasPath || _agent.pathStatus == NavMeshPathStatus.PathInvalid)
|
GameObject obstacle = DetectObstacle();
|
||||||
|
if (obstacle != null)
|
||||||
{
|
{
|
||||||
if (_agent.SetDestination(_coreTransform.position))
|
SetTargetPlayer(obstacle);
|
||||||
{
|
TransitionToState(EnemyAIState.Attack);
|
||||||
_hasSetCoreDestination = true;
|
return;
|
||||||
|
}
|
||||||
if (showDebugInfo)
|
|
||||||
{
|
// 4. 경로가 유효하지 않을 때만 재설정
|
||||||
Debug.Log($"<color=cyan>[EnemyAI] {gameObject.name} 코어로 경로 설정 (표면 거리: {distanceToCore:F2}m, 공격범위: {attackRange:F2}m)</color>");
|
if (!_agent.hasPath || _agent.pathStatus == NavMeshPathStatus.PathInvalid)
|
||||||
}
|
{
|
||||||
}
|
_agent.SetDestination(_coreTransform.position);
|
||||||
else
|
_hasSetCoreDestination = true;
|
||||||
{
|
|
||||||
Debug.LogWarning($"<color=orange>[EnemyAI] {gameObject.name}이(가) 코어로 가는 경로를 찾을 수 없습니다!</color>");
|
|
||||||
_hasSetCoreDestination = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateChasePlayer()
|
private void UpdateChasePlayer()
|
||||||
{
|
{
|
||||||
GameObject targetPlayer = GetTargetPlayer();
|
GameObject targetPlayer = GetTargetPlayer();
|
||||||
|
if (targetPlayer == null) { OnLostTarget(); return; }
|
||||||
if (targetPlayer == null)
|
|
||||||
{
|
|
||||||
OnLostTarget();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
float distanceToPlayer = Vector3.Distance(transform.position, targetPlayer.transform.position);
|
float distanceToPlayer = Vector3.Distance(transform.position, targetPlayer.transform.position);
|
||||||
|
|
||||||
// 추적 기준점 설정
|
|
||||||
Vector3 chaseReferencePoint = (aiType == TeamType.Monster) ? _chaseStartPosition : _originPosition;
|
Vector3 chaseReferencePoint = (aiType == TeamType.Monster) ? _chaseStartPosition : _originPosition;
|
||||||
float distanceFromReference = Vector3.Distance(transform.position, chaseReferencePoint);
|
float distanceFromReference = Vector3.Distance(transform.position, chaseReferencePoint);
|
||||||
|
|
||||||
// 추적 중단 조건 확인
|
|
||||||
if (distanceToPlayer > chaseGiveUpDistance || distanceFromReference > maxChaseDistance)
|
if (distanceToPlayer > chaseGiveUpDistance || distanceFromReference > maxChaseDistance)
|
||||||
{
|
{
|
||||||
if (showDebugInfo)
|
|
||||||
{
|
|
||||||
string referenceType = (aiType == TeamType.Monster) ? "추적 시작" : "원점";
|
|
||||||
Debug.Log($"<color=yellow>[EnemyAI] {gameObject.name}이(가) 추적을 중단합니다. (플레이어 거리: {distanceToPlayer:F2}m, {referenceType} 거리: {distanceFromReference:F2}m)</color>");
|
|
||||||
}
|
|
||||||
OnLostTarget();
|
OnLostTarget();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 공격 범위 확인
|
|
||||||
if (distanceToPlayer <= attackRange)
|
if (distanceToPlayer <= attackRange)
|
||||||
{
|
{
|
||||||
TransitionToState(EnemyAIState.Attack);
|
TransitionToState(EnemyAIState.Attack);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 플레이어 추적 - 매 프레임 업데이트
|
|
||||||
if (_agent.isOnNavMesh && !_agent.isStopped)
|
if (_agent.isOnNavMesh && !_agent.isStopped)
|
||||||
{
|
{
|
||||||
_agent.SetDestination(targetPlayer.transform.position);
|
_agent.SetDestination(targetPlayer.transform.position);
|
||||||
@@ -253,80 +217,48 @@ namespace Northbound
|
|||||||
|
|
||||||
private void UpdateAttack()
|
private void UpdateAttack()
|
||||||
{
|
{
|
||||||
// 코어 공격 중인지 확인
|
GameObject target = GetTargetPlayer();
|
||||||
bool attackingCore = _coreTransform != null &&
|
if (target == null)
|
||||||
GetDistanceToCoreSurface() <= attackRange * 1.2f;
|
|
||||||
|
|
||||||
if (attackingCore)
|
|
||||||
{
|
{
|
||||||
float distanceToCore = GetDistanceToCoreSurface();
|
if (showDebugInfo) Debug.Log("<color=red>[EnemyAI] 타겟 상실 - 상태 해제</color>");
|
||||||
|
OnLostTarget();
|
||||||
if (distanceToCore > attackRange * 1.2f)
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 핵심: ClosestPoint를 사용해 '벽 표면'까지의 실제 거리 계산
|
||||||
|
float distance = GetDistanceToTarget(target);
|
||||||
|
|
||||||
|
// 코어 혹은 일반 타겟 공격 범위 체크 (공격 시 약간의 거리 여유 1.2f 부여)
|
||||||
|
if (distance <= attackRange * 1.2f)
|
||||||
|
{
|
||||||
|
// 타겟 바라보기
|
||||||
|
Vector3 direction = (target.transform.position - transform.position).normalized;
|
||||||
|
direction.y = 0;
|
||||||
|
if (direction != Vector3.zero)
|
||||||
{
|
{
|
||||||
TransitionToState(EnemyAIState.MoveToCore);
|
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(direction), Time.deltaTime * 5f);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 코어를 바라보기
|
// 공격 실행
|
||||||
Vector3 directionToCore = (_coreTransform.position - transform.position).normalized;
|
if (Time.time - _lastAttackTime >= attackInterval)
|
||||||
directionToCore.y = 0;
|
|
||||||
if (directionToCore != Vector3.zero)
|
|
||||||
{
|
{
|
||||||
Quaternion targetRotation = Quaternion.LookRotation(directionToCore);
|
AttackTarget(target);
|
||||||
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime * 5f);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 코어 공격
|
|
||||||
IDamageable coreHealth = _coreTransform.GetComponent<IDamageable>();
|
|
||||||
if (coreHealth != null && Time.time - _lastAttackTime >= attackInterval)
|
|
||||||
{
|
|
||||||
coreHealth.TakeDamage(attackDamage, NetworkObjectId);
|
|
||||||
_lastAttackTime = Time.time;
|
|
||||||
Debug.Log($"<color=red>[EnemyAI] {gameObject.name}이(가) 코어를 공격! (데미지: {attackDamage}, 표면 거리: {distanceToCore:F2}m)</color>");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// 플레이어 공격
|
// 거리가 멀어지면 타겟 종류에 따라 상태 전환
|
||||||
GameObject targetPlayer = GetTargetPlayer();
|
if (target == _coreTransform?.gameObject) TransitionToState(EnemyAIState.MoveToCore);
|
||||||
|
else TransitionToState(EnemyAIState.ChasePlayer);
|
||||||
if (targetPlayer == null)
|
|
||||||
{
|
|
||||||
OnLostTarget();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
float distanceToPlayer = Vector3.Distance(transform.position, targetPlayer.transform.position);
|
|
||||||
|
|
||||||
if (distanceToPlayer > attackRange * 1.2f)
|
|
||||||
{
|
|
||||||
TransitionToState(EnemyAIState.ChasePlayer);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 플레이어를 바라보기
|
|
||||||
Vector3 directionToPlayer = (targetPlayer.transform.position - transform.position).normalized;
|
|
||||||
directionToPlayer.y = 0;
|
|
||||||
if (directionToPlayer != Vector3.zero)
|
|
||||||
{
|
|
||||||
Quaternion targetRotation = Quaternion.LookRotation(directionToPlayer);
|
|
||||||
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime * 5f);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 공격
|
|
||||||
if (Time.time - _lastAttackTime >= attackInterval)
|
|
||||||
{
|
|
||||||
AttackPlayer(targetPlayer);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateReturnToOrigin()
|
private void UpdateReturnToOrigin()
|
||||||
{
|
{
|
||||||
GameObject player = DetectPlayer();
|
GameObject target = DetectTarget();
|
||||||
if (player != null)
|
if (target != null)
|
||||||
{
|
{
|
||||||
SetTargetPlayer(player);
|
SetTargetPlayer(target);
|
||||||
TransitionToState(EnemyAIState.ChasePlayer);
|
TransitionToState(EnemyAIState.ChasePlayer);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -335,10 +267,6 @@ namespace Northbound
|
|||||||
{
|
{
|
||||||
if (!_agent.hasPath || _agent.velocity.sqrMagnitude == 0f)
|
if (!_agent.hasPath || _agent.velocity.sqrMagnitude == 0f)
|
||||||
{
|
{
|
||||||
if (showDebugInfo)
|
|
||||||
{
|
|
||||||
Debug.Log($"<color=green>[EnemyAI] {gameObject.name}이(가) 원래 위치로 복귀했습니다.</color>");
|
|
||||||
}
|
|
||||||
TransitionToState(EnemyAIState.Idle);
|
TransitionToState(EnemyAIState.Idle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -346,224 +274,71 @@ namespace Northbound
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Detection
|
#region Detection & Target Management
|
||||||
|
|
||||||
private GameObject DetectPlayer()
|
private GameObject DetectTarget()
|
||||||
{
|
{
|
||||||
Collider[] colliders = Physics.OverlapSphere(transform.position, detectionRange, playerLayer);
|
LayerMask targetMask = playerLayer | obstacleLayer;
|
||||||
|
Collider[] colliders = Physics.OverlapSphere(transform.position, detectionRange, targetMask);
|
||||||
|
|
||||||
GameObject closestPlayer = null;
|
GameObject closestTarget = null;
|
||||||
float closestDistance = float.MaxValue;
|
float closestDistance = float.MaxValue;
|
||||||
|
|
||||||
foreach (Collider col in colliders)
|
foreach (Collider col in colliders)
|
||||||
{
|
{
|
||||||
// 자기 자신 제외
|
if (col.transform.root == transform.root) continue;
|
||||||
if (col.transform.root == transform.root)
|
|
||||||
continue;
|
IDamageable damageable = col.GetComponentInParent<IDamageable>();
|
||||||
|
if (damageable == null) continue;
|
||||||
|
|
||||||
// 플레이어 팀 확인 (부모에서 찾기)
|
|
||||||
ITeamMember teamMember = col.GetComponentInParent<ITeamMember>();
|
ITeamMember teamMember = col.GetComponentInParent<ITeamMember>();
|
||||||
if (teamMember == null || teamMember.GetTeam() != TeamType.Player)
|
bool isAttackable = (teamMember != null && teamMember.GetTeam() == TeamType.Player) || (teamMember == null);
|
||||||
continue;
|
if (!isAttackable) continue;
|
||||||
|
|
||||||
// 플레이어 위치 (루트 오브젝트 사용)
|
float distance = Vector3.Distance(transform.position, col.transform.position);
|
||||||
Transform playerRoot = col.transform.root;
|
|
||||||
Vector3 playerPosition = playerRoot.position;
|
|
||||||
|
|
||||||
// 거리 체크
|
|
||||||
float distance = Vector3.Distance(transform.position, playerPosition);
|
|
||||||
if (distance > detectionRange)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// 시야각 확인 (360도면 모든 방향 감지)
|
|
||||||
if (detectionAngle < 360f)
|
if (detectionAngle < 360f)
|
||||||
{
|
{
|
||||||
Vector3 directionToTarget = (playerPosition - transform.position).normalized;
|
Vector3 directionToTarget = (col.transform.position - transform.position).normalized;
|
||||||
float angleToTarget = Vector3.Angle(transform.forward, directionToTarget);
|
if (Vector3.Angle(transform.forward, directionToTarget) > detectionAngle / 2f) continue;
|
||||||
|
|
||||||
if (angleToTarget > detectionAngle / 2f)
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 시야 체크 (레이캐스트) - 플레이어 중심으로
|
if (distance < closestDistance)
|
||||||
Vector3 rayStart = transform.position + Vector3.up * 1f; // 적의 눈 높이
|
|
||||||
Vector3 rayTarget = playerPosition + Vector3.up * 1f; // 플레이어 중심
|
|
||||||
Vector3 rayDirection = (rayTarget - rayStart).normalized;
|
|
||||||
float rayDistance = Vector3.Distance(rayStart, rayTarget);
|
|
||||||
|
|
||||||
bool lineOfSight = true;
|
|
||||||
|
|
||||||
// 장애물 체크 (옵션)
|
|
||||||
if (Physics.Raycast(rayStart, rayDirection, out RaycastHit hit, rayDistance, obstacleLayer))
|
|
||||||
{
|
{
|
||||||
// 맞은 오브젝트가 플레이어의 루트나 자식인지 확인
|
closestDistance = distance;
|
||||||
if (hit.transform.root != playerRoot)
|
// 부모(Walls)가 아닌 실제 콜라이더가 있는 자식(wall)을 잡음
|
||||||
{
|
closestTarget = col.gameObject;
|
||||||
lineOfSight = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
return closestTarget;
|
||||||
|
}
|
||||||
|
|
||||||
if (lineOfSight)
|
public GameObject DetectObstacle()
|
||||||
|
{
|
||||||
|
RaycastHit hit;
|
||||||
|
Vector3 origin = transform.position + Vector3.up * 1.0f;
|
||||||
|
Vector3 direction = transform.forward;
|
||||||
|
float castDistance = attackRange * 1.5f;
|
||||||
|
|
||||||
|
if (Physics.SphereCast(origin, 0.5f, direction, out hit, castDistance, obstacleLayer))
|
||||||
|
{
|
||||||
|
if (hit.collider.GetComponentInParent<IDamageable>() != null)
|
||||||
{
|
{
|
||||||
// 가장 가까운 플레이어 찾기
|
// hit.collider.gameObject를 반환함으로써 자식 오브젝트를 직접 타겟팅함
|
||||||
if (distance < closestDistance)
|
return hit.collider.gameObject;
|
||||||
{
|
|
||||||
closestDistance = distance;
|
|
||||||
closestPlayer = playerRoot.gameObject;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return null;
|
||||||
// 감지 성공 시 로그 (1초에 한 번만)
|
|
||||||
if (closestPlayer != null && showDebugInfo && Time.time - _lastDetectionLogTime >= 1f)
|
|
||||||
{
|
|
||||||
string angleInfo = detectionAngle >= 360f ? "전방향" : $"{Vector3.Angle(transform.forward, (closestPlayer.transform.position - transform.position).normalized):F1}°";
|
|
||||||
Debug.Log($"<color=cyan>[EnemyAI] {gameObject.name}이(가) {closestPlayer.name}을(를) 감지! (거리: {closestDistance:F2}m, 각도: {angleInfo})</color>");
|
|
||||||
_lastDetectionLogTime = Time.time;
|
|
||||||
}
|
|
||||||
|
|
||||||
return closestPlayer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
private void SetTargetPlayer(GameObject target)
|
||||||
|
|
||||||
#region Combat
|
|
||||||
|
|
||||||
private void AttackPlayer(GameObject player)
|
|
||||||
{
|
{
|
||||||
IDamageable damageable = player.GetComponentInParent<IDamageable>();
|
if (target == null) return;
|
||||||
if (damageable != null)
|
_cachedTargetPlayer = target;
|
||||||
{
|
|
||||||
damageable.TakeDamage(attackDamage, NetworkObjectId);
|
|
||||||
_lastAttackTime = Time.time;
|
|
||||||
|
|
||||||
if (showDebugInfo)
|
var networkObject = target.GetComponentInParent<NetworkObject>();
|
||||||
{
|
if (networkObject != null) _targetPlayerId.Value = networkObject.NetworkObjectId;
|
||||||
Debug.Log($"<color=red>[EnemyAI] {gameObject.name}이(가) {player.name}을(를) 공격! (데미지: {attackDamage})</color>");
|
else _targetPlayerId.Value = 0;
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Distance Calculation
|
|
||||||
|
|
||||||
private float GetDistanceToCoreSurface()
|
|
||||||
{
|
|
||||||
if (_coreTransform == null)
|
|
||||||
return float.MaxValue;
|
|
||||||
|
|
||||||
if (_coreCollider != null)
|
|
||||||
{
|
|
||||||
Vector3 closestPoint = _coreCollider.ClosestPoint(transform.position);
|
|
||||||
float distanceToSurface = Vector3.Distance(transform.position, closestPoint);
|
|
||||||
return distanceToSurface;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return Vector3.Distance(transform.position, _coreTransform.position);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region State Management
|
|
||||||
|
|
||||||
private void TransitionToState(EnemyAIState newState)
|
|
||||||
{
|
|
||||||
if (_currentState.Value == newState) return;
|
|
||||||
|
|
||||||
if (showDebugInfo)
|
|
||||||
{
|
|
||||||
Debug.Log($"<color=magenta>[EnemyAI] {gameObject.name} 상태 변경: {_currentState.Value} → {newState}</color>");
|
|
||||||
}
|
|
||||||
|
|
||||||
OnExitState(_currentState.Value);
|
|
||||||
_currentState.Value = newState;
|
|
||||||
OnEnterState(newState);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnEnterState(EnemyAIState state)
|
|
||||||
{
|
|
||||||
switch (state)
|
|
||||||
{
|
|
||||||
case EnemyAIState.Idle:
|
|
||||||
_agent.isStopped = true;
|
|
||||||
_agent.speed = moveSpeed;
|
|
||||||
_agent.ResetPath();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EnemyAIState.MoveToCore:
|
|
||||||
_agent.isStopped = false;
|
|
||||||
_agent.speed = moveSpeed;
|
|
||||||
_hasSetCoreDestination = false;
|
|
||||||
|
|
||||||
if (showDebugInfo)
|
|
||||||
{
|
|
||||||
Debug.Log($"<color=cyan>[EnemyAI] {gameObject.name}이(가) 코어로 이동 시작</color>");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EnemyAIState.ChasePlayer:
|
|
||||||
_agent.isStopped = false;
|
|
||||||
_agent.speed = moveSpeed * chaseSpeedMultiplier;
|
|
||||||
_chaseStartPosition = transform.position;
|
|
||||||
|
|
||||||
if (showDebugInfo)
|
|
||||||
{
|
|
||||||
Debug.Log($"<color=cyan>[EnemyAI] {gameObject.name}이(가) 추적 시작! (시작 위치: {_chaseStartPosition})</color>");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EnemyAIState.Attack:
|
|
||||||
_agent.isStopped = true;
|
|
||||||
_agent.ResetPath();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EnemyAIState.ReturnToOrigin:
|
|
||||||
_agent.isStopped = false;
|
|
||||||
_agent.speed = moveSpeed;
|
|
||||||
_agent.stoppingDistance = 1f;
|
|
||||||
_agent.SetDestination(_originPosition);
|
|
||||||
ClearTargetPlayer();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnExitState(EnemyAIState state)
|
|
||||||
{
|
|
||||||
if (state == EnemyAIState.ReturnToOrigin)
|
|
||||||
{
|
|
||||||
_agent.stoppingDistance = attackRange * 0.7f;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnLostTarget()
|
|
||||||
{
|
|
||||||
if (aiType == TeamType.Hostile)
|
|
||||||
{
|
|
||||||
TransitionToState(EnemyAIState.ReturnToOrigin);
|
|
||||||
}
|
|
||||||
else if (aiType == TeamType.Monster)
|
|
||||||
{
|
|
||||||
ClearTargetPlayer();
|
|
||||||
_hasSetCoreDestination = false;
|
|
||||||
TransitionToState(EnemyAIState.MoveToCore);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Target Management
|
|
||||||
|
|
||||||
private void SetTargetPlayer(GameObject player)
|
|
||||||
{
|
|
||||||
var networkObject = player.GetComponentInParent<NetworkObject>();
|
|
||||||
if (networkObject != null)
|
|
||||||
{
|
|
||||||
_targetPlayerId.Value = networkObject.NetworkObjectId;
|
|
||||||
_cachedTargetPlayer = player;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ClearTargetPlayer()
|
private void ClearTargetPlayer()
|
||||||
@@ -574,17 +349,23 @@ namespace Northbound
|
|||||||
|
|
||||||
private GameObject GetTargetPlayer()
|
private GameObject GetTargetPlayer()
|
||||||
{
|
{
|
||||||
if (_targetPlayerId.Value == 0) return null;
|
// 1순위: 물리적 참조 (장애물/서버 전용)
|
||||||
|
if (_cachedTargetPlayer != null && _cachedTargetPlayer.activeInHierarchy) return _cachedTargetPlayer;
|
||||||
|
|
||||||
if (_cachedTargetPlayer != null && _cachedTargetPlayer.activeSelf)
|
// 2순위: 네트워크 ID 검색
|
||||||
|
if (_targetPlayerId.Value != 0)
|
||||||
{
|
{
|
||||||
return _cachedTargetPlayer;
|
if (NetworkManager.Singleton.SpawnManager.SpawnedObjects.TryGetValue(_targetPlayerId.Value, out NetworkObject networkObject))
|
||||||
|
{
|
||||||
|
_cachedTargetPlayer = networkObject.gameObject;
|
||||||
|
return _cachedTargetPlayer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NetworkManager.Singleton.SpawnManager.SpawnedObjects.TryGetValue(_targetPlayerId.Value, out NetworkObject networkObject))
|
// 3순위: 코어 확인
|
||||||
|
if (_currentState.Value == EnemyAIState.Attack && _coreTransform != null)
|
||||||
{
|
{
|
||||||
_cachedTargetPlayer = networkObject.gameObject;
|
if (GetDistanceToCoreSurface() <= attackRange * 1.5f) return _coreTransform.gameObject;
|
||||||
return _cachedTargetPlayer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
@@ -592,7 +373,122 @@ namespace Northbound
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Utilities
|
#region Combat Logic
|
||||||
|
|
||||||
|
private void AttackTarget(GameObject target)
|
||||||
|
{
|
||||||
|
// 1. 타겟의 자식, 본인, 부모 순으로 샅샅이 뒤져서 IDamageable을 찾습니다.
|
||||||
|
IDamageable damageable = target.GetComponentInChildren<IDamageable>();
|
||||||
|
if (damageable == null) damageable = target.GetComponent<IDamageable>();
|
||||||
|
if (damageable == null) damageable = target.GetComponentInParent<IDamageable>();
|
||||||
|
|
||||||
|
if (damageable != null)
|
||||||
|
{
|
||||||
|
// 2. 공격 쿨타임 체크
|
||||||
|
if (Time.time - _lastAttackTime >= attackInterval)
|
||||||
|
{
|
||||||
|
damageable.TakeDamage(attackDamage, NetworkObjectId);
|
||||||
|
_lastAttackTime = Time.time;
|
||||||
|
|
||||||
|
if (showDebugInfo)
|
||||||
|
Debug.Log($"<color=red>[EnemyAI] {gameObject.name} -> {target.name} 타격 성공! (데미지: {attackDamage})</color>");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 3. 만약 IDamageable을 못 찾았다면 로그를 남겨서 범인을 찾습니다.
|
||||||
|
if (showDebugInfo)
|
||||||
|
Debug.LogWarning($"<color=yellow>[EnemyAI] {target.name}에 IDamageable 스크립트가 없습니다!</color>");
|
||||||
|
|
||||||
|
// 공격할 수 없는 대상이면 상태를 해제합니다.
|
||||||
|
OnLostTarget();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Utilities & Distance
|
||||||
|
|
||||||
|
private float GetDistanceToTarget(GameObject target)
|
||||||
|
{
|
||||||
|
if (target == _coreTransform?.gameObject) return GetDistanceToCoreSurface();
|
||||||
|
|
||||||
|
Collider col = target.GetComponent<Collider>();
|
||||||
|
if (col != null)
|
||||||
|
{
|
||||||
|
return Vector3.Distance(transform.position, col.ClosestPoint(transform.position));
|
||||||
|
}
|
||||||
|
return Vector3.Distance(transform.position, target.transform.position);
|
||||||
|
}
|
||||||
|
|
||||||
|
private float GetDistanceToCoreSurface()
|
||||||
|
{
|
||||||
|
if (_coreTransform == null) return float.MaxValue;
|
||||||
|
if (_coreCollider != null)
|
||||||
|
{
|
||||||
|
Vector3 closestPoint = _coreCollider.ClosestPoint(transform.position);
|
||||||
|
return Vector3.Distance(transform.position, closestPoint);
|
||||||
|
}
|
||||||
|
return Vector3.Distance(transform.position, _coreTransform.position);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void TransitionToState(EnemyAIState newState)
|
||||||
|
{
|
||||||
|
if (_currentState.Value == newState) return;
|
||||||
|
OnExitState(_currentState.Value);
|
||||||
|
_currentState.Value = newState;
|
||||||
|
OnEnterState(newState);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnEnterState(EnemyAIState state)
|
||||||
|
{
|
||||||
|
switch (state)
|
||||||
|
{
|
||||||
|
case EnemyAIState.Idle:
|
||||||
|
case EnemyAIState.Attack:
|
||||||
|
_agent.isStopped = true;
|
||||||
|
_agent.ResetPath();
|
||||||
|
break;
|
||||||
|
case EnemyAIState.MoveToCore:
|
||||||
|
case EnemyAIState.ChasePlayer:
|
||||||
|
case EnemyAIState.ReturnToOrigin:
|
||||||
|
_agent.isStopped = false;
|
||||||
|
_agent.speed = (state == EnemyAIState.ChasePlayer) ? moveSpeed * chaseSpeedMultiplier : moveSpeed;
|
||||||
|
if (state == EnemyAIState.ChasePlayer) _chaseStartPosition = transform.position;
|
||||||
|
if (state == EnemyAIState.ReturnToOrigin) _agent.SetDestination(_originPosition);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnExitState(EnemyAIState state) { }
|
||||||
|
|
||||||
|
private void OnLostTarget()
|
||||||
|
{
|
||||||
|
ClearTargetPlayer();
|
||||||
|
|
||||||
|
if (IsServer && _agent.isOnNavMesh)
|
||||||
|
{
|
||||||
|
// 1. 현재 가던 길을 즉시 멈춤
|
||||||
|
_agent.ResetPath();
|
||||||
|
_hasSetCoreDestination = false;
|
||||||
|
|
||||||
|
// 2. NavMesh가 채워질 시간을 벌기 위한 코루틴 시작
|
||||||
|
StartCoroutine(WaitAndRepathRoutine());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private IEnumerator WaitAndRepathRoutine()
|
||||||
|
{
|
||||||
|
_isRecalculatingPath = true;
|
||||||
|
|
||||||
|
// NavMesh 바닥이 채워지는 시간을 기다림 (0.15~0.2초 권장)
|
||||||
|
yield return new WaitForSeconds(0.2f);
|
||||||
|
|
||||||
|
_isRecalculatingPath = false;
|
||||||
|
|
||||||
|
// 코어로 다시 이동 상태 전환
|
||||||
|
TransitionToState(aiType == TeamType.Monster ? EnemyAIState.MoveToCore : EnemyAIState.Idle);
|
||||||
|
}
|
||||||
|
|
||||||
private void FindCore()
|
private void FindCore()
|
||||||
{
|
{
|
||||||
@@ -600,115 +496,29 @@ namespace Northbound
|
|||||||
if (core != null)
|
if (core != null)
|
||||||
{
|
{
|
||||||
_coreTransform = core.transform;
|
_coreTransform = core.transform;
|
||||||
|
_coreCollider = core.GetComponent<Collider>() ?? core.GetComponentInChildren<Collider>();
|
||||||
_coreCollider = core.GetComponent<Collider>();
|
|
||||||
if (_coreCollider == null)
|
|
||||||
{
|
|
||||||
_coreCollider = core.GetComponentInChildren<Collider>();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_coreCollider != null)
|
|
||||||
{
|
|
||||||
Debug.Log($"<color=green>[EnemyAI] {gameObject.name}이(가) 코어를 찾았습니다! (위치: {_coreTransform.position}, Collider: {_coreCollider.GetType().Name})</color>");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.LogWarning($"<color=orange>[EnemyAI] {gameObject.name}이(가) 코어를 찾았지만 Collider가 없습니다.</color>");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.LogWarning($"<color=orange>[EnemyAI] {gameObject.name}이(가) 코어를 찾을 수 없습니다!</color>");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Gizmos
|
#region Gizmos (기존 코드 유지)
|
||||||
|
|
||||||
private void OnDrawGizmos()
|
private void OnDrawGizmos()
|
||||||
{
|
{
|
||||||
if (!showDebugInfo) return;
|
if (!showDebugInfo) return;
|
||||||
|
Gizmos.color = Color.yellow; Gizmos.DrawWireSphere(transform.position, detectionRange);
|
||||||
|
Gizmos.color = Color.red; Gizmos.DrawWireSphere(transform.position, attackRange);
|
||||||
|
|
||||||
// 감지 범위
|
|
||||||
Gizmos.color = Color.yellow;
|
|
||||||
Gizmos.DrawWireSphere(transform.position, detectionRange);
|
|
||||||
|
|
||||||
// 공격 범위
|
|
||||||
Gizmos.color = Color.red;
|
|
||||||
Gizmos.DrawWireSphere(transform.position, attackRange);
|
|
||||||
|
|
||||||
// 시야각 (360도가 아닐 때만 표시)
|
|
||||||
if (detectionAngle < 360f)
|
if (detectionAngle < 360f)
|
||||||
{
|
{
|
||||||
Vector3 forward = transform.forward * detectionRange;
|
Vector3 forward = transform.forward * detectionRange;
|
||||||
Vector3 leftBoundary = Quaternion.Euler(0, -detectionAngle / 2f, 0) * forward;
|
Vector3 left = Quaternion.Euler(0, -detectionAngle / 2f, 0) * forward;
|
||||||
Vector3 rightBoundary = Quaternion.Euler(0, detectionAngle / 2f, 0) * forward;
|
Vector3 right = Quaternion.Euler(0, detectionAngle / 2f, 0) * forward;
|
||||||
|
|
||||||
Gizmos.color = Color.blue;
|
Gizmos.color = Color.blue;
|
||||||
Gizmos.DrawLine(transform.position, transform.position + leftBoundary);
|
Gizmos.DrawLine(transform.position, transform.position + left);
|
||||||
Gizmos.DrawLine(transform.position, transform.position + rightBoundary);
|
Gizmos.DrawLine(transform.position, transform.position + right);
|
||||||
}
|
|
||||||
|
|
||||||
// 원점 표시 (적대 세력만)
|
|
||||||
if (aiType == TeamType.Hostile && Application.isPlaying)
|
|
||||||
{
|
|
||||||
Gizmos.color = Color.green;
|
|
||||||
Gizmos.DrawWireSphere(_originPosition, 1f);
|
|
||||||
Gizmos.DrawLine(transform.position, _originPosition);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 추적 시작 위치 표시
|
|
||||||
if (Application.isPlaying && (_currentState.Value == EnemyAIState.ChasePlayer || _currentState.Value == EnemyAIState.Attack))
|
|
||||||
{
|
|
||||||
Gizmos.color = Color.cyan;
|
|
||||||
Gizmos.DrawWireSphere(_chaseStartPosition, 1.5f);
|
|
||||||
Gizmos.DrawLine(transform.position, _chaseStartPosition);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 코어 방향 및 표면까지의 거리 표시
|
|
||||||
if (Application.isPlaying && _currentState.Value == EnemyAIState.MoveToCore && _coreTransform != null)
|
|
||||||
{
|
|
||||||
Gizmos.color = Color.magenta;
|
|
||||||
Gizmos.DrawLine(transform.position, _coreTransform.position);
|
|
||||||
Gizmos.DrawWireSphere(_coreTransform.position, 2f);
|
|
||||||
|
|
||||||
if (_coreCollider != null)
|
|
||||||
{
|
|
||||||
Vector3 closestPoint = _coreCollider.ClosestPoint(transform.position);
|
|
||||||
Gizmos.color = Color.green;
|
|
||||||
Gizmos.DrawLine(transform.position, closestPoint);
|
|
||||||
Gizmos.DrawWireSphere(closestPoint, 0.5f);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDrawGizmosSelected()
|
|
||||||
{
|
|
||||||
OnDrawGizmos();
|
|
||||||
|
|
||||||
#if UNITY_EDITOR
|
|
||||||
if (Application.isPlaying && _agent != null)
|
|
||||||
{
|
|
||||||
string pathInfo = _agent.hasPath ? $"Path: {_agent.path.status}" : "No Path";
|
|
||||||
string navMeshInfo = _agent.isOnNavMesh ? "On NavMesh" : "OFF NAVMESH!";
|
|
||||||
string velocityInfo = $"Velocity: {_agent.velocity.magnitude:F2}";
|
|
||||||
|
|
||||||
string distanceInfo = "";
|
|
||||||
if (_coreTransform != null && _currentState.Value == EnemyAIState.MoveToCore)
|
|
||||||
{
|
|
||||||
float surfaceDistance = GetDistanceToCoreSurface();
|
|
||||||
distanceInfo = $"\nCore Surface Dist: {surfaceDistance:F2}m";
|
|
||||||
}
|
|
||||||
|
|
||||||
string angleInfo = detectionAngle >= 360f ? "\nDetection: 360° (전방향)" : $"\nDetection: {detectionAngle}°";
|
|
||||||
|
|
||||||
UnityEditor.Handles.Label(transform.position + Vector3.up * 3f,
|
|
||||||
$"Enemy AI\nState: {_currentState.Value}\nType: {aiType}\n{navMeshInfo}\n{pathInfo}\n{velocityInfo}{angleInfo}\nRange: {detectionRange}m\nAttack: {attackRange}m{distanceInfo}");
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
35
Assets/Scripts/EnemyPortal.cs
Normal file
35
Assets/Scripts/EnemyPortal.cs
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
using Northbound;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Unity.Netcode;
|
||||||
|
using UnityEngine;
|
||||||
|
using static Northbound.ObstacleSpawner;
|
||||||
|
using static UnityEditor.FilePathAttribute;
|
||||||
|
|
||||||
|
public class EnemyPortal : MonoBehaviour
|
||||||
|
{
|
||||||
|
[Header("Spawn Settings")]
|
||||||
|
[Tooltip("소환할 몬스터 목록")]
|
||||||
|
[SerializeField] private List<GameObject> Enemies = new();
|
||||||
|
|
||||||
|
// Start is called once before the first execution of Update after the MonoBehaviour is created
|
||||||
|
void Start()
|
||||||
|
{
|
||||||
|
GlobalTimer.Instance.OnCycleComplete += SpawnEnemy;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SpawnEnemy()
|
||||||
|
{
|
||||||
|
foreach (GameObject obj in Enemies)
|
||||||
|
{
|
||||||
|
GameObject enemy = Instantiate(obj, transform);
|
||||||
|
enemy.GetComponent<NetworkObject>().Spawn();
|
||||||
|
Debug.Log(enemy);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update is called once per frame
|
||||||
|
void Update()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
2
Assets/Scripts/EnemyPortal.cs.meta
Normal file
2
Assets/Scripts/EnemyPortal.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: cb91abd3aae74d941a739a48aefb74a1
|
||||||
Reference in New Issue
Block a user