2026-05-22 카메라 쉐이크
This commit is contained in:
BIN
Assets/01_Scenes/BossScene.unity
LFS
BIN
Assets/01_Scenes/BossScene.unity
LFS
Binary file not shown.
@@ -8,6 +8,9 @@ public class EarthquakeSkill : BossSkill
|
|||||||
[SerializeField] private float _activeDuration = 1.5f; // 피해 판정 유지 시간
|
[SerializeField] private float _activeDuration = 1.5f; // 피해 판정 유지 시간
|
||||||
[SerializeField] private float _recovery = 0.6f; // 판정 OFF 후 후딜
|
[SerializeField] private float _recovery = 0.6f; // 판정 OFF 후 후딜
|
||||||
[SerializeField] private int _damage = 15;
|
[SerializeField] private int _damage = 15;
|
||||||
|
[Header("Camera Shake")]
|
||||||
|
[SerializeField] private float _cameraShakeDuration = 0.5f;
|
||||||
|
[SerializeField] private float _cameraShakeStrength = 0.5f;
|
||||||
[SerializeField] private float _liftForce = 0.5f; // 지면 피격 시 띄우는 세기
|
[SerializeField] private float _liftForce = 0.5f; // 지면 피격 시 띄우는 세기
|
||||||
|
|
||||||
protected override async Awaitable RunSkill(CancellationToken token)
|
protected override async Awaitable RunSkill(CancellationToken token)
|
||||||
@@ -33,6 +36,8 @@ private void Earthquake()
|
|||||||
PlayerController player = GameManager.Instance.LocalPlayer;
|
PlayerController player = GameManager.Instance.LocalPlayer;
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
|
|
||||||
|
ShakeCamera();
|
||||||
|
|
||||||
// 플레이어가 지면에 닿아 있을 때만 발동. 공중이면 아무 효과 없음.
|
// 플레이어가 지면에 닿아 있을 때만 발동. 공중이면 아무 효과 없음.
|
||||||
if (!player.IsGrounded) return;
|
if (!player.IsGrounded) return;
|
||||||
|
|
||||||
@@ -40,4 +45,37 @@ private void Earthquake()
|
|||||||
player.Launch(new Vector2(0f, _liftForce));
|
player.Launch(new Vector2(0f, _liftForce));
|
||||||
player.TakeDamage(_damage);
|
player.TakeDamage(_damage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async void ShakeCamera()
|
||||||
|
{
|
||||||
|
if (_cameraShakeDuration <= 0f || _cameraShakeStrength <= 0f) return;
|
||||||
|
|
||||||
|
Camera mainCamera = Camera.main;
|
||||||
|
if (mainCamera == null) return;
|
||||||
|
|
||||||
|
Transform cameraTransform = mainCamera.transform;
|
||||||
|
Vector3 previousOffset = Vector3.zero;
|
||||||
|
float elapsed = 0f;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
while (elapsed < _cameraShakeDuration)
|
||||||
|
{
|
||||||
|
float fade = 1f - elapsed / _cameraShakeDuration;
|
||||||
|
Vector2 offset = Random.insideUnitCircle * (_cameraShakeStrength * fade);
|
||||||
|
Vector3 currentOffset = new Vector3(offset.x, offset.y, 0f);
|
||||||
|
cameraTransform.localPosition += currentOffset - previousOffset;
|
||||||
|
previousOffset = currentOffset;
|
||||||
|
|
||||||
|
await Awaitable.NextFrameAsync(destroyCancellationToken);
|
||||||
|
elapsed += Time.deltaTime;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (System.OperationCanceledException) { }
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
if (cameraTransform != null)
|
||||||
|
cameraTransform.localPosition -= previousOffset;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1972,6 +1972,32 @@ AnimatorState:
|
|||||||
m_MirrorParameter:
|
m_MirrorParameter:
|
||||||
m_CycleOffsetParameter:
|
m_CycleOffsetParameter:
|
||||||
m_TimeParameter:
|
m_TimeParameter:
|
||||||
|
--- !u!1102 &2586254138909662861
|
||||||
|
AnimatorState:
|
||||||
|
serializedVersion: 6
|
||||||
|
m_ObjectHideFlags: 1
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_Name: GroundSlam2
|
||||||
|
m_Speed: 1
|
||||||
|
m_CycleOffset: 0
|
||||||
|
m_Transitions: []
|
||||||
|
m_StateMachineBehaviours: []
|
||||||
|
m_Position: {x: 50, y: 50, z: 0}
|
||||||
|
m_IKOnFeet: 0
|
||||||
|
m_WriteDefaultValues: 1
|
||||||
|
m_Mirror: 0
|
||||||
|
m_SpeedParameterActive: 0
|
||||||
|
m_MirrorParameterActive: 0
|
||||||
|
m_CycleOffsetParameterActive: 0
|
||||||
|
m_TimeParameterActive: 0
|
||||||
|
m_Motion: {fileID: 7400000, guid: 1ceaa33c995f9ba4fa4e981a1ad755ba, type: 2}
|
||||||
|
m_Tag:
|
||||||
|
m_SpeedParameter:
|
||||||
|
m_MirrorParameter:
|
||||||
|
m_CycleOffsetParameter:
|
||||||
|
m_TimeParameter:
|
||||||
--- !u!1102 &2669098690014596114
|
--- !u!1102 &2669098690014596114
|
||||||
AnimatorState:
|
AnimatorState:
|
||||||
serializedVersion: 6
|
serializedVersion: 6
|
||||||
@@ -3237,6 +3263,9 @@ AnimatorStateMachine:
|
|||||||
- serializedVersion: 1
|
- serializedVersion: 1
|
||||||
m_State: {fileID: -9013432840856765531}
|
m_State: {fileID: -9013432840856765531}
|
||||||
m_Position: {x: 2900, y: 440, z: 0}
|
m_Position: {x: 2900, y: 440, z: 0}
|
||||||
|
- serializedVersion: 1
|
||||||
|
m_State: {fileID: 2586254138909662861}
|
||||||
|
m_Position: {x: 2480, y: 360, z: 0}
|
||||||
m_ChildStateMachines: []
|
m_ChildStateMachines: []
|
||||||
m_AnyStateTransitions: []
|
m_AnyStateTransitions: []
|
||||||
m_EntryTransitions: []
|
m_EntryTransitions: []
|
||||||
|
|||||||
BIN
Assets/03_Character/WhiteMan/Animations/GroundSlam_Cast.anim
LFS
Normal file
BIN
Assets/03_Character/WhiteMan/Animations/GroundSlam_Cast.anim
LFS
Normal file
Binary file not shown.
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 1ceaa33c995f9ba4fa4e981a1ad755ba
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 7400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
Binary file not shown.
Reference in New Issue
Block a user