유니티를 사용하게 되면 using UnityEngine;을 작성할 때 한번 씩 보게되고, 입력하게 되는 패키지가 하나 있다.UnityEditor가 바로 그것이다.문자 그대로 유니티 에디터에서 사용하는 기능들을 모아놓은 패키지로, 이걸로 할 수 있는 점이 꽤나 많은 편. 다만, 이로 인해서 프로젝트가 꼬이는 경우도 있다.간략하게 알아보자.AnimationController?유니티로 작업하다 보면 반드시 사용하게 되는 것이 Animation Controller이다.애니메이션을 관리하는 컴포넌트이다 보니, 안쓸래야 안 쓸 수가 없는 것. 유니티의 컴포넌트는 대개 그 이름 그대로를 클래스 명으로 사용한다.그렇다면 스크립트로도 Animation Controller를 사용하면 조절 가능하겠지? 라고 Animatio..
참고 URL: https://lsu0503.tistory.com/141 Today I Learned - Day 77 [지형 절차적 생성 - 격자형]자, 오늘은 지형의 절차적 생성 방법에 대해서 조금 더 자세하게 정리 해 보자.지형의 절차적 생성 알고리즘을 분류하면 대략 5가지 조합으로 구성이 가능하다.격자형특정한 간격으로 임의의 블lsu0503.tistory.com오늘은 구조 선택형 절차적 생성에 대해서 정리해볼 예정이다.구조 선택형은 전체적으로 '특정한 방식으로 구조를 형성, 그에 따라서 지형을 구성하는 방식이다. 당연하지만, 본문에서 쓰이는 분류 방식은 공식적인 분류는 아니고, 개인적인 분류다.현재 절차적 생성에 대한 공식적인 분류법은 딱히 나뉘어져 있지 않은 상황이다.오히려 절차적 생성이 '공식을 ..
아무래도 게임이라면 세이브 로드 시스템이 빠질 수는 없을 것이다.요즘에는 단판으로 진행하는 게임들도 누적되는 성장 요소는 있기 마련이고, 그렇지 않더라도 리더보드 같은 요소들은 거진 있으니 말이다. 본 프로젝트도 당연하지만 세이브 로드 시스템이 필요하다. 다른 게 아니라, '핵 & 슬래시 장르'를 표방하기 때문에 아이템을 모으는 것이 메인 컨텐츠이고, 그런 측면에서 세이브 로드 시스템이 없다는 것은 말이 안되니 말이다. 다만, 세이브 로드 시스템 자체는 그 비중에 비해서 원리가 간단해서 내용이 간단하다.아마 간단하게 작성되지 싶다.세이브 데이터 형성 방식본 작품에는 레벨이 없다. 그 대신에 장비의 능력치와 특성 총계로 능력치가 상승하는 구성으로 되어 있다.그렇기 때문에 본작은 인벤토리와 장비 상황, 여기..
드디어 본 작품의 기반 구상이었던 절차적 생성을 이용한 필드 무한 확장 기능을 작성했다.사실 절차적 생성이라고는 해도 가장 간단한, 격자에 맞춰서 임의의 방을 채워 넣는 구조였지만.거기다가 사전 생성도 아니고 플레이어의 이동에 맞춰서 그때 그때 생성하는 방식이라서 알고리즘도 간단했다. 그럼, 정리를 시작해 보자.기본 로직플레이어의 좌표를 기준으로 가로 혹은 세로가 특정 값의 배율이 될 때 마다 '방 이동 판정'을 시행한다.'다녀온 방' 리스트를 확인하여 변경된 좌표가 기록되어 있는 지 판단한다.[좌표는 인스펙터 상의 좌표가 아닌, 방들의 위치를 지정하는 좌표를 사용한다.]기록되어 있다면 플레이어의 현재 좌표 만 갱신한다.기록되어 있지 않다면 방 생성 알고리즘을 적용한다.4면의 '통로'의 개폐 여부를 확인..
유니티로 작업을 하다 보면 Sorting Order를 만지는 일이 잦다.캔버스에도 존재하고, 스프라이트 렌더러에도 존재하고, 타일 맵 렌더러에도 존재하는 개념이니까.오히려 이걸 어떻게 구성하느냐가 시각적인 요소에서는 꽤나 중요한 내용이기도 하다.사실, 간단하고 뻔한 내용이긴 한데, 오늘 작업하면서 소소하게 알게 된 부분이 있어서 정리해볼 예정이다.Sorting Order?문자 그대로, '정렬에서의 순번'이다. 표시 우선도라고 보면 좋다.이 숫자가 높을 수록 상위에 표시되고, 이 숫자가 낮을 수록 하위에 표시된다. 일종의 높이값이라고 보면 옳다.이 값은 -32768~32767의 정수 값으로 구성되며, 같은 값일 경우에는 '늦게 생성된' 쪽이 상위로 자리한다.다만, 이 '늦게 생성된'이 매우 애매한 개념이라..

