EerieVillage/Assets/Scripts/Gameplay/PlayerDeath.cs

46 lines
1.8 KiB
C#

using System.Collections;
using System.Collections.Generic;
using Platformer.Core;
using Platformer.Model;
using UnityEngine;
namespace Platformer.Gameplay
{
/// <summary>
/// Fired when the player has died.
/// </summary>
/// <typeparam name="PlayerDeath"></typeparam>
public class PlayerDeath : Simulation.Event<PlayerDeath>
{
PlatformerModel model = Simulation.GetModel<PlatformerModel>();
public override void Execute()
{
var player = model.player;
if (player.health.IsAlive)
{
player.health.Die();
model.virtualCamera.Follow = null;
model.virtualCamera.LookAt = null;
// player.collider.enabled = false;
player.controlEnabled = false;
if (player.audioSource && player.ouchAudio)
player.audioSource.PlayOneShot(player.ouchAudio);
// PD 지시 2026-05-13 — 사망 모션 시각 위치 보정 y -0.3 (sprite 위로 떠 보이는 현상 정정)
player.transform.position += new Vector3(0f, -0.3f, 0f);
// PD 지시 2026-05-13 — Player 사망 시 사라지는 현상 fix — Rigidbody2D.simulated=false (gravity 정지·제자리 사망·낙사 차단)
var body = player.GetComponent<Rigidbody2D>();
if (body != null) body.simulated = false;
// PD 지시 2026-05-13 — Player.controller parameter 정합 "hit" Trigger (구 "hurt" parameter 부재) + UnscaledTime
player.animator.updateMode = AnimatorUpdateMode.UnscaledTime;
player.animator.SetTrigger("hit");
player.animator.SetBool("dead", true);
Simulation.Schedule<PlayerSpawn>(2);
}
}
}
}