[NProject] 마음대로 만드는 게임 - 10. 아이템을 만들어 보자! 4

2024. 5. 20. 13:49· Develop/마음대로 만드는 게임
728x90

아이템의 구현이 끝났다면, 이제 플레이어의 상호작용을 구현해야한다.

일단, 이전에 작성했던, PlayerManager를 열어보자.

이전에 우리가 코딩한건 Update 안에 코딩을 했었다. 이번엔 Update함수 바로 아래에 다음과 같이 코딩을 해주자.

//위는 Update문이다

private void OnTriggerStay2D(Collider2D other) {
	if(other.tag == "Item"){
		if(Input.GetKeyDown(KeyCode.Space)){
			print(other.name);
		}
	}
}

OnTriggerStay2D함수를 사용했다.

 

함수에 대해 잠깐 설명하자면

유니티에서는 입력을 받거나, 콜라이더, 트리거 같은 함수에는 종류가 있다.

모두 다 충돌했을때, 충돌중일때, 충돌이 끝났을때 총 세가지 함수가 따로 있다.

콜라이더는 OnCollisionStay, OnCollisionEnter, OnCollisionExit 가 있고,

트리거는 OnTriggerStay, OnTriggerEnter, OnTriggerExit가 있다.

모두 2D에서 사용할땐, 마지막에 2D를 붙여주면 된다.

버튼도 마찬가지로

Input.GetKey, Input.GetKeyDown, Input.GetKeyUp가 있다.

차례대로 키를 누르는중, 키를 눌렀을때, 키에서 손을 땟을때가 있다.

 

따라서 위의 코드는 트리거에 닿는 도중에 처리할 함수들이고, 매개변수로 other를 받는다.

other는 우리가 충돌한 객체의 정보가 담긴다. 오브젝트 자체가 담기는것이라고 생각하면 된다.

이후, if문에서 other의 테그를 비교한다.

충돌한 객체의 테그가 Item인경우, (우리가 이전에 테그를 설정해둔 이유가 여기서 나온다!) space키를 눌렀을 때, 오브젝트의 이름을 로그에 찍어서 잘 인식되고 있는지 확인하는 코드였다!

잘 인식되는것 같으니 이제 다음 작업을 해보자.

 

아이템을 습득하면 인벤토리에 아이템을 추가해야하고, 맵에 존재하고 있던 아이템을 삭제해야한다.

이것을 구현해보자.

 

일단, 아이템을 넣을 인벤토리가 필요하다.

GameManager라는 이름의 스크립트를 생성해주자.

게임 메니저는 유니티에서 자동으로 톱니바퀴 모양의 아이콘으로 변경해준다. (이름을 정확히 GameManager로 설정해야한다.)

 

이후, 게임매니저의 스크립트에는 다음과 같이 코딩하자.

using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;

public class GameManager : MonoBehaviour
{
    #region Instance
    private static GameManager _instance;
    public static GameManager Instance{
        get{
            if(_instance == null) _instance = FindObjectOfType(typeof(GameManager)) as GameManager;
            return _instance;
        }
    }
    #endregion

    [SerializeField] List<Item> inventory = new List<Item>();

    public void AddInventoryItem(Item item){
        inventory.Add(item);
    }
    public void DeleteInventoryItem(Item item){
        inventory.Remove(item);
    }
}

 

일단 Update, Start를 지워주고, 어디서든지 GameManager를 불러올 수 있게 하기위해 싱글톤을 구현해주었다.

Instacne region에 있는 부분이 싱글톤 구문이다.

저 구조는 처음에 이해할 수 없으니 일단 외우자.

쉽게 말하자면, _instacne가 비어있다면 현재 스크립트를 _instance에 넣어주고, Instance에 넣어주는 구문이다.

이렇게 하면 GameManager에서 public으로 선언된 함수나 변수를 외부 스크립트에서 Instance로 불러올 수 있게 된다.

이후, inventory리스트에 아이템을 추가 삭제하는 함수를 구현해주었다.

 

