유니티(28)
-
[Unity] 이벤트 주도적 프로그래밍 (Event Driven Programming)
게임에는 수많은 이벤트들이 있다. 플레이어가 적 캐릭터의 시야에 언제 들어오고 나가는지, 체력이 언제 떨어지는지, 무기가 언제 바닥나는지, 적 캐릭터가 언제 위험한 바닥에 올라서는지 등, 우리가 게임할 때마다 자연스럽게 경험했던 것들이다. 키보드 입력이나 마우스 클릭, 오브젝트의 충돌체 영역 통과, 플레이어가 공격받는 것 등과 같은 순간처럼 이벤트는 수동적인 성격을 가지고 있으며, 스스로 능동적으로 발생하진 않는다. 이벤트는 응답을 만들고 발생시키며, 그 응답이 다시 그 이후의 응답을 일으키는 이벤트가 될 수 있다. 즉, 이벤트는 하나의 행동을 취함(이벤트)으로써 다른 행동을 수반(응답)하는 식으로, 서로의 행동들은 중요한 관계를 맺고 있다고 볼 수 있다. 프로퍼티(Property)를 통한 이벤트 구현의..
2022.04.03 -
[Unity] 시각적 디버깅에 용이한 기즈모(Gizmos)
유니티에서 디버깅을 하다 보면, 콘솔과 같은 데이터 문자열보다는 시각적인 선을 통해 확인하고 싶은 경우가 있다. 예를 들면, 적과 다른 캐릭터들에게 플레이어나 다른 오브젝트가 범위 내로 들어올 때 볼 수 있게 해주는 가시선 기능 같은 것이 대표적이다. 지구처럼 공전을 하는 오브젝트가 있을 때, 그 궤도를 볼 수 있는 선으로 표시를 해준다면 더욱 편리할 것이다. 이런 기능들이 지원된다면, 어떻게 게임이 작동하는지 눈으로 직접 확인을 할 수 있는 장점이 있다. (물론 이런 선들은 실제 인게임에서는 보이지 않는다.) 기즈모(Gizmos) 위에서 설명했던 기능들을 지원하기 위해, 유니티는 기즈모(Gizmos)라는 시각적 도구 장치를 제공한다. 충돌체의 와이어프레임 바운딩 박스(Wire Frame Bounding..
2022.03.11 -
[Unity] SendMessage와 BroadcastMessage
Unity 공부를 하다가 MonoBehaviour 클래스에서 제공하는 "SendMessage()"와 "BroadcastMessage()" 기능을 봤다. 위 함수들을 이용하여, 게임 오브젝트에 붙은 모든 컴포넌트의 함수를 이름으로 실행할 수 있다고 한다. 일반적으로 클래스에 접근하기 위해선, 객체를 가리키는 참조 변수를 통해 해당 클래스의 멤버 변수와 함수에 접근하게 된다. 하지만, "SendMessage()"와 "BroadcastMessage()"는 실행할 함수의 이름만 알고 있다면 참조 과정을 거치지 않아도 된다. SendMessage() 다음은 Unity API Documentation에 적혀있는 함수의 원형이다. public void SendMessage(string methodName, objec..
2022.02.22 -
[압량(Amnyang)] #13. 2D 게임 적(Enemy) 패턴 구현하기
이 때까지 플레이어 캐릭터, 조명 처리, 배경 세팅 작업을 진행했었다. 오늘은 플레이어를 방해할 경관(Police) 패턴을 만들어볼 생각이다. 공포 게임 특성상, 좀 어두워 보여야 하기에 유니티 스프라이트 렌더러에서 색감을 어둡게 낮췄다. 이제 차례대로 한 번 만들어보자. 1. 경관 외관 세팅하기 평소 상태(Idle), 걷기(Walk), 인기척 감지(Feel) 애니메이션은 다른 팀원이 만들어준 상태다. 따라서, 이번에는 따로 애니메이션 작업을 안 해도 됐다. 다만, 원래 기획서 상에는 이런 내용이 없었지만 우리가 개발하는 게임이 공포게임인큼 좀 더 확실한 이펙트를 주고 싶었다. 경관이 들고 있는 손전등에 라이트(Light)를 달아줬다. 흰색이나 노란색 조명은 오히려 플레이어를 구하러 온 경관 느낌이 났기..
2022.02.21 -
[Unity] "Universal RP Light 2D"를 스크립트 제어하기
다음 💡네임스페이스 사용 선언이 필요하다. using UnityEngine.Experimental.Rendering.Universal; 그리고 사용하면 된다. 다음처럼 GetComponent()로 불러와도 되고, 변수를 public으로 선언하여 인스펙터에서 넣어서 사용해도 된다. private Light2D _light; void Start() { _light = GetComponent(); }
2022.02.20 -
[압량(Amnyang)] #12. 2D 캐릭터가 벽에 달라붙는 버그 수정 + 평상 밑에 숨기 구현하기
게임 하다가 한 번씩은 그래도 깜짝(?)놀랄만한 공포 이벤트를 저번 시간에 만들었다. 이번에는 적(무당)의 집 평상 밑에서 숨기 버튼('F키')를 눌렀을 때, 숨도록 하는 기능을 만들어야 한다. 1. 시작하자마자 버그 마주치기 평상 부분이 레이어가 나뉘어져 있지 않아서, 유니티에서 오브젝트로 존재하지 않는 상황이다. 그래서 발판으로 사용하기 위한 빈 오브젝트를 생성하고, 콜라이더를 부착해줬다. 그리고 테스트를 위해, 캐릭터를 조작하여 달리면서 점프하여 평상 위로 올라가게 하려했다. 근데 만약 점프 중간에 평상 측면 콜라이더 부분에 닿이게 되면 아래와 같이 낀 것처럼 된다. 정상적인 상황이라면, 위와 같이 끼었다면 방향 조작이 있다 하더라도 중력에 의해 자연스럽게 아래로 미끄러져 내려와야 한다. 뭐가 문제..
2022.02.19