Game Development/Unity(18)
-
[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] SendMessage와 BroadcastMessage
Unity 공부를 하다가 MonoBehaviour 클래스에서 제공하는 "SendMessage()"와 "BroadcastMessage()" 기능을 봤다. 위 함수들을 이용하여, 게임 오브젝트에 붙은 모든 컴포넌트의 함수를 이름으로 실행할 수 있다고 한다. 일반적으로 클래스에 접근하기 위해선, 객체를 가리키는 참조 변수를 통해 해당 클래스의 멤버 변수와 함수에 접근하게 된다. 하지만, "SendMessage()"와 "BroadcastMessage()"는 실행할 함수의 이름만 알고 있다면 참조 과정을 거치지 않아도 된다. SendMessage() 다음은 Unity API Documentation에 적혀있는 함수의 원형이다. public void SendMessage(string methodName, objec..
2022.02.22 -
[Unity] "Universal RP Light 2D"를 스크립트 제어하기
다음 💡네임스페이스 사용 선언이 필요하다. using UnityEngine.Experimental.Rendering.Universal; 그리고 사용하면 된다. 다음처럼 GetComponent()로 불러와도 되고, 변수를 public으로 선언하여 인스펙터에서 넣어서 사용해도 된다. private Light2D _light; void Start() { _light = GetComponent(); }
2022.02.20 -
[Unity] 일방향 충돌, 측면 마찰 및 반발력을 설정할 수 있는 Platform Effector 2D
Platform Effector 2D 콜라이더에 일방향 충돌, 측면 부분의 마찰력/반발력 제거 등의 설정할 수 있는 컴포넌트 메이플스토리의 지형을 보면, 땅의 윗 부분은 충돌이 일어나지만 아랫 부분은 일어나지 않는다. 이런 일방향 충돌을 구현할 수 있다. 그 외에도, 2D 캐릭터가 벽면 콜라이더 오브젝트의 마찰력 때문에 벽에 끼어서 자연스럽게 내려오지 않는 상황도 해결할 수 있다. 이펙터(Effector)와 함께 사용하는 콜라이더는 다른 콜라이더와의 충돌을 위해, 일반적으로 트리거 모드로 설정되지 않는다. 이펙터를 적용할 콜라이더의 Used By Effector 프로퍼티를 활성화해야 한다. Platform Effector 2D의 프로퍼티 Used Collider Mask : Collider Mask 프로..
2022.02.19