게임매니저 스크립트를 만들어 준 후, 게임오브젝트에 스크립트를 추가해주어야한다.

빈 오브젝트 하나를 하이어라키창에 추가한 후 스크립트를 추가해주자.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ItemManager : MonoBehaviour
{
    [SerializeField] Item item;
    [SerializeField] Sprite item_img;

    private void Start() {
        item_img = null; //나중에 이미지는 아이템 코드를 이름으로 하여 직접 불러올 수 있도록 할 계획
    }

    public Item ReturnItem(){
        return item;
    }
}

그리고 ItemManager에 item을 가져올 수 있게 ReturnItem이라는 코드를 넣어줬다.

 

그리고 PlayerManager에 아까 했던 코드를 수정해주자.

private void OnTriggerStay2D(Collider2D other) {
    if(other.tag == "Item"){ //태그 확인
        if(Input.GetKey(KeyCode.Space)){ //아이템 습득 키 확인
            GameManager.Instance.AddInventoryItem(other.GetComponent<ItemManager>().ReturnItem()); //인벤토리에 아이템 추가
            print("아이템 추가됨");
            Destroy(other.gameObject); //인벤토리에 추가해줬으니, 오브젝트를 삭제
        }
    }
}

 

테스트 하기 전에, 인벤토리에 잘 들어가고 있는지 확인해보기 위해 아이템의 정보를 좀 수정해주자.

이렇게 수정해주었다. 

글씨가 볼드체로 바뀔텐데, 이건 원본을 수정한게 아니라 복사본을 수정했기 때문이다.

원본은 우리가 이전에 만들어뒀던 프리펩 폴더의 오브젝트가 원본이고, 지금 하이어라키창에 있는 오브젝트는 복사본이다.

 

이렇게 수정해줬다면 이제 아까 했던대로 아이템에 올라가 스페이스바를 눌러보자.

이렇게 잘 추가된것을 알 수 있다.

이제 아이템을 추가했으니 다음엔 인벤토리에 추가하는것을 구현해보자.

728x90
저작자표시

'Develop > 마음대로 만드는 게임' 카테고리의 다른 글

[NProject] 마음대로 만드는 게임 - 12. 슬롯 수정 1  (0) 2024.05.20
[NProject] 마음대로 만드는 게임 - 11. 인벤토리 기능 추가  (0) 2024.05.20
[NProject] 마음대로 만드는 게임 - 9. 아이템을 만들어 보자! 3  (0) 2024.05.20
[NProject] 마음대로 만드는 게임 - 8. 아이템을 만들어 보자! 2  (0) 2024.05.16
[NProject] 마음대로 만드는 게임 - 7. 아이템을 만들어 보자! 1  (1) 2024.05.15
'Develop/마음대로 만드는 게임' 카테고리의 다른 글
  • [NProject] 마음대로 만드는 게임 - 12. 슬롯 수정 1
  • [NProject] 마음대로 만드는 게임 - 11. 인벤토리 기능 추가
  • [NProject] 마음대로 만드는 게임 - 9. 아이템을 만들어 보자! 3
  • [NProject] 마음대로 만드는 게임 - 8. 아이템을 만들어 보자! 2
LKM0222
LKM0222
Unity를 중점적으로 공부하는중입니다. 개인 깃허브 https://github.com/LKM0222 Nitros 소속
250x250
LKM0222
한량
LKM0222

블로그 메뉴

  • 홈
  • 분류 전체보기 (120)
    • Develop (54)
      • Unity (24)
      • Firebase (4)
      • Dialogflow (3)
      • Dialog System (4)
      • 마음대로 만드는 게임 (16)
      • Imitation_MineCraft (2)
      • 아무도 볼 수 없는 보물창고 (0)
    • Study (64)
      • TCP_IP (2)
      • CodingTest (47)
      • 정보처리기사 (13)
      • Unreal Engine (1)
전체
오늘
어제
05-11 12:22

인기 글

태그

  • rkad

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
LKM0222
[NProject] 마음대로 만드는 게임 - 10. 아이템을 만들어 보자! 4
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.