#70 물고기 Ai 추가
+ Fish Layer 추가 + 물고기 프리셋 기능 추가 + FishManager(싱글톤) 추가 ㄴ 현재는 리스폰 관련 기능만 존재
This commit is contained in:
parent
f1804a6b0e
commit
2ff2da5682
@ -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}
|
||||
|
323
BlueWater/Assets/02.Scripts/Fish.cs
Normal file
323
BlueWater/Assets/02.Scripts/Fish.cs
Normal 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;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
11
BlueWater/Assets/02.Scripts/Fish.cs.meta
Normal file
11
BlueWater/Assets/02.Scripts/Fish.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a0f3e1c9930c204498f3a86452337290
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
22
BlueWater/Assets/02.Scripts/FishManager.cs
Normal file
22
BlueWater/Assets/02.Scripts/FishManager.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
11
BlueWater/Assets/02.Scripts/FishManager.cs.meta
Normal file
11
BlueWater/Assets/02.Scripts/FishManager.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 67eb8043df0bfce42aa24c9ec130227a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -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
|
||||
|
@ -37,7 +37,7 @@ TagManager:
|
||||
-
|
||||
- Enemy
|
||||
-
|
||||
-
|
||||
- Fish
|
||||
-
|
||||
- Npc
|
||||
-
|
||||
|
Loading…
Reference in New Issue
Block a user