자, 오늘은 지형의 절차적 생성 방법에 대해서 조금 더 자세하게 정리 해 보자.지형의 절차적 생성 알고리즘을 분류하면 대략 5가지 조합으로 구성이 가능하다.격자형특정한 간격으로 임의의 블럭을 배열하는 형태.가장 간단하고 부하가 적다.대신 정해진 형태로만 구성이 가능하다는 난점이 있다.구조 선택형특정한 알고리즘을 통해서 배치 구역을 형성, 그 구역에 맞는 지형을 배치하는 구조불규칙적인 지형을 형성하는 알고리즘 중에서는 가장 간단하면서 부하가 적은 방식.다만, 형성된 구역을 어떻게 이을 것인지에 대한 알고리즘이 필요하다. 배치 확장형정점이나 도형 등을 배치한 다음, 그 위치관계를 이용해서 선택, 확장하는 방식.2D 필드 제작에 유용하게 쓰인다. 특히 로그라이크 게임에서 매우 유용하게 쓰이는 알고리즘.다만, ..

유니티 상에서는 AI 길찾기 로직을 기본적으로 제공한다.이에 대해서는 다소 순서가 어긋나긴 했지만, 응용 버전인 2D 환경에서의 활용을 먼저 다뤘었다.[참고 URL: https://lsu0503.tistory.com/114] [이걸 안다뤘을 줄은 몰랐지...] AI 네비게이션 자체는 성능이 이래저래 많은 편인데, 본문에서는 간단하게 사용법 만 글로 설명하고, 본론으로 넘어갈까 한다.[아무래도, 지금 다루기에는 다소 늦은 감이 있어서...;;] AI Navigation?AI Navigation은 유니티 상에서 기본으로 지원되는 자동 경로 탐색 패키지다.[사용법은 간단한데, 지원되는 기능이 많아서 사실 좀 더 알아봐야 할 거 같은 기능이긴 하지만...;;]알고리즘으로는 A*알고리즘을 사용한다. 사용법은 간단..
이제 최종 프로젝트에서 절차적 생성을 이용한 필드 확장 기능을 작업하기 시작했다.그러니, 오늘은 절차적 생성에 대해서 정리 해 보자.절차적 생성이란?'절차적 생성', 최근 들어 게임계에서 매우 자주 듣게 되는 단어다.이 절차적 생성 자체를 주요 포인트로 삼은 게임도 있고, 반대로 '손으로 그린' 것을 특징으로 삼은 게임도 있다.그렇다면 절차적 생성이 무엇이길래 이렇게 최근 들어 키워드로서 자주 활용되는 것일까. 일반적으로 '절차적 생성'이라고 말하면 레벨의 절차적 생성을 이야기 하는 경우가 많다.그도 그럴게, 가장 눈에 띄로 체감도 잘 되는 영역이 레벨의 적차적 생성이라서...그렇다 보니, 절차적 생성이 '필드 구성을 자동으로 생성하는 기능'으로 오해하는 경우도 있다고 알고 있다. 결론 부터 말하자면, ..
이번에는 인벤토리 시스템에 대해서 정리 해 볼 예정이다.인벤토리의 시스템의 전체적인 구성본작의 인벤토리는 총 3종류로 나뉜다.Dungeon Inventory던전 탐색 중에 활용되는 인벤토리.던전 탐색 도중에만 유효한 임시 인벤토리로, 던전에서 나갈 경우에는 다음 과정을 거쳐서 초기화된다.사망으로 인하여 탈출하는 경우, '탈출 실패'로 간주하여 소지품과 소지금의 일부가 유실된다.탈출한 경우에는 모든 소지품과 소지금이 유지된다.위 과정의 끝에 남아있는 소지품과 소지금은 Village Inventory로 이동한다.본 인벤토리로 습득되는 아이템은 ItemLog가 표시된다.Village Inventory마을에서 사용 가능한 인벤토리로, 보관함과 상호작용 시 이용 가능하다.인벤토리 UI는 사실상 본 인벤토리에만 존..
유니티를 다루다 보면 자연스럽게 다루게 되는 것이 바로 씬이다.Scene이라는 그 명칭마냥, 하나의 '장면'을 담당하는 요소.이래저래 활용법은 간단하긴 하지만, 플레이 경험에 비교하면, 로딩 최적화를 고려하면 이것도 좀 복잡하게 구성해야 한다. 그렇다면, 어떻게 하면 될 것인가.사실, 여기에는 꼼수가 좀 많이 쓰인다.사실 최적화 요소들도 대부분 '보이지 않는 영역'을 이용한 꼼수이지만 말이다.실내와 실외는 알고보면 같은 공간가장 기초적인 사항. '실내'를 구현한다고 해서 씬을 새로 작성하면 안된다는 내용이다.이유는 간단하다. 그 만큼 씬 로딩이 자주 일어나니까.씬 로딩 자체가 Don't Destroy On Load로 지정된 오브젝트들 이외에는 전부 날려버리고 새로 쌓아올리는 것이다 보니 부하가 크고, 그..
유니티에서 외부 파일을 할당하는 가장 기초적인 방법은 하나는 '인스펙터에서 직접 넣어주는 것'이다.사실상 인스턴스에 직접 배정해 주는 셈이라서 이렇게 구성하면 별다른 복잡한 과정 없이 외부 파일을 할당할 수 있지만, 동적 생성되는 오브젝트나 오브젝트 풀 같은 곳에서 활용하기에는 메모리 최적화 상으로도 그렇고 이래저래 난감한 편이라는 문제가 있다.물론, 스크립터블 오브젝트를 활용해서 구성한다던가 하는 것도 가능은 하긴 한데, 어찌되었건 인스펙터를 건드려야 한다 [= 유니티를 만져야 한다.]는 점에서 기획자가 능동적으로 사용하기는 난감하다. 그렇다 보니, Resources.Load와 Adressable Asset 등의 방법으로 스크립트를 통해서 불러오게끔 구성하고, 이를 Json 등의 문서화 파일과 연동시킴..
유니티로 프로그래밍을 하다 보면은 자주 사용하게 되는 것이 바로 오브젝트 풀이다.공격 오브젝트 부터 시작해서 몬스터 오브젝트 등, 생성과 파괴가 잦은 것들은 일단 오브젝트 풀에다가 넣어버리게 되는 것이 보통이다 보니, 별 수 없지 않나 싶다. 다만, 이 오브젝트 풀에도 난점은 있다.간략하게 알아보자.'오브젝트' 풀오브젝트 풀에 대해서는 일전에 정리한 바 있다.[참고 URL: https://lsu0503.tistory.com/84] 일반적으로 오브젝트 풀을 설명할 때에는 게임 오브젝트를 풀의 내용으로 기술하는 경우가 많다.그도 그럴게, 그렇게 하면 굳이 다른 작업을 할 필요 없이 오브젝트 풀을 구현할 수가 있으니까.그렇다 보니 오브젝트 풀을 처음 접하는 경우에도 GameObject 기반으로 만드는 경우가 ..
※ 오늘은 간단한 내용이 될 예정이다. 간혹가다가 드는 생각.조건문을 만들 떄 마다 라인이 4개 이상이 된다는 것, 조금 불편하지 않은가.물론, 엔터로 정리를 하지 않는다고 하면 2줄으로도 충분히 작성 가능하긴 하다.익숙해지면 if else 정도는 그냥 무감각하게 입력하고 있기도 하다. 그래도 1줄로 줄일 수 있다면 코딩하는 데에 드는 시간이 조금은 줄어들 것이다.조건 연산자피연산자의 개수가 3개인 연산자로, 조건에 따라서 결과물이 달라지는 연산자다.a = b b 여기에 함수를 넣으면 함수가 조건식 혹은 결과값이 되는 형식.물론 if else 구문을 쓰는 방법도 있지만, 이 경우에는 ?와 :만 추가하면 되기 때문에 익숙해지기만 하면 이래저래 편하게 사용할 수 있는 것이 장점. 다만, 너무 길게는 쓰지 ..
금일은 액션 시스템을 어떻게 만들었는 가를 정리해 보고자 한다. 본 프로젝트의 액션 시스템은 다음 구성으로 작성되어 있다.BaseActionActor: 액션의 발동을 담당하는 클래스.ObjectPool에서 ActionObject 프리팹을 가져와서 각도를 설정한다.이후 아래의 ActionObjectContainer 클래스를 초기화한다.ActionObjectContainer: ActionObject의 정물(Pacade)에 해당하는 클래스.ActionPositionHandler: ActionObject의 위치를 담당하는 클래스.Hold: 사용 캐릭터의 하위 오브젝트로 적용. 캐릭터가 이동하면 ActionObject도 함께 움직인다.Projectile: 투사체로 발사. 발사 방향은 사용 캐릭터로 부터의 연장선으..
이번에는 델리게이트의 심화편, event에 대한 글이다.사실, 델리게이트 중에서 가장 많이 쓰이는 형태이다 보니, 어느 의미 기본에 해당하는 영역이기도 하다.그러니까 개념 위주로 간단하게 설명 해 보자. event란?event는 델리게이트의 일종으로, 특정한 상황에 대한 반응을 만들어내는 용도로 사용된다.event로 선언된 델리게이트는 event가 선언된 그 클래스 내부에서만 사용 가능하다. 이러한 구성을 이용해서 '특정 객체의 현상에 대한 반응'을 구성할 때 자주 쓰이는 기능.이제 이걸 선언하는 방식을 정리 해 보자.public event Action OnActionEventpublic event Func OnFuncEventAction은 반환값이 없는 경우에 사용하고, Func는 반환값(Treturn..