이전, 스프라이트에 대해서 다룬 적이 있었다.[참고 URL : https://lsu0503.tistory.com/70] 오늘은 이 스프라이트를 다룰 때의 팁을 다룰 예정이다.자, 대뜸 시작부터 엉뚱한 소리겠지만, 프로젝트 창에서 이미지를 선택 해 보자.인스펙터에는 이렇게 표시될 것이다.이제, 여기서 자주 손을 댈 요소들에 대해서 서술해 보자. TextureType문자 그대로, 해당 이미지가 무슨 형태로 사용되는 지를 정하는 항목이다.많은 항목들 중에 스프라이트가 있는데, 이 처럼 이 항목에서 스프라이트를 선택해야지 프로젝트 안에서 스프라이트로서 활용이 가능하다.때문에, 간혹가다가 이미지 파일을 프로젝트에 임포트 했음에도 스프라이트로서 사용할 수 없는 경우가 있는데, 그 때에는 이 항목을 확인 해 보는 것..
벌써 2주나 지난 일이긴 하나, 프로젝트의 진행 사항을 발표하는 중간 발표가 있었다.프로젝트가 한창 진행 중이다 보니, 심지어 한창 바쁜 시기이다 보니 이런 글을 적을 여유가 거의 없었다... 본 프로젝트의 시연 영상은 다음과 같다. 발표자료도 따로 있기는 하나, 앞서 적은 내용을 정리해서 발표했을 뿐이라서 따로 정리하지는 않겠다. 전체적으로 완성도는 아직 낮다.UI 정리도 아직 되어있지 않고, 에셋도 씌워져있지 않은 데다가 구현되지 않은 내용도 있다.그래도 지금까지 달려왔던 프로젝트의 중간 상황을 이렇게 정리하고 나니까 나름 성취감이 들었다.이제 반이다. 앞으로도 힘내자. 아자.
이번 작업은 트러블 슈팅으로부터 시작된다. 본 프로그램은 기존에도 GameObject를 기반으로 작동하는 오브젝트 풀을 이용해서 최적화를 구성하고 있었다.실제로 어느 시점 까지는 이 구성으로도 최적화 상으로 큰 문제는 없었다.하지만, ActionSystem을 재작업 하자 문제가 발생했다. 재작업 하기 전에 비해서 매우 적은 양의 공격 오브젝트에도 프레임 드랍이 발생했던 것.특히, 실 게임에도 문제가 발생할 수 있겠다 싶을 정도로 느려지기에, 이에 대응해서 NewActionSystem을 구상하는 계기가 되었다. 물론, 문제점은 여럿 있었다. 다수의 공격 오브젝트들이 클래스를 여럿 들고 있어서 발생하는 것도 있었고, 내부 코드 상의 하자도 있었다. 하지만, 본인이 주목했던 또 다른 요소는 'GetCompon..
유니티를 본격적으로 다루면 피할 수 없는 것이 바로 '외부 데이터 연동'이다.세이브 파일 부터 시작해서 데이터 파일 작성 까지, 이런 저런 요소들이 외부 데이터 연동을 활용하면 훨씬 할 수 있는 폭도 넓어지고, 수정 편의성도 높이지기 때문이다. 자, 그렇다면 이 '데이터 연동'을 위해서 사용할 수 있는 경로는 어떻게 정하면 될까.사실 의외로 매우 간단하다. 유니티 상에서 미리 정해진 경로들을 제공하기 때문이다.이에 대해서 간략하게 알아보자.[참고 URL: https://3dmpengines.tistory.com/1745, https://sam0308.tistory.com/83] Application.dataPath읽기 전용. 프로젝트 폴더 내부의 Assets 폴더를 지정한다.이를 통해서 Resources..
※ 금일 정리할 내용은 다소 간단한 내용이 될 예정이다. 캐릭터의 행동 패턴을 제작할 때에는 자연스럽게 활용하게 되는 것이 유한 스테이트 머신이다.다만, 만약에 NPC가 행할 수 있는 행동의 종류가 어마어마하게 방대하고 복잡하다면 어떨까.상황에 따라서 다른 작동을 해야한다거나, 장비에 따라서 사용하는 상태가 달라진다던지 하는 식으로 말이다.이걸 전부 하나의 스테이스 머신에서 관리한다고 한다면 헷깔리기도 할 것이고, 무엇보다 '사용하는 측'에서는 이 정도로 많은 상태에 접근할 필요가 없다. 이럴 때 유용한 것이 다단계 유한 스테이트 머신이다.계층적 유한 스테이트 머신?문자 그대로, '여러 단계로 구성된 FSM'이다.행동을 큰 단위로 묶어서 1차적인 FSM을 만들고, 그 FSM 안에서 또 다시 FSM을 구성..