unity(35)
-
[Unity 3D] 애니메이션 Root Motion이 Transform값을 변경시키며 발생한 버그 해결하기
1. 루트 모션(Root Motion)이란? 루트 모션(Root Motion)은 오브젝트의 위치와 회전을 애니메이션이 제어할 수 있도록 허용하는 것을 말합니다. 루트 모션이 활성화된 애니메이션이라면, 해당 애니메이션이 적용된 오브젝트의 트랜스폼(Transform) 값은 영향을 받아 변하게 될 겁니다. 예를 들어, 루트 모션이 적용된 걷는 애니메이션(WALK)은 캐릭터가 걷는 것에 따라 위치 값도 변하게 됩니다. 루트 모션이 적용되지 않았다면 캐릭터는 제자리 걸음을 하겠지요. 2. 루트 모션이 일으킬 수 있는 문제점 물론 스크립트 코드를 작성하여 움직임을 구현하는 것보다 애니메이션을 통해 움직임을 구현하는 것이 훨씬 더 자연스럽습니다. 특히나 시네마틱 영상을 제작하는데엔, 루트 모션이 더욱 더 현실같은 자..
2022.05.24 -
[Unity] 이벤트 주도적 프로그래밍 (Event Driven Programming)
게임에는 수많은 이벤트들이 있다. 플레이어가 적 캐릭터의 시야에 언제 들어오고 나가는지, 체력이 언제 떨어지는지, 무기가 언제 바닥나는지, 적 캐릭터가 언제 위험한 바닥에 올라서는지 등, 우리가 게임할 때마다 자연스럽게 경험했던 것들이다. 키보드 입력이나 마우스 클릭, 오브젝트의 충돌체 영역 통과, 플레이어가 공격받는 것 등과 같은 순간처럼 이벤트는 수동적인 성격을 가지고 있으며, 스스로 능동적으로 발생하진 않는다. 이벤트는 응답을 만들고 발생시키며, 그 응답이 다시 그 이후의 응답을 일으키는 이벤트가 될 수 있다. 즉, 이벤트는 하나의 행동을 취함(이벤트)으로써 다른 행동을 수반(응답)하는 식으로, 서로의 행동들은 중요한 관계를 맺고 있다고 볼 수 있다. 프로퍼티(Property)를 통한 이벤트 구현의..
2022.04.03 -
[Unity] 시각적 디버깅에 용이한 기즈모(Gizmos)
유니티에서 디버깅을 하다 보면, 콘솔과 같은 데이터 문자열보다는 시각적인 선을 통해 확인하고 싶은 경우가 있다. 예를 들면, 적과 다른 캐릭터들에게 플레이어나 다른 오브젝트가 범위 내로 들어올 때 볼 수 있게 해주는 가시선 기능 같은 것이 대표적이다. 지구처럼 공전을 하는 오브젝트가 있을 때, 그 궤도를 볼 수 있는 선으로 표시를 해준다면 더욱 편리할 것이다. 이런 기능들이 지원된다면, 어떻게 게임이 작동하는지 눈으로 직접 확인을 할 수 있는 장점이 있다. (물론 이런 선들은 실제 인게임에서는 보이지 않는다.) 기즈모(Gizmos) 위에서 설명했던 기능들을 지원하기 위해, 유니티는 기즈모(Gizmos)라는 시각적 도구 장치를 제공한다. 충돌체의 와이어프레임 바운딩 박스(Wire Frame Bounding..
2022.03.11 -
[Unity] 전처리기 플래그 (Preprocessor Flag)를 이용한 조건 컴파일 코드 작성하기
필요한 이유 유니티에서 조건별 컴파일을 할 수 있도록 코드를 작성할 수 있다. 유용하게 사용하는 대표적인 예시 중 하나로, 디버깅을 끝낸 후에 디버그 코드를 지우고, 다시 개발하다가 또 똑같은 오류를 접하게 되면 지웠던 내용들을 다시 작성해야 하는 번거로움을 겪지 않아도 된다는 게 있다. 이것은 전역 선언(Global define)을 통해 해결할 수 있다. 전역 선언이란, 코드를 조건별로 컴파일하거나 특정 단락을 제외하는 것을 활성화 또는 비활성화할 수 있도록 해주는 특별한 전처리기 플래그(Preprocessor flag)를 말한다. 플래그를 true로 설정하면 유니티는 자동으로 한 버전의 코드를 컴파일, false로 설정하면 또 다른 버전을 컴파일한다. 이렇게 하나는 디버그용, 또 다른 하나는 배포용과..
2022.03.08 -
[Unity] 빌드(Build)했을 때, JSON 파일을 읽지 못하는 현상
분명 유니티 에디터 상에서 실행했을 때는 JSON 파일을 잘 읽어왔었습니다. 그런데, 빌드만 하면 읽어오지 못하는 문제가 발생했네요... 이것 때문에 2시간은 삽질한 것 같습니다. 1. 문제의 JSON 파일 읽어오기 코드 using System.IO; using LitJson; private const string jsonFilePath = "/Resources/Json/Narration.json"; private JsonData ReadJsonFile() { if(File.Exists(Application.dataPath + jsonFilePath)) { string jsonString = File.ReadAllText(Application.dataPath + jsonFilePath); JsonData..
2022.03.07 -
[압량(Amnyang)] #Final. 새로운 적, 무당(Shaman)과 게임 시작 씬, 로딩씬, 인트로씬 제작
개발일지를 오랜만에 작성하러 왔다. 프로젝트를 개강 전까지 끝내고 싶어, 바쁘게 달린다고 글 작성할 시간이 없었다. 하지만, 결국 개강 전까지는 못 끝냈다....ㅎㅎㅎㅎ 오랜만에 글을 작성하려 하다보니, 어디서부터 적어야할 지 모르겠다. 그동안, 직면했던 고민들에 대해서 그냥 적어놔야겠다. 그러면, 나중에 볼 일이 있을지도? 1. 새로운 적, 무당(Shaman)과 집 길가에서 다음 집까지 가는 길목은 경관(Police)이 지키고 있었다. 이번엔 집 내부에서 플레이어를 괴롭힐 새로운 적이다. 사실 무당 로직을 구현하는데에 굉장히 많은 고민들이 있었고, 초반에 벌여놓은 실수때문에 타협을 할 수 밖에 없었다. 무당은 집에서 방들 사이를 랜덤으로 걸어다녀야 한다. 하지만, 집 구조가 다음과 같이 되어 있었다. ..
2022.03.05