#70 물고기 Ai 추가

+ Fish Layer 추가
+ 물고기 프리셋 기능 추가
+ FishManager(싱글톤) 추가
  ㄴ 현재는 리스폰 관련 기능만 존재
This commit is contained in:
NTG 2023-12-26 06:14:56 +09:00
parent f1804a6b0e
commit 2ff2da5682
7 changed files with 1126 additions and 113 deletions

View File

@ -1923,7 +1923,7 @@ Transform:
m_GameObject: {fileID: 248177876}
serializedVersion: 2
m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068}
m_LocalPosition: {x: 0, y: 2, z: 8}
m_LocalPosition: {x: 0, y: 3, z: 8}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
@ -3731,6 +3731,182 @@ NavMeshObstacle:
m_CarveOnlyStationary: 1
m_Center: {x: -0.09900001, y: 2.229, z: 0.049000002}
m_TimeToStationary: 0.5
--- !u!1 &453479153
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 453479154}
- component: {fileID: 453479159}
- component: {fileID: 453479158}
- component: {fileID: 453479157}
- component: {fileID: 453479156}
- component: {fileID: 453479155}
m_Layer: 15
m_Name: Fish (3)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &453479154
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 453479153}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -50.429996, y: -10.24, z: 33.88}
m_LocalScale: {x: 1, y: 1, z: 2}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1825636406}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &453479155
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 453479153}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a0f3e1c9930c204498f3a86452337290, type: 3}
m_Name:
m_EditorClassIdentifier:
autoInit: 1
isDrawGizmos: 1
viewRadius: 20
moveSpd: 500
rotationSpeed: 10
isRandomAngle: 0
randomAngle: 120
rescanTime: 0.5
escapeTime: 10
isRespawn: 1
respawnTime: 5
randomDirectionChange: 0
directionChangeInterval: 3
minDirectionChangeInterval: 1
maxDirectionChangeInterval: 3
escapeMode: 2
randomZigzag: 1
zigzagAmplitude: 0.5
zigzagFrequency: 1
minZigzagAmplitude: 0.1
maxZigzagAmplitude: 2
minZigzagFrequency: 0.1
maxZigzagFrequency: 2
hitColliders:
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
targetLayer:
serializedVersion: 2
m_Bits: 512
--- !u!65 &453479156
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 453479153}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Size: {x: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0}
--- !u!54 &453479157
Rigidbody:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 453479153}
serializedVersion: 4
m_Mass: 1
m_Drag: 0
m_AngularDrag: 0.05
m_CenterOfMass: {x: 0, y: 0, z: 0}
m_InertiaTensor: {x: 1, y: 1, z: 1}
m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_ImplicitCom: 1
m_ImplicitTensor: 1
m_UseGravity: 0
m_IsKinematic: 0
m_Interpolate: 0
m_Constraints: 112
m_CollisionDetection: 0
--- !u!23 &453479158
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 453479153}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &453479159
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 453479153}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!1 &476261169
GameObject:
m_ObjectHideFlags: 0
@ -6129,6 +6305,182 @@ NavMeshObstacle:
m_CarveOnlyStationary: 1
m_Center: {x: -0.09900001, y: 2.229, z: 0.049000002}
m_TimeToStationary: 0.5
--- !u!1 &570047447
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 570047448}
- component: {fileID: 570047453}
- component: {fileID: 570047452}
- component: {fileID: 570047451}
- component: {fileID: 570047450}
- component: {fileID: 570047449}
m_Layer: 15
m_Name: Fish (1)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &570047448
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 570047447}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -72.92, y: -10.24, z: 22.97}
m_LocalScale: {x: 1, y: 1, z: 2}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1825636406}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &570047449
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 570047447}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a0f3e1c9930c204498f3a86452337290, type: 3}
m_Name:
m_EditorClassIdentifier:
autoInit: 1
isDrawGizmos: 1
viewRadius: 20
moveSpd: 500
rotationSpeed: 10
isRandomAngle: 1
randomAngle: 120
rescanTime: 0.5
escapeTime: 10
isRespawn: 1
respawnTime: 5
randomDirectionChange: 1
directionChangeInterval: 3
minDirectionChangeInterval: 1
maxDirectionChangeInterval: 3
escapeMode: 1
randomZigzag: 0
zigzagAmplitude: 0.5
zigzagFrequency: 1
minZigzagAmplitude: 0.1
maxZigzagAmplitude: 2
minZigzagFrequency: 0.1
maxZigzagFrequency: 2
hitColliders:
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
targetLayer:
serializedVersion: 2
m_Bits: 512
--- !u!65 &570047450
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 570047447}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Size: {x: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0}
--- !u!54 &570047451
Rigidbody:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 570047447}
serializedVersion: 4
m_Mass: 1
m_Drag: 0
m_AngularDrag: 0.05
m_CenterOfMass: {x: 0, y: 0, z: 0}
m_InertiaTensor: {x: 1, y: 1, z: 1}
m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_ImplicitCom: 1
m_ImplicitTensor: 1
m_UseGravity: 0
m_IsKinematic: 0
m_Interpolate: 0
m_Constraints: 112
m_CollisionDetection: 0
--- !u!23 &570047452
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 570047447}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &570047453
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 570047447}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!1001 &587373864
PrefabInstance:
m_ObjectHideFlags: 0
@ -7388,6 +7740,182 @@ MonoBehaviour:
m_EditorClassIdentifier:
autoInit: 1
<BaseShipCam>k__BackingField: {fileID: 168896974}
--- !u!1 &793815083
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 793815084}
- component: {fileID: 793815089}
- component: {fileID: 793815088}
- component: {fileID: 793815087}
- component: {fileID: 793815086}
- component: {fileID: 793815085}
m_Layer: 15
m_Name: Fish (2)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &793815084
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 793815083}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -63.459995, y: -10.24, z: 27.9}
m_LocalScale: {x: 1, y: 1, z: 2}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1825636406}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &793815085
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 793815083}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a0f3e1c9930c204498f3a86452337290, type: 3}
m_Name:
m_EditorClassIdentifier:
autoInit: 1
isDrawGizmos: 1
viewRadius: 20
moveSpd: 500
rotationSpeed: 10
isRandomAngle: 1
randomAngle: 120
rescanTime: 0.5
escapeTime: 10
isRespawn: 1
respawnTime: 5
randomDirectionChange: 1
directionChangeInterval: 3
minDirectionChangeInterval: 1
maxDirectionChangeInterval: 3
escapeMode: 1
randomZigzag: 1
zigzagAmplitude: 0.5
zigzagFrequency: 1
minZigzagAmplitude: 0.1
maxZigzagAmplitude: 2
minZigzagFrequency: 0.1
maxZigzagFrequency: 2
hitColliders:
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
targetLayer:
serializedVersion: 2
m_Bits: 512
--- !u!65 &793815086
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 793815083}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Size: {x: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0}
--- !u!54 &793815087
Rigidbody:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 793815083}
serializedVersion: 4
m_Mass: 1
m_Drag: 0
m_AngularDrag: 0.05
m_CenterOfMass: {x: 0, y: 0, z: 0}
m_InertiaTensor: {x: 1, y: 1, z: 1}
m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_ImplicitCom: 1
m_ImplicitTensor: 1
m_UseGravity: 0
m_IsKinematic: 0
m_Interpolate: 0
m_Constraints: 112
m_CollisionDetection: 0
--- !u!23 &793815088
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 793815083}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &793815089
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 793815083}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!1001 &795209795
PrefabInstance:
m_ObjectHideFlags: 0
@ -10614,113 +11142,6 @@ RectTransform:
type: 3}
m_PrefabInstance: {fileID: 1446558449}
m_PrefabAsset: {fileID: 0}
--- !u!1 &1464480066
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1464480070}
- component: {fileID: 1464480069}
- component: {fileID: 1464480068}
- component: {fileID: 1464480067}
m_Layer: 0
m_Name: Fish
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!136 &1464480067
CapsuleCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1464480066}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 2
m_Radius: 0.5
m_Height: 2
m_Direction: 1
m_Center: {x: 0, y: 0, z: 0}
--- !u!23 &1464480068
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1464480066}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &1464480069
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1464480066}
m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0}
--- !u!4 &1464480070
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1464480066}
serializedVersion: 2
m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068}
m_LocalPosition: {x: -50.93, y: -18.53, z: 5.39}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
--- !u!1 &1485085414
GameObject:
m_ObjectHideFlags: 3
@ -10746,8 +11167,8 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1485085414}
serializedVersion: 2
m_LocalRotation: {x: 0.38023633, y: 0.61874115, z: -0.4629656, w: 0.50817573}
m_LocalPosition: {x: -0.00051498413, y: 0, z: -0.0025787354}
m_LocalRotation: {x: 0.38023835, y: 0.618739, z: -0.46296394, w: 0.5081785}
m_LocalPosition: {x: -0.00059890747, y: 0, z: -0.0030136108}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
@ -13540,6 +13961,231 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1812177369
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1812177370}
- component: {fileID: 1812177375}
- component: {fileID: 1812177374}
- component: {fileID: 1812177373}
- component: {fileID: 1812177372}
- component: {fileID: 1812177371}
m_Layer: 15
m_Name: Fish
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1812177370
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1812177369}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -82.67, y: -10.24, z: 19.24}
m_LocalScale: {x: 1, y: 1, z: 2}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1825636406}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1812177371
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1812177369}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a0f3e1c9930c204498f3a86452337290, type: 3}
m_Name:
m_EditorClassIdentifier:
autoInit: 1
isDrawGizmos: 1
viewRadius: 20
moveSpd: 500
rotationSpeed: 10
isRandomAngle: 0
randomAngle: 120
rescanTime: 0.5
escapeTime: 10
isRespawn: 1
respawnTime: 5
randomDirectionChange: 0
directionChangeInterval: 3
minDirectionChangeInterval: 1
maxDirectionChangeInterval: 3
escapeMode: 0
randomZigzag: 0
zigzagAmplitude: 0.5
zigzagFrequency: 1
minZigzagAmplitude: 0.1
maxZigzagAmplitude: 2
minZigzagFrequency: 0.1
maxZigzagFrequency: 2
hitColliders:
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
targetLayer:
serializedVersion: 2
m_Bits: 512
--- !u!65 &1812177372
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1812177369}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Size: {x: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0}
--- !u!54 &1812177373
Rigidbody:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1812177369}
serializedVersion: 4
m_Mass: 1
m_Drag: 0
m_AngularDrag: 0.05
m_CenterOfMass: {x: 0, y: 0, z: 0}
m_InertiaTensor: {x: 1, y: 1, z: 1}
m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_ImplicitCom: 1
m_ImplicitTensor: 1
m_UseGravity: 0
m_IsKinematic: 0
m_Interpolate: 0
m_Constraints: 112
m_CollisionDetection: 0
--- !u!23 &1812177374
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1812177369}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &1812177375
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1812177369}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!1 &1825636405
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1825636406}
- component: {fileID: 1825636407}
m_Layer: 0
m_Name: Fishes
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1825636406
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1825636405}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1812177370}
- {fileID: 570047448}
- {fileID: 793815084}
- {fileID: 453479154}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1825636407
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1825636405}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 67eb8043df0bfce42aa24c9ec130227a, type: 3}
m_Name:
m_EditorClassIdentifier:
_persistent: 0
--- !u!1001 &1841847360
PrefabInstance:
m_ObjectHideFlags: 0
@ -16397,7 +17043,7 @@ SceneRoots:
- {fileID: 476261175}
- {fileID: 357776295}
- {fileID: 200595900}
- {fileID: 1464480070}
- {fileID: 1825636406}
- {fileID: 1574668128}
- {fileID: 1771297325}
- {fileID: 280786784}

