Unity Chapter 11-7. 좀비 TPS 게임 만들기 : IDamageable + DamageMessage
카테고리: Unity Lesson 1
태그: Unity Game Engine
인프런에 있는 이제민님의 레트로의 유니티 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
를 임의로 수정하더라도 메세지를 전달 받은 또 다른 측에도 영향이 가지 않는다.
- 클래스는 Reference 타입이기 때문에 (Call by Reference) 메세지를 전달 받은 측에서
플레이어 캐릭터 프리팹으로 만들기
플레이어를 게임 도중 복제하여 생성할 일이 있을 때를 대비해서
Player Character
를 📂Assets/Prefabs 에 드래그 앤 드롭- Original Prefab 을 선택해주어 완전히 새로운 프리팹으로서 추가해준다.
- Prefab Variant 는 이미 존재 하는 프리팹의 또 다른 버전을 만드는 것.
- 이걸 선택하면
Player Character
의 기반이 되는 3 D 모델의 다른 버전으로서 프리팹이 추가 됨. 우리가 원하는게 아님.
- 이걸 선택하면
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기