목록unity (11)
zyeon's 작심삼일 코딩 공부
퀘스트의 이름과 그 퀘스트에 관련된 NPC ID 배열을 저장하는퀘스트 데이터 클래스를 작성한다.public class QuestData{ public string questName = ""; public int[] npcId = { }; public QuestData(string name, int[] id) { this.questName = name; this.npcId = id; }}블로그에서는 글이 너무 길어져 생략하지만퀘스트 매니저도 호출하기 쉽게 싱글톤으로 작성해주었다. public class QuestManager : MonoBehaviour{ public int questId; public int questActionIndex; ..
대화 시스템을 관리하는 클래스를 싱글톤 매니저로 만들어주었다. UI Manager 클래스이다./* UIManager.cs */public Text NPCName;public Text dialogText; public GameObject dialogPanel; public GameObject scanObject; // 스캔된 npc 오브젝트public DialogueData dialogue; // 대화 데이터public int dialogIdx = 0; // 현재 대화 인덱스public bool isDialogAction = true; // 대화 진행 중인지 확인bool isTyping = false // 대화 출력 중인지 확인 /* 싱글톤 코드 생략... */pu..
출력할 대화문 목록은 미리 스크립트에서 저장해야한다. 전부 [DialogueData.cs]에서 작성된 코드들이다./* DialogueData.cs */Dictionary m_dialogData;private void Awake(){ GenerateData();}void GenerateData(){ m_dialogData = new Dictionary(); //대화 data m_dialogData.Add(1000, new string[] { "안녕, 가디언!" }); m_dialogData.Add(2000, new string[] { "신입, 검술 연습은 잘 하고있어?" }); //퀘스트 data m_dialogData.Add(1000 + 10, new string[]..
전체적인 코드는 유튜브 골드메탈을 참고했다. 잘 안보이겠지만 마젠타 색상의 얇은 선이 레이캐스트이다.레이 캐스트로 'NPC' 태그 된 오브젝트 스캔 시 대화 버튼을 활성화 해주자.public class NPCData : MonoBehaviour{ public int id; public string ObjName;}우선 NPC에 id와 이름을 설정하기 위해서 스크립트를 만들어준다. 그 다음 NPC로 설정할 오브젝트의 태그를 'NPC'로 설정해주고, 정보도 넣어준다.이제 플레이어에서 레이캐스트로 NPC 오브젝트를 스캔할 수 있게 해준다./* PlayerMove.cs */[SerializeField] GameObject m_dialogueStartBtn; // 대화 시작 버튼GameObje..
상태 머신이란 특정 상태에 따라 다른 동작을 수행하는 구조를 의미한다. public enum PlayerState{ idle, move, hit, die,};PlayerState m_playerState;Animator m_playerAnimator;난 enum 열거형을 사용해 플레이어 상태 (idle, move, hit, die) 정의했다.PlayerState m_playerState는 현재 플레이어 상태를 저장할 변수이다. public void ChangeState(PlayerState newState){ if (m_playerState == newState) return; m_playerState = newState; switch (newState) { ..
나는 2D 캐릭터와 3D 배경을 가진 게임을 제작하였다.적합한 표현인지는 모르겠지만 편의상 2.5D 게임이라고 하겠다. 3D 오브젝트와 다르게, 보는 방향에 따라 플레이어 이미지를 달리 해줘야 한다. ▲보는 방향에 따라 다른 캐릭터 이미지나는 좌측/우측(Knight), 후방(Knight_back), 전방(Knight_front) 이미지를 가진 오브젝트를 미리 만들어 두고, 입력에 따라 오브젝트를 활성화, 비활성화 해주기로 했다.좌측 우측은 이미지를 뒤집어 주면 되기 때문에 한가지로 사용하였다. 이를 위해 열거형 Enum을 사용해 플레이어가 바라보는 방향을 나타내었다.//플레이어 방향enum PlayerLook{ front, back, left, right,};PlayerLook m_..
오브젝트 풀링은 객체 생성과 소멸에 따른 비용을 줄이기 위해, 객체들을 미리 생성한 후 사용하는 디자인 패턴이다.나는 반복적으로 나오는 장애물과 아이템에 이 오브젝트 풀링을 사용하였다.오브젝트 풀링은 코드의 유연성, 재사용성, 유지보수성을 높이기 위해 일반적으로 두 개 이상의 클래스를 사용하는 경우가 많다. Poolable 클래스풀에서 관리될 개별 오브젝트의 동작을 정의한다.using System.Collections;using System.Collections.Generic;using UnityEngine;public class Poolable : MonoBehaviour{ //자신이 속한 풀 참조, 상속을 통한 다양한 오브젝트 타입 구현 가능 protected ObjectPool m_po..
싱글톤 패턴은 특정 클래스의 인스턴스가 단 하나만 존재하도록 보장하는 디자인 패턴이다.게임 매니저 처럼 게임 내에서 전역적으로 하나만 존재해야 하는 관리 객체에서 자주 사용한다.우선 인스턴스는 클래스를 기반으로 실제 메모리에 생성된 객체를 의미한다.나는 'GameManager' 클래스를 싱글톤 패턴으로 구현하였다.using System.Collections;using System.Collections.Generic;using UnityEngine;public class GameManager : MonoBehaviour{ public int bestScore = 0; // 클래스의 유일한 인스턴스를 저장하는 정적 변수 private static GameManager _instance; ..