스크립트
인트로
안녕하세요. 여러분들과 함께 게임 개발을 하는 베르입니다.
지난 영상에서는 죽은 플레이어들을 유령으로 만드는 작업을 진행해보았습니다.
이번에는 지난 영상에 이어서 남은 작업을 마무리하고 크루원 킬 기능을 끝내보겠습니다.
유령 플레이어끼리 서로 보이게 만들기
지난 작업에서는 죽어서 유령이 된 플레이어가 투명해지게 만들어줬지만 실제 게임과 다르게 유령 플레이어끼리 서로를 볼 수 없는 상태였습니다.
제일 처음할 작업은 이 문제를 해결해서 유령 플레이어들끼리 보이게 만들어 주는 것입니다.
먼저 IngameCharacterMover 스크립트를 찾아서 열어줍니다.
스크립트 에디터가 열리고 나면 먼저 Dead 함수로 가서 지난 영상에서 빼먹었던 플레이어가 죽은 뒤에 플레이어 타입이 Ghost로 바뀌는 코드를 추가해줍니다.
그 다음에는 SetVisibility 함수를 만들고 매개변수인 isVisible 값에 따라서 캐릭터를 숨기거나 보이게 해주는 코드를 작성합니다.
그리고 RpcDead 함수로 가서 내가 죽지 않은 상태일 때 다른 캐릭터가 죽었다면 투명하게 만들어주는 코드를 이 SetVisibility 함수로 대체해줍니다.
그 다음에는 자기가 죽었을 때 나보다 먼저 죽은 유령 플레이어들을 보이게 만들어줘야 합니다.
그대로 RpcDead 함수에서 내 캐릭터를 유령으로 바꾼 뒤 GameSystme의 GetPlayerList 함수로 플레이어 목록을 가져와서 이미 유령 상태인 플레이어들의 캐릭터를 SetVisibility 함수로 보이게 만들어주는 코드를 작성합니다.
코드를 모두 작성한 다음에는 저장하고 에디터로 돌아가서 게임을 빌드합니다.
빌드가 완료된 다음 테스트해보면 임포스터에게 죽어서 유령이 된 플레이어끼리 서로 볼 수 있게 되는 모습을 확인할 수 있습니다.
유령 플레이어가 벽뚫고 다니게 만들기
두 번째 작업은 유령이 된 플레이어가 장애물에 걸리지 않고 벽을 뚫고 다니게 만들어 주는 것입니다.
이 부분은 간단하게 IngameCharacterMover 클래스로 이동해서 GetComponent 함수로 게임오브젝트에 붙어있는 BoxCollider2D 컴포넌트를 찾아서 비활성화시키게 만들어 줍니다.
코드를 작성하고 저장한 다음 에디터로 돌아가서 게임을 빌드합니다.
빌드가 완료된 다음 실행해서 테스트해보면 유령이 된 플레이어는 자유롭게 벽을 뚫고 다니는 모습을 확인할 수 있습니다.
유령 플레이어의 시야
하지만 벽을 넘어다니다 보면 벽의 그림자가 이상해지는 모습을 볼 수 있습니다.
이런 문제를 제거하고 유령 플레이어의 시야 제한을 없애기 위해서 유령이 된 플레이어의 그림자 세팅을 바꿔주겠습니다.
Hierarchy 뷰를 보면 빛이 닿는 영역을 밝게 하고 그렇지 않은 영역은 어둡게 하기 위한 Shadow Light와 어두운 영역을 보이게 만들어주는 Global Light, 그리고 빛이 닿는 영역에 있는 캐릭터만 보이게 만들기 위해 영역을 구분짓는 Light Map Light가 있는 것을 볼 수 있습니다.
유령이 된 플레이어가 화면 전체를 볼 수 있게 만들어주기 위해서는 Light Map Light의 타입을 Global로 바꾸고 Shadow Light의 Intensity를 0, Global Light의 Intensity를 1로 변경해주면 될 것 같습니다.
우선 GameSystem 스크립트를 찾아서 열어줍니다.
스크립트 에디터가 열리고 나면 스크립트의 상단에 UnityEngine.Experimental.Rendering.Universal 네임스페이스를 using 선언해줍니다.
그리고 Light2D 타입의 shadowLight, lightMapLight, globalLight를 멤버 변수로 선언해줍니다.
그 다음에는 ChangeLightMode 함수를 선언하고 앞에서 이야기 한대로 매개변수로 받은 타입이 Ghost라면 lightMapLight의 lightType을 global로 변경하고 shadowLight의 intensity를 0, globalLight의 intensity를 1로 변경해줍니다.
그 다음에는 IngameCharacterMover의 RpcDead 함수로 이동해서 자신의 캐릭터가 죽은 뒤에 GameSystem의 ChangeLightMode 함수를 호출하도록 만들어줍니다.
코드를 모두 작성한 다음에는 저장하고 에디터로 돌아가서 Game System 오브젝트의 프로퍼티에 각 라이트들을 할당해줍니다.
그리고 작업이 완료되면 게임을 빌드합니다.
빌드가 완료되고 테스트해보면 유령이 된 플레이어는 그림자의 방해없이 모든 곳을 볼 수 있게 된 것을 확인할 수 있습니다.
아웃트로
이번 영상에서는 드디어 기나긴 크루원 킬 기능을 마무리했습니다.
다음 영상부터는 어몽어스의 다른 기능을 만들어보도록 하겠습니다.
이상 베르의 게임 개발 유튜브였습니다. 감사합니다.
타임라인
0:00 인트로
0:15 유령 플레이어끼리 보이게 만들기
1:42 유령 플레이어가 벽 뚫고 다니게 만들기
2:13 유령 플레이어 시야
4:23 아웃트로
[유니티 어필리에이트 프로그램]
아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.
[투네이션]
[Patreon]
[디스코드 채널]
'게임 제작 > Make the 시리즈' 카테고리의 다른 글
[Unity] Make the 어몽어스 (22) - 투표와 추방 기능 만들기 1 (0) | 2021.07.27 |
---|---|
[Unity] Make the 어몽어스 (21) - 리포트 기능 만들기 (0) | 2021.07.05 |
[Unity] Make the 어몽어스 (19) - 크루원 킬 기능 만들기 2 (0) | 2021.06.21 |
[Unity] Make the 어몽어스 (18) - 크루원 킬 기능 만들기 1 (0) | 2021.06.18 |
[Unity3D] Make the 어몽어스 (17) - 인게임 UI 구현하기 (0) | 2021.06.16 |