Unity Chapter 11-18. 좀비 TPS 게임 만들기 : Item

Date:     Updated:

카테고리:

태그:

인프런에 있는 이제민님의 레트로의 유니티 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;
  • 아이템을 먹었으니 이 아이템은 사라져야 함
    • 스스로 자기자신을 파괴
      • 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만 아이템으로 체력을 회복할 수 있도록 할 것임.
  • 아이템을 먹었으니 이 아이템은 사라져야 함
    • 스스로 자기자신을 파괴
      • Destroy(gameObject)


🔔 컴포넌트 설정

📂Assets/Prefabs/ 에서 각 프리팹에 스크립트를 붙여주도록 하자.

  • 🟦AmmoPack
    • 📜AmmoPack.cs 붙이기
    • 📜Rotator 붙이기
  • 🟦Coin
    • 📜Coin.cs 붙이기
    • 📜Rotator 붙이기
  • 🟦HelathPack
    • 📜HealthPack.cs 붙이기
    • 📜Rotator 붙이기


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

맨 위로 이동하기


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

댓글 남기기