반응형

유니티 미니 RPG 9

Part 3-13-9. 미니 RPG : 몬스터 자동 생성, 完

미니 RPG 몬스터 자동 리스폰 서버 측에서 한다. 몬스터가 죽으면 몬스터의 전체적인 숫자를 맞춰주기 위해 랜덤한 위치에서 스폰을 한다. 이렇게 서버측에서 스폰을 한 후 클라이언트에게 알려준다. 📜 GameManager public Action OnSpawnEvent; public GameObject Spawn(Define.WorldObject type, string path, Transform parent = null) { GameObject go = Managers.Resource.Instantiate(path, parent); switch(type) { case Define.WorldObject.Monster: _monsters.Add(go); if (OnSpawnEvent != null) OnSp..

Part 3-13-8. 미니 RPG : 레벨업

미니 RPG 레벨업 ✈ 스탯 데이터 📄StatData.json { "stats": [ { "level": "1", "maxHp": "200", "attack": "20", "totalExp": "0" }, { "level": "2", "maxHp": "250", "attack": "25", "totalExp": "10" }, { "level": "3", "maxHp": "300", "attack": "30", "totalExp": "20" } ] } 각 레벨에서의 기본 스탯 📜Stat [Serializable] public class Stat { public int level; public int maxHp; public int attack; public int totalExp; } json파일의 내용과..

Part 3-13-7. 미니 RPG : Destory

미니 RPG Destroy 오브젝트가 Destroy 될 때 오브젝트가 메모리 해제되면 유니티의 Object의 == 연산자 오버로딩으로 인하여 해제된 객체를 == null 비교 연산할 땐 그 객체를 참조하는 참조 변수들은 댕글링 포인터가 되는 것이 아닌 “null”이 되도록 처리된다. 따라서 해제된 오브젝트의 컴포넌트를 참조하는 것들을 잘 확인해야 한다. 크러쉬가 날테니까! 오브젝트가 해제되면 당연히 그 오브젝트의 컴포넌트들에도 참조할 수 없다. 형변환 연산 비용 줄이는 대안 📜GameManager 에서 오브젝트들을 스폰하고 디스폰하는 작업을 할 것이다. 근데 어떤 오브젝트를 스폰해야하는지를 알아야 한다. 그러면 📜BaseController 타입으로 업캐스팅해서 받는 방법도 있을테고(근데 이러면 상속이 아..

Part 3-13-6. 미니 RPG : 몬스터 AI

미니 RPG 몬스터 AI 📜BaseController 👉 플레이어와 몬스터의 공통적인 속성과 기능 모음 1. 📜PlayerController 2. 📜MonsterController 📜MonsterController와 📜PlayerController의 공통적인 함수 및 멤버들은 📜BaseController로 옮겨주었다. 몬스터 애니메이션 컨트롤러의 애니메이션 클립의 이름들도 플레이어 애니메이션 컨트롤러와 동일하게. 📜MonsterController 몬스터 오브젝트에 붙여준다. 📜PlayerController 와 상당수 비슷하다. 여기에 없는건 📜BaseController로부터 상속 받는다. using System.Collections; using System.Collections.Generic; using..

Part 3-13-5. 미니 RPG : 체력 게이지

미니 RPG 체력 게이지 UI 만들기 체력 게이지는 몬스터와 플레이어 위에 따라다녀야함. 그러니 원근법 적용이 되야 한다. 3D 오브젝트처럼! 따라서 캔버스 렌더러 모드를 World Space로 바꿔준다. UI_HPBar : 캔버스 👉 RenderMode는 WorldSpace. 이땐 이 캔버스를 찍을 카메라도 할당해주어야 하는데, RenderMode, Camera 둘 다 코드로 로드해줄 것이다. HPBar : 슬라이더 이제 캔버스는 게임 월드 기준 좌표를 가지므로 캔버스와 슬라이더의 위치와 크기를 잘 맞춰주고 최종적으로 UI_HPBar 캔버스를 프리팹으로 만들어준다. 게임이 시작되면 몬스터와 플레이어의 산하 자식으로 Instantiate 시켜주어 몬스터와 플레이어를 따라다니게 할 것이다. 공격시 체력 깎..

Part 3-13-3. 미니 RPG : 타겟 락온

미니 RPG 📜Define public enum MouseEvent { Press, PointerDown, // 마우스 뗀 상태에서 처음 눌렀을 때 PointerUp, // 마우스 누르고 있던 상태에서 처음 뗏을 때 Click, } Press : 누르는 동안 PointerDown : 안 누르고 있던 상태에서 처음으로 눌렀을 때 PointerUp : 0.2초 이상 꾹 누르고 있던 상태에서 처음으로 뗏을 때 (꽤 누르고 있다가 뗐을 때) Click : 0.2초 이하로 누르고 있던 상태에서 처음으로 뗏을 때 (말 그대로 클릭 수준. 찰나만 누르고 뗐을 떄) 📜InputManager public class InputManager { public Action KeyAction = null; public Actio..

Part 3-13-2. 미니 RPG : 스탯 설정, 마우스 커서 변경

미니 RPG 스탯 📜Stat 👉 스탯을 가지는 모든 것들이 공통적으로 가지는 속성들 📜PlayerStat 👉 Stat을 상속 받음. 플레이어의 스탯 (플레이어 오브젝트에 붙는다.) 📜MonsterStat 👉 Stat을 상속 받음. 몬스터의 스탯 (몬스터 오브젝트에 붙는다) 📜Stat using System.Collections; using System.Collections.Generic; using UnityEngine; public class Stat : MonoBehaviour { // 멤버 변수 [SerializeField] protected int _level; [SerializeField] protected int _hp; [SerializeField] protected int _maxHp; [..

Part 3-13-1. 미니 RPG : 환경 설정, 이동

미니 RPG 게임을 만들 때 빈 프로젝트에서 처음부터 쌓아나가는 식으로 만들지 말고 여태까지 해온 온갖 매니저들 등등 이런 나만의 프레임 워크를 미리 구축해놓고 이를 활용해 만들어 나가기를 추천한다고 하셨다. 풀링 매니저, UI 매니저 등등 이런건 어떤 게임을 만들든 다 필요하다. Light 연산 RealTime 실시간으로 빛을 연산하겠다는 의미 이로 인해 성능 부하가 어마어마 하다. 그리고 움직이는 오브젝트라면 그 오브젝트의 빛 연산을 미리 Baked 할 수 없다. 어떻게 움직일 줄 알고 하겠는가? 🤯 Baked 이미 계산 완료 후 에셋으로 저장해놓은 라이트맵을 이용해서 게임 실행 중에 라이트 연산을 하지 않고 이를 덮어 쓴다. 라이트맵은 빛을 받으면 어떤 색으로 보일지 그림자는 어떻게 할지 등등 미리..

반응형