Unity Chapter 11-18. 좀비 TPS 게임 만들기 : Item
카테고리: Unity Lesson 1
태그: Unity Game Engine
인프런에 있는 이제민님의 레트로의 유니티 C# 게임 프로그래밍 에센스 강의를 듣고 정리한 필기입니다. 😀
🌜 [레트로의 유니티 C# 게임 프로그래밍 에센스] 강의 들으러 가기!
Chapter 11. 좀비 TPS 게임 만들기
📜Rotator.cs
아이템의 종류들인
AmmoPack
,Coin
,HealthPack
들은 계속해서 제자리에서 빙글빙글 회전하는 모양새를 띌 것이기 때문에 이 스크립트를 붙여줄 것이다.
using UnityEngine;
public class Rotator : MonoBehaviour
{
public float rotationSpeed = 60f; // 초당 회전 속도
private void Update()
{
transform.Rotate(0f, rotationSpeed * Time.deltaTime, 0f); // y 축으로 1 초에 60도씩 회전
}
}
- private void Update()
- y 축을 중심으로(수평으로) 1초에 60도만큼 계속해서 회전.
📜IItem.cs
종류별 아이템들의 공통적인 인터페이스 👉
Use
함수
- 아이템인지 아닌지를 알고 싶다면 그저
IItem
타입인지를 보면 된다. (다형성) - 인터페이스이므로 이를 상속받는 모든 아이템 종류들이 반드시 구현해야하는 인터페이스
Use
함수를 오버라이딩 해야 한다.
using UnityEngine;
// 아이템 타입들이 반드시 구현해야하는 인터페이스
public interface IItem
{
// 입력으로 받는 target은 아이템 효과가 적용될 대상
void Use(GameObject target);
}
- 📜IItem.cs
- 📜AmmoPack.cs
- 📜Coin.cs
- 📜HealthPack.cs
Use
함수target
은 아이템 효과가 적용될 대상
📜AmmoPack.cs
- 🟦AmmoPack 프리팹은 Sphere Collider 컴포넌트를 가지고 있어 OnTrigger 같은 이벤트를 통해 플레이어가 아이템을 감지할 수 있다.
- 🟦AmmoPack 프리팹은 Light 컴포넌트를 가지고 있어 주변이 환해지는 효과를 가지고 있다. 아이템을 쉽게 식별할 수 있도록!
- 🟦AmmoPack 프리팹은 📜Rotator.cs 스크립트가 붙어있어 계속해서 제자리에서 빙글빙글 회전하는 모양을 가진다.
using UnityEngine;
public class AmmoPack : MonoBehaviour, IItem
{
public int ammo = 30;
public void Use(GameObject target)
{
var playerShooter = target.GetComponent<PlayerShooter>();
if (playerShooter != null && playerShooter.gun != null)
{
playerShooter.gun.ammoRemain += ammo;
}
Destroy(gameObject);
}
}
📜IItem.cs 상속 👉
Use
함수 오버라이딩
target
- 이 아이템을 먹은 사람. 즉, 이 아이템을 사용하는 사람.
Player Character
가 될 것.
- 이 아이템을 먹은 사람. 즉, 이 아이템을 사용하는 사람.
ammo
- 이 아이템을 먹은 플레이어에게 추가할 총알 양
- 이 아이템을 먹은 플레이어의 탄약 양을
ammo
만큼 추가하자.target
의 📜PlayerShooter 스크립트 가져오기- 이 스크립트에 플레이어가 총을 쏘거나 재장전 하는 것에 대한 기능이 담겨 있어서.
- 📜PlayerShooter 스크립트를 무사히 가져오고 총도 존재한다면
- if (playerShooter != null && playerShooter.gun != null)
- 플레이어의 총알 양을
ammo
만큼 더해주기- playerShooter.gun.ammoRemain += ammo;
- 플레이어의 총알 양을
- if (playerShooter != null && playerShooter.gun != null)
- 아이템을 먹었으니 이 아이템은 사라져야 함
- 스스로 자기자신을 파괴
- Destroy(gameObject)
- 스스로 자기자신을 파괴
📜Coin.cs
- 🟦Coin 프리팹은 Sphere Collider 컴포넌트를 가지고 있어 OnTrigger 같은 이벤트를 통해 플레이어가 아이템을 감지할 수 있다.
- 🟦Coin 프리팹은 Light 컴포넌트를 가지고 있어 주변이 환해지는 효과를 가지고 있다. 아이템을 쉽게 식별할 수 있도록!
- 🟦Coin 프리팹은 📜Rotator.cs 스크립트가 붙어있어 계속해서 제자리에서 빙글빙글 회전하는 모양을 가진다.
using UnityEngine;
public class Coin : MonoBehaviour, IItem
{
public int score = 200;
public void Use(GameObject target)
{
GameManager.Instance.AddScore(score);
Destroy(gameObject);
}
}
📜IItem.cs 상속 👉
Use
함수 오버라이딩
target
- 이 아이템을 먹은 사람. 즉, 이 아이템을 사용하는 사람.
Player Character
가 될 것.
- 이 아이템을 먹은 사람. 즉, 이 아이템을 사용하는 사람.
score
- 이 아이템을 먹는다면 증가시킬 점수 양
- GameManager 싱글톤을 사용하여 점수를 더해준 후
- GameManager.Instance.AddScore(score);
- 아이템을 먹었으니 이 아이템은 사라져야 함
- 스스로 자기자신을 파괴
- Destroy(gameObject)
- 스스로 자기자신을 파괴
📜HealthPack.cs
- 🟦HealthPack 프리팹은 Sphere Collider 컴포넌트를 가지고 있어 OnTrigger 같은 이벤트를 통해 플레이어가 아이템을 감지할 수 있다.
- 🟦HealthPack 프리팹은 Light 컴포넌트를 가지고 있어 주변이 환해지는 효과를 가지고 있다. 아이템을 쉽게 식별할 수 있도록!
- 🟦HealthPack 프리팹은 📜Rotator.cs 스크립트가 붙어있어 계속해서 제자리에서 빙글빙글 회전하는 모양을 가진다.
using UnityEngine;
// 체력을 회복하는 아이템
public class HealthPack : MonoBehaviour, IItem
{
public float health = 50; // 체력을 회복할 수치
public void Use(GameObject target)
{
// 전달받은 게임 오브젝트로부터 LivingEntity 컴포넌트 가져오기 시도
var life = target.GetComponent<LivingEntity>();
// LivingEntity컴포넌트가 있다면
if (life != null)
// 체력 회복 실행
{
life.RestoreHealth(heealth);
}
// 사용되었으므로, 자신을 파괴
Destroy(gameObject);
}
}
📜IItem.cs 상속 👉
Use
함수 오버라이딩
target
- 이 아이템을 먹은 사람. 즉, 이 아이템을 사용하는 사람.
Player Character
가 될 것.
- 이 아이템을 먹은 사람. 즉, 이 아이템을 사용하는 사람.
health
- 체력을 회복할 수치
- 전달받은 게임 오브젝트
target
로부터 LivingEntity 컴포넌트 가져오기- LivingEntity컴포넌트가 있다면 체력 회복 실행
- 📜LivingEntity.cs의 RestoreHealth 함수 실행
- 📜LivingEntity.cs를 사용하기 때문에 📜LivingEntity를 상속 받는 좀비도 `target`으로 넘겨주면 이 HealthPack 아이템으로 체력을 회복할 수 있다는 얘기다
- 물론
Player Character
만 아이템으로 체력을 회복할 수 있도록 할 것임.
- 물론
- LivingEntity컴포넌트가 있다면 체력 회복 실행
- 아이템을 먹었으니 이 아이템은 사라져야 함
- 스스로 자기자신을 파괴
- Destroy(gameObject)
- 스스로 자기자신을 파괴
🔔 컴포넌트 설정
📂Assets/Prefabs/ 에서 각 프리팹에 스크립트를 붙여주도록 하자.
- 🟦AmmoPack
- 📜AmmoPack.cs 붙이기
- 📜Rotator 붙이기
- 🟦Coin
- 📜Coin.cs 붙이기
- 📜Rotator 붙이기
- 🟦HelathPack
- 📜HealthPack.cs 붙이기
- 📜Rotator 붙이기
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기