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