View File

@ -0,0 +1,323 @@
using System;
using System.Collections;
using Sirenix.OdinInspector;
using UnityEngine;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
public enum EscapeMode
{
NONE = -1,
STRAIGHT,
ZIGZAG,
TOWARDS
}
public class Fish : MonoBehaviour
{
// 초기화 방식
[Title("초기화 방식")]
[SerializeField] private bool autoInit = true;
// 물고기의 기본 설정
[Title("물고기의 기본 설정")]
[SerializeField] private bool isDrawGizmos = true;
[Tooltip("타겟 인식 범위")]
[SerializeField] private float viewRadius = 10f;
[Tooltip("이동속도")]
[SerializeField] private float moveSpd = 500f;
[Tooltip("회전속도")]
[SerializeField] private float rotationSpeed = 10f;
[Tooltip("랜덤 방향으로 도주 여부")]
[SerializeField] private bool isRandomAngle = true;
[ShowIf("@isRandomAngle")]
[Tooltip("도망가는 방향의 랜덤 각도")]
[SerializeField] private float randomAngle = 180f;
[Tooltip("타겟을 재검색하는 시간")]
[SerializeField] private float rescanTime = 0.5f;
[Tooltip("도망가는 시간")]
[SerializeField] private float escapeTime = 10f;
[Tooltip("리스폰 여부")]
[SerializeField] private bool isRespawn = true;
[ShowIf("@isRespawn == true")]
[Tooltip("리스폰되는데 걸리는 시간")]
[SerializeField] private float respawnTime = 5f;
[Tooltip("도망치면서 랜덤 방향 전환 여부")]
[SerializeField] private bool randomDirectionChange;
[ShowIf("@!randomDirectionChange")]
[Tooltip("도망치면서 방향 전환하는데 걸리는 시간")]
[SerializeField] private float directionChangeInterval = 1f;
[ShowIf("@randomDirectionChange")]
[Tooltip("도망치면서 방향 전환하는데 걸리는 랜덤 최소 시간")]
[SerializeField] private float minDirectionChangeInterval = 0.1f;
[ShowIf("@randomDirectionChange")]
[Tooltip("도망치면서 방향 전환하는데 걸리는 랜덤 최대 시간")]
[SerializeField] private float maxDirectionChangeInterval = 1f;
[Tooltip("도주 방식")]
[SerializeField] private EscapeMode escapeMode = EscapeMode.STRAIGHT;
// ZIGZAG
[Title("ZIGZAG")]
[ShowIf("@escapeMode == EscapeMode.ZIGZAG")]
[Tooltip("흔들림의 정도")]
[SerializeField] private bool randomZigzag;
[ShowIf("@escapeMode == EscapeMode.ZIGZAG && !randomZigzag")]
[Tooltip("흔들림의 정도")]
[SerializeField] private float zigzagAmplitude = 1f;
[ShowIf("@escapeMode == EscapeMode.ZIGZAG && !randomZigzag")]
[Tooltip("흔들림의 주기")]
[SerializeField] private float zigzagFrequency = 1f;
[ShowIf("@escapeMode == EscapeMode.ZIGZAG && randomZigzag")]
[Tooltip("흔들림의 정도 랜덤 최솟값")]
[SerializeField] private float minZigzagAmplitude = 0.1f;
[ShowIf("@escapeMode == EscapeMode.ZIGZAG && randomZigzag")]
[Tooltip("흔들림의 정도 랜덤 최댓값")]
[SerializeField] private float maxZigzagAmplitude = 1f;
[Space]
[ShowIf("@escapeMode == EscapeMode.ZIGZAG && randomZigzag")]
[Tooltip("흔들림의 주기 랜덤 최솟값")]
[SerializeField] private float minZigzagFrequency = 0.1f;
[ShowIf("@escapeMode == EscapeMode.ZIGZAG && randomZigzag")]
[Tooltip("흔들림의 주기 랜덤 최댓값")]
[SerializeField] private float maxZigzagFrequency = 1f;
// 디버깅
[Title("디버깅")]
[SerializeField] private Collider[] hitColliders = new Collider[MAX_HIT_NUM];
[SerializeField] private LayerMask targetLayer;
private Rigidbody rb;
private Coroutine findTargetCoroutine;
private Coroutine escapeCoroutine;
private WaitForSeconds findCoroutineTime;
private Vector3 spawnPos;
private const int MAX_HIT_NUM = 3;
private void OnValidate()
{
findCoroutineTime = new WaitForSeconds(rescanTime);
}
private void OnDrawGizmosSelected()
{
if (!isDrawGizmos) return;
Gizmos.color = Color.red;
Gizmos.DrawWireSphere(transform.position, viewRadius);
}
[Button("셋팅 초기화")]
private void Init()
{
rb = GetComponent<Rigidbody>();
targetLayer = LayerMask.GetMask("Player");
}
#region Preset
[HorizontalGroup("Split")]
[Button("프리셋 1번")]
private void Preset1()
{
isDrawGizmos = true;
viewRadius = 20f;
moveSpd = 500f;
rotationSpeed = 10f;
isRandomAngle = false;
rescanTime = 0.5f;
escapeTime = 10f;
isRespawn = true;
respawnTime = 5f;
randomDirectionChange = false;
directionChangeInterval = 3f;
escapeMode = EscapeMode.STRAIGHT;
}
[HorizontalGroup("Split")]
[Button("프리셋 2번")]
private void Preset2()
{
isDrawGizmos = true;
viewRadius = 20f;
moveSpd = 500f;
rotationSpeed = 10f;
isRandomAngle = true;
randomAngle = 120f;
rescanTime = 0.5f;
escapeTime = 10f;
isRespawn = true;
respawnTime = 5f;
randomDirectionChange = true;
minDirectionChangeInterval = 1f;
maxDirectionChangeInterval = 3f;
directionChangeInterval = 3f;
escapeMode = EscapeMode.ZIGZAG;
randomZigzag = false;
zigzagAmplitude = 0.5f;
zigzagFrequency = 1f;
}
[HorizontalGroup("Split")]
[Button("프리셋 3번")]
private void Preset3()
{
isDrawGizmos = true;
viewRadius = 20f;
moveSpd = 500f;
rotationSpeed = 10f;
isRandomAngle = true;
randomAngle = 120f;
rescanTime = 0.5f;
escapeTime = 10f;
isRespawn = true;
respawnTime = 5f;
randomDirectionChange = true;
minDirectionChangeInterval = 1f;
maxDirectionChangeInterval = 3f;
directionChangeInterval = 3f;
escapeMode = EscapeMode.ZIGZAG;
randomZigzag = true;
minZigzagAmplitude = 0.1f;
maxZigzagAmplitude = 2f;
minZigzagFrequency = 0.1f;
maxZigzagFrequency = 2f;
}
#endregion
private void Awake()
{
if (autoInit)
{
Init();
}
}
private void OnEnable()
{
hitColliders = new Collider[MAX_HIT_NUM];
findCoroutineTime = new WaitForSeconds(rescanTime);
if (findTargetCoroutine != null) return;
findTargetCoroutine = StartCoroutine(FindTargetCoroutine());
}
private void Start()
{
spawnPos = transform.position;
}
private IEnumerator FindTargetCoroutine()
{
while (true)
{
var size = Physics.OverlapSphereNonAlloc(transform.position, viewRadius, hitColliders, targetLayer);
for (var i = 0; i < size; i++)
{
var hitCollider = hitColliders[i];
if (hitCollider == null || !hitCollider.CompareTag("ShipPlayer")) continue;
findTargetCoroutine = null;
escapeCoroutine = StartCoroutine(EscapeCoroutine(hitCollider));
yield break;
}
yield return findCoroutineTime;
}
}
private IEnumerator EscapeCoroutine(Collider targetCollider)
{
var currentDirectionChangeInterval = randomDirectionChange ?
UnityEngine.Random.Range(minDirectionChangeInterval, maxDirectionChangeInterval)
: directionChangeInterval;
var rotatedEscapeDirection = CalculateEscapeDirection(targetCollider.transform.position);
var time = 0f;
var directionChangeTime = 0f;
while (time < escapeTime)
{
time += Time.deltaTime;
directionChangeTime += Time.deltaTime;
if (directionChangeTime >= currentDirectionChangeInterval)
{
rotatedEscapeDirection = CalculateEscapeDirection(targetCollider.transform.position);
directionChangeTime = 0f;
currentDirectionChangeInterval = randomDirectionChange ?
UnityEngine.Random.Range(minDirectionChangeInterval, maxDirectionChangeInterval)
: directionChangeInterval;
if (escapeMode == EscapeMode.ZIGZAG && randomZigzag)
{
zigzagFrequency = UnityEngine.Random.Range(minZigzagFrequency, maxZigzagFrequency);
zigzagAmplitude = UnityEngine.Random.Range(minZigzagAmplitude, maxZigzagAmplitude);
}
}
var newDirection = escapeMode switch
{
EscapeMode.NONE => throw new ArgumentOutOfRangeException(),
EscapeMode.STRAIGHT => rotatedEscapeDirection,
EscapeMode.ZIGZAG => rotatedEscapeDirection +
new Vector3(Mathf.Sin(Time.time * zigzagFrequency) * zigzagAmplitude,0,
Mathf.Sin(Time.time * zigzagFrequency) * zigzagAmplitude),
EscapeMode.TOWARDS => -rotatedEscapeDirection,
_ => throw new ArgumentOutOfRangeException()
};
rb.velocity = newDirection.normalized * (moveSpd * Time.deltaTime);
var targetRotation = Quaternion.LookRotation(newDirection);
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, rotationSpeed * Time.deltaTime);
yield return null;
}
rb.velocity = Vector3.zero;
escapeCoroutine = null;
if (isRespawn)
{
FishManager.Inst.RespawnFish(gameObject, respawnTime, spawnPos);
}
gameObject.SetActive(false);
}
private Vector3 CalculateEscapeDirection(Vector3 targetPos)
{
var escapeDirection = (transform.position - targetPos).normalized;
escapeDirection.y = 0;
if (!isRandomAngle) return escapeDirection;
var randomRotationAngle = UnityEngine.Random.Range(-randomAngle * 0.5f, randomAngle * 0.5f);
var rotation = Quaternion.Euler(0, randomRotationAngle, 0);
return rotation * escapeDirection;
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: a0f3e1c9930c204498f3a86452337290
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,22 @@
using System.Collections;
using UnityEngine;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
public class FishManager : Singleton<FishManager>
{
public void RespawnFish(GameObject fish, float delay, Vector3 respawnPos)
{
StartCoroutine(RespawnFishCoroutine(fish, delay, respawnPos));
}
private IEnumerator RespawnFishCoroutine(GameObject fish, float delay, Vector3 respawnPos)
{
yield return new WaitForSeconds(delay);
fish.transform.position = respawnPos;
fish.SetActive(true);
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 67eb8043df0bfce42aa24c9ec130227a
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -17,7 +17,7 @@ PhysicsManager:
m_EnableAdaptiveForce: 0
m_ClothInterCollisionDistance: 0.1
m_ClothInterCollisionStiffness: 0.2
m_LayerCollisionMatrix: 040000001000000001000000502622003a262282100000000800000000000000000000001826220218262000000000000000000018262000000000000000000000000000180200000000000000000000000000001826000200000000000000000000000010022000000000000000000000000000000000000000000010000000
m_LayerCollisionMatrix: 04000000100000000100000050a622003a262282100000000800000000000000000000001826220218262000000000000000000018262000000000000800000200000000180200000000000000000000000000001826000200000000000000000000000010822000000000000000000000000000000000000000000010000000
m_SimulationMode: 0
m_AutoSyncTransforms: 0
m_ReuseCollisionCallbacks: 0

View File

@ -37,7 +37,7 @@ TagManager:
-
- Enemy
-
-
- Fish
-
- Npc
-