728x90
728x90
안녕하세요! 이번 포스팅에서는 플레이어가 적과 충돌할 때의 반응을 설정하고, 간단한 공격 기능을 추가해보겠습니다. 이 과정에서 유니티의 충돌 감지와 기본 공격 시스템을 다뤄볼게요.
1. 플레이어와 적의 충돌 처리
적과의 충돌 시 플레이어에게 데미지를 입히거나 게임의 생명 시스템을 구현하여, 캐릭터가 적과 부딪힐 때 게임 오버 조건을 추가할 수 있습니다.
- HealthManager 스크립트 작성
- Assets > Scripts 폴더에 HealthManager라는 C# 스크립트를 생성합니다. 이 스크립트를 Player 오브젝트에 추가하여 플레이어의 생명 시스템을 관리하도록 설정합니다.
- 생명 변수와 데미지 처리 메서드 추가
using UnityEngine;
public class HealthManager : MonoBehaviour
{
public int maxHealth = 3;
private int currentHealth;
void Start()
{
currentHealth = maxHealth; // 초기 체력 설정
}
public void TakeDamage(int damage)
{
currentHealth -= damage;
if (currentHealth <= 0)
{
// 체력이 0 이하가 되면 플레이어 사망 처리
Die();
}
}
void Die()
{
// 사망 처리 로직 (예: 씬 다시 로드 또는 게임 오버 화면)
Debug.Log("Game Over!");
}
}
- maxHealth는 플레이어의 최대 체력을 설정하는 변수입니다.
- TakeDamage 메서드는 적과의 충돌 시 체력을 감소시키고, 체력이 0 이하가 되면 Die 메서드로 연결됩니다.
- Die() 메서드에는 사망 시 처리할 로직(예: 씬을 다시 시작하거나 게임 오버 화면으로 전환)을 추가할 수 있습니다.
3. 적과 충돌 시 데미지 입기
using UnityEngine;
public class EnemyAttack : MonoBehaviour
{
public int damage = 1; // 적의 공격력
void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("Player"))
{
HealthManager playerHealth = collision.gameObject.GetComponent<HealthManager>();
if (playerHealth != null)
{
playerHealth.TakeDamage(damage); // 플레이어에게 데미지
}
}
}
}
- Enemy 오브젝트에 적의 충돌을 감지할 스크립트를 추가합니다. EnemyAttack이라는 C# 스크립트를 작성하고, Enemy 오브젝트에 붙입니다.
- OnCollisionEnter2D 메서드에서 플레이어와의 충돌을 감지하고, 플레이어의 HealthManager 스크립트를 참조해 데미지를 입힙니다.
- Player 오브젝트에 Tag를 Player로 설정하여 충돌 체크가 원활하게 되도록 합니다.
2. 플레이어의 기본 공격 구현
플레이어가 적을 공격할 수 있는 기본 공격 기능을 추가하여, 적을 제거할 수 있도록 만들어보겠습니다.
- PlayerAttack 스크립트 작성
- PlayerAttack이라는 C# 스크립트를 생성하고, Player 오브젝트에 추가합니다.
- 공격 변수 및 공격 범위 설정
using UnityEngine;
public class PlayerAttack : MonoBehaviour
{
public Transform attackPoint;
public float attackRange = 0.5f;
public int attackDamage = 1;
public LayerMask enemyLayers;
void Update()
{
if (Input.GetKeyDown(KeyCode.Z))
{
Attack();
}
}
void Attack()
{
// 공격 범위 내 적 체크
Collider2D[] hitEnemies = Physics2D.OverlapCircleAll(attackPoint.position, attackRange, enemyLayers);
foreach (Collider2D enemy in hitEnemies)
{
enemy.GetComponent<EnemyHealth>().TakeDamage(attackDamage);
}
}
}
- attackPoint는 공격이 시작되는 위치를 나타내며, Empty Object를 만들어 플레이어 앞쪽에 위치시킵니다.
- attackRange는 공격 범위를 설정하고, enemyLayers는 공격 대상이 되는 적의 레이어입니다.
- OverlapCircleAll 함수는 공격 범위 내의 모든 적을 감지하고, 감지된 적들에게 데미지를 줍니다.
3. 적 체력 시스템 구현
using UnityEngine;
public class EnemyHealth : MonoBehaviour
{
public int health = 2;
public void TakeDamage(int damage)
{
health -= damage;
if (health <= 0)
{
Die();
}
}
void Die()
{
Destroy(gameObject); // 적 오브젝트 제거
}
}
- EnemyHealth 스크립트를 작성하여 적의 체력을 관리하도록 합니다. 이 스크립트를 Enemy 오브젝트에 추가합니다.
- 적이 플레이어의 공격을 받아 health가 0 이하로 떨어지면 Die() 메서드가 호출되고, 적이 게임에서 제거됩니다.
4. 공격 포인트 설정
- Player 오브젝트 하단에 Empty Object를 생성하여 attackPoint로 이름을 설정하고, PlayerAttack 스크립트의 attackPoint 필드에 연결합니다.
3. 테스트 및 조정
- 플레이 모드에서 테스트
- Play 모드에서 Z 키를 눌러 플레이어가 공격하는지 확인합니다. 공격 시, 범위 내 적이 체력을 잃고 제거되는지 확인하세요.
- 공격 범위와 데미지 조정
- PlayerAttack 스크립트에서 attackRange와 attackDamage 값을 조정하여 공격 범위와 데미지를 테스트하고, 적의 난이도에 맞게 최적화해보세요.
다음 포스팅에서는 점프와 공격 애니메이션을 추가해 캐릭터의 움직임을 더욱 생동감 있게 만들어보겠습니다.
728x90
'유니티 > 플랫폼 게임 만들기' 카테고리의 다른 글
유니티로 슈퍼마리오 같은 게임 만들기 #7 - 체력바와 게임 오버 화면 추가하기 (0) | 2024.11.04 |
---|---|
유니티로 슈퍼마리오 같은 게임 만들기 #6 - 캐릭터 애니메이션 추가하기 (0) | 2024.11.04 |
유니티로 슈퍼마리오 같은 게임 만들기 #4 – 적 캐릭터 추가와 플레이어 추적 기능 구현 (1) | 2024.10.30 |
유니티로 슈퍼마리오같은 게임 만들기 #3 - 플레이어 점프와 바닥 충돌 구현 (0) | 2024.10.28 |
유니티로 슈퍼마리오같은 게임 만들기 #2 – 플레이어 캐릭터 추가 및 이동 구현 (1) | 2024.10.26 |