52 lines
1.4 KiB
C#
52 lines
1.4 KiB
C#
using UnityEngine;
|
|
|
|
public class DestructibleBlock : MonoBehaviour
|
|
{
|
|
[Header("파편 효과 설정")]
|
|
[SerializeField]
|
|
private GameObject[] debrisPrefabs;
|
|
[SerializeField]
|
|
private int debrisCount = 5;
|
|
[SerializeField]
|
|
private float explosionForce = 5f;
|
|
|
|
private void OnDestroy()
|
|
{
|
|
if (!gameObject.scene.isLoaded)
|
|
{
|
|
return;
|
|
}
|
|
|
|
SpawnDebris();
|
|
}
|
|
|
|
private void SpawnDebris()
|
|
{
|
|
if (debrisPrefabs == null || debrisPrefabs.Length == 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
for (int i = 0; i < debrisCount; i++)
|
|
{
|
|
// 랜덤한 파편 선택
|
|
GameObject prefab = debrisPrefabs[Random.Range(0, debrisPrefabs.Length)];
|
|
|
|
// 블록 위치 근처에서 생성
|
|
Vector2 randomPos = (Vector2)transform.position + Random.insideUnitCircle * 0.5f;
|
|
GameObject debris = Instantiate(prefab, randomPos, Quaternion.identity);
|
|
|
|
// 펑! 하고 튕겨나가는 힘 적용
|
|
Rigidbody2D rb = debris.GetComponent<Rigidbody2D>();
|
|
if (rb != null)
|
|
{
|
|
Vector2 dir = (randomPos - (Vector2)transform.position).normalized;
|
|
dir += Random.insideUnitCircle * 0.5f; // 방향 랜덤성 추가
|
|
rb.AddForce(dir.normalized * explosionForce, ForceMode2D.Impulse);
|
|
}
|
|
|
|
// 파편은 2초 뒤에 스스로 사라짐
|
|
Destroy(debris, 2f);
|
|
}
|
|
}
|
|
} |