
Unity 스크립트가 실행되면 순차적으로 이벤트 함수들이 호출된다.객체가 생성되어 활성화, 업데이트, 파괴되는 과정을 생명주기라고 한다.Awake()는 데이터를 초기화하는 목적으로 만들어진 이벤트 함수다. 씬이 실행된 직후에 1회 호출된다.OnEnable()은 Mono

Debug 클래스를 사용하면 프로젝트가 실행되는 동안 예외가 발생하는 위치나 예상치 못한 동작을 파악하고 조사하는 데 도움이 되는 정보를 시각화할 수 있다.Debug.Log()는 에디터의 콘솔 창에 메시지를 출력할 때 사용한다.Debug.Log()는 object 매개변

유니티에서 MonoBehaviour를 상속받는 클래스들은 인스펙터에서 부착이 가능하다. 지금까지 유니티로 여러 게임들을 만들어왔지만 MonoBehaviour는 단지 컴포넌트 방식을 위해서만 존재한다고 알아왔다. 하지만 깊은 이해를 위해 이를 알아보려고 한다.컴포넌트(C

서론 어트리뷰트(Attribute)는 코드 요소에 메타 데이터를 첨부하는 데 사용되는 클래스다. 이를 활용하면 Unity로 작업을 할 때 좀 더 직관적이고 편하게 할 수 있다. 인스펙터 노출과 관련된 어트리뷰트 [HideInInspector] HideInInspect

Unity에서는 폴더의 이름을 작성할 때 어떤 이름을 사용해서든 생성할 수 있다. 하지만 예외적인 예약된 폴더의 이름이 존재하며, 이들을 적절히 사용하는 것은 중요하다.Assets 폴더는 Unity 프로젝트에서 사용하는 에셋이 포함되는 주 폴더다. 에디터 프로젝트 창의

게임을 만들 때, 지금까지 해왔던 작업 상황들을 세이브/로드하는 것은 중요하다. .json 파일로도 세이브와 로드를 할 수 있는데, 이 때는 Unity의 저장 경로에 대한 지식이 필요하다.Application.dataPath는 읽기 전용으로, 런타임에 파일 작성, 수정

서론 Update()나 FixedUpdate()에서 물리 연산을 실행하고자 할 때 Time.deltaTime을 곱해주고는 한다. 이 Time.deltaTime이 무엇이고 왜 필요한지와 Time 클래스의 속성들을 알아보자. Time.deltaTime deltaTime은

서론 좌표계란 공간 내에서 특정한 위치를 나타내기 위한 도구다. 유니티에서 게임 오브젝트를 생성하면 반드시 좌표 값을 가지게 된다. 따라서 게임 오브젝트를 활용하려면 좌표계에 대한 이해가 반드시 필요하다. 좌표계 2차원 좌표계 2차원 좌표계에는 대표적으로 데카르트

서론 게임에서 회전은 게임을 바라보는 시점에서나 탄환이 발사되는 방향 등을 결정하기 위해서 사용되며 매우 중요하다. 따라서 회전에 대한 자세한 이해가 필요하며 밑바탕에는 이를 지탱하는 수학이 필요하다. 오일러 각의 이해 오일러 각 오일러 각은 3차원 공간에서 물체가

RPG Maker와 같은 툴을 사용해본 경험이 있다면 맵을 타일로 구성하는 방식에 대해서 알고 있을 것이다.타일로 맵을 구성하는 방식은 팔레트에 물감을 미리 짜두고 이를 이용하여 그림을 그리듯이 맵을 구성한다.예전에는 2D 맵 오브젝트를 직접 배치하거나 이러한 타일 팔

Tile Palette와 Tilemap을 이용하면 맵을 구성하는 시간을 대폭 감소할 수 있지만, 타일을 자연스럽게 만들기 위해서는 꽤 오랜 시간이 걸린다.이를 해결하기 위해 유니티는 공식적으로 Rule Tile(룰 타일)을 업데이트했다.룰 타일은 규칙에 따라 타일맵을

서론 타일맵을 이용하여 맵을 구성하다가 나무나 풀이 흔들린다던지, 바다가 파도치는 모습을 담고 싶을 수도 있다. 이럴 때는 타일맵을 구성하는 타일을 Animated Tile로 생성하면 된다. Animated Tile
유니티에서 객체의 자연스러운 동작과 행동을 플레이어에게 보여주기 위해서는 애니메이션과 애니메이터에 대해서 이해할 필요가 있다.이번에는 유니티에서 제공하는 애니메이션과 애니메이터, 레거시 애니메이션과 메카님 애니메이션에 대해서 알아보도록 하자.우리가 평소에는 애니메이션이

나는 바보다. 제네릭 싱글턴에 DontDestroyOnLoad를 사용하고 그 싱글턴 클래스끼리 엮어버리는 바람에 세상에서 제일 맛있는 스파게티를 만들어버렸다.근데 문제는 스파게티가 맛있어보여서 그냥 사용했다는 점이다. 싱글턴이 양날의 검이라는 것은 알고 있었지만.. 너

의존성 주입을 하려고 보니.. 다른 씬에서도 의존성이 있는 객체가 있음에도 불구하고 씬을 이동하면 객체가 파괴되는 유니티의 성질 때문에 골머리를 썩혔다.DontDestroyOnLoad와 싱글턴 패턴을 사용하지 않으려다 보니 남은 것은 static 밖에 없었다.그리고 이

게임을 개발하다 보면 기획이 변경됨에 따라 UI가 변경될 가능성이 있다.이때 로직과 UI를 분리하면 비교적 적은 수정을 통해 대응할 수 있다.로직과 UI를 분리하는 아키텍처 패턴은 MVC, MVP, MVVM이 있으며 모두 MV를 포함한다.MV는 각각 데이터를 저장하는

일반적으로 메서드를 호출하면 실행을 완료한 뒤 호출한 메서드에 제어와 선택적 반환 값을 반환한다. 메서드 내에서 발생한 모든 행동은 단일 프레임 업데이트 내에서 발생해야 한다.하지만 코루틴을 사용하면 작업을 다수의 프레임에 분산할 수 있다. 코루틴은 실행을 일시 정지하

유니티의 Navigation 시스템을 이용하면 씬 내에서 지능적으로 탐색하여 이동하는 오브젝트를 생성할 수 있다.이때 NavMesh는 게임 월드에서 걸을 수 있는 표면을 의미하며, NavMeshAgent는 NavMesh 위에서 목적지까지 경로를 찾고 이동하는 오브젝트를

내가 제작 중인 Lapi라는 게임에서 커서를 NPC나 적에게 갖다대면 커서가 변경되는 것을 구현하고 있었다.처음에는 Update()에서 마우스 위치로 레이캐스팅을 하며 레이 히트된 오브젝트가 있다면 분기를 통해서 커서를 변경하는 방법을 사용했었다.하지만 이 방법은 감지