Unity Chapter 11-7. 좀비 TPS 게임 만들기 : IDamageable + DamageMessage

Date:     Updated:

카테고리:

태그:

인프런에 있는 이제민님의 레트로의 유니티 C# 게임 프로그래밍 에센스 강의를 듣고 정리한 필기입니다. 😀
🌜 [레트로의 유니티 C# 게임 프로그래밍 에센스] 강의 들으러 가기!


Chapter 11. 좀비 TPS 게임 만들기

Gun Pivot 오브젝트

  • Player Character에 빈 게임 오브젝트를 추가해준다.
    • 이름은 Gun Pivot

이후에 추가될 Gun 오브젝트를 정리해서 넣어두기 위한 역할만 할 뿐 그 이상의 기능은 없다.

  • Position을 플레이어의 가슴 위치 정도인 (0, 1.3, 0)으로 지정해주자.


📜IDamageable.cs 인터페이스

  • 플레이어가 공격했을 때 아이템마다 반응이 다 다르다.
    • 예를 들어 좀비를 공격했을 땐 좀비가 어떤 애니메이션과 함께 체력이 깎일 것이고, 그냥 상자 오브젝트를 공격한다면 상자가 깨지면서 아이템을 준다던지 등등
  • 가장 안좋은 구현 방법 👉 아이템 종류마다 일일이 반응을 다르게 처리해주는 것.
  • 인터페이스, 다형성을 통하여 인수로 받는 아이템의 종류에 알맞는 반응을 보이게끔 구현하는 것이 가장 효율적이다.

📜IDamageable 👉 공격 받을 수 있는 모든 아이템이 이 인터페이스를 상속받을 수 있도록.

public interface IDamageable
{
    bool ApplyDamage(DamageMessage damageMessage);
}
  • 📜IDamageable 를 상속받는 모든 자식 클래스들은 반드시 ApplyDamage 함수를 재정의 하여야 한다.
    • 공격받을 수 있는 모든 아이템들은 위 함수를 모두 가지고 있게 됨
    • 리턴 타입이 bool인 이유 👉 공격 성공 실패 여부를 나타냄
    • DamageMessage 타입의 오브젝트를 인수로 받는다


📜DamageMessage.cs

using UnityEngine;

public struct DamageMessage
{
    public GameObject damager;
    public float amount;

    public Vector3 hitPoint;
    public Vector3 hitNormal;
}
  • 공격을 한 측에서 공격을 당하는 측에게 전달하는 정보가 포함되어 있는 구조체
    • 공격을 가한 오브젝트 damager
    • 공격량 amount
    • 공격을 가한 위치 hitPoint
    • 공격을 가한 평면의 노말 벡터(방향) hitNormal
  • 클래스가 아닌 구조체로 지정한 이유 ⭐
    • 클래스는 Reference 타입이기 때문에 (Call by Reference) 메세지를 전달 받은 측에서 DamageMessage를 임의로 수정하면 메세지를 전달 받은 또 다른 측에도 영향이 가기 때문이다.
    • 구조체는 Value 타입이기 때문에 (Call by Value) 메세지를 전달 받은 측에서 DamageMessage를 임의로 수정하더라도 메세지를 전달 받은 또 다른 측에도 영향이 가지 않는다.


플레이어 캐릭터 프리팹으로 만들기

플레이어를 게임 도중 복제하여 생성할 일이 있을 때를 대비해서

  • Player Character를 📂Assets/Prefabs 에 드래그 앤 드롭
    • Original Prefab 을 선택해주어 완전히 새로운 프리팹으로서 추가해준다.
    • Prefab Variant 는 이미 존재 하는 프리팹의 또 다른 버전을 만드는 것.
      • 이걸 선택하면 Player Character의 기반이 되는 3 D 모델의 다른 버전으로서 프리팹이 추가 됨. 우리가 원하는게 아님.


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기


Unity Lesson 1 카테고리 내 다른 글 보러가기

댓글 남기기