개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요!

 

베르의 게임 개발 유튜브

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다! 게임 개발에 도움이 되는 강좌들을 올리는 채널입니다! [투네이션 후원] https://toon.at/donate/637735212761460238 [유니티 어필리에이트

www.youtube.com

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 유니티에서 머티리얼을 다룰 때 알아두면 좋을 머티리얼 인스턴싱에 대해서 알아봅시다.

 

사용 엔진 버전 : 2020.3

 

타임라인

0:00 인트로

0:11 기본 머티리얼

1:25 머티리얼 인스턴싱

3:06 아웃트로

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번에는 유니티에서 머티리얼을 다룰 때 알아두면 좋을 머티리얼 인스턴싱에 대해서 알아보겠습니다.

기본 머티리얼와 오브젝트

그럼 먼저 기본 머티리얼과 씬에 배치된 오브젝트의 특성에 대해서 알아보도록 하겠습니다.

씬에 캡슐 오브젝트를 3개 추가합니다.

각각의 캡슐 오브젝트가 똑같은 몬스터의 다른 타입이라고 가정해보겠습니다.

그 다음엔 프로젝트 뷰에서 이 몬스터들이 사용할 머티리얼을 생성하고 적용해줍니다.

이 몬스터 타입들은 같은 머티리얼을 공유하며 타입 1번 몬스터는 기본 형으로 빨간색을 머티리얼을 사용하고 타입 2는 검붉은 색 머티리얼을 사용하며, 타입 3번 몬스터는 주황색을 사용하도록 하는 방식으로 머티리얼의 색상만 다르게 적용하도록 기획되었다고 가정하겠습니다.

이제 이 기획을 적용하기 위해서 타입 2 몬스터를 선택하고 타입 2 몬스터의 머티리얼 색상을 변경하면 의도와는 다르게 모든 몬스터의 색상이 변경됩니다.

이것을 해결하는 가장 간단한 방법은 각 몬스터마다 머티리얼을 만들어서 적용해주는 것입니다.

이렇게 문제를 해결할 수도 있겠지만, 몬스터가 아니라 플레이어라면 또 문제는 달라집니다.

RTS 게임처럼 플레이어의 수에 따라 색상이 달라진다면, 이 색상에 대응하는 모든 머티리얼을 만드는 방식은 매우 비효율적입니다.

머티리얼 인스턴싱

그렇기 때문에 머티리얼 인스턴싱이라는 방법을 이용해야 합니다.

머티리얼 인스턴싱은 간단하게 이야기해서 원본 머티리얼을 복사해서 자기만의 머티리얼을 만드는 것입니다.

MaterialIntancer라는 이름으로 C# 스크립트를 생성하고 스크립트 에디터를 엽니다.

스크립트 에디터가 열리고 나면 멤버 변수로 인스턴싱할 머티리얼을 가지고 있는 MeshRenderer 타입의 변수와 캐릭터의 색상을 지정하는 Color 변수를 선언해줍니다.

그리고 Start 함수나 Awake 함수에서 GetComponent로 MeshRenderer를 가져오고 가져온 MeshRenderer의 material을 Instantiate 함수로 복제해줍니다.

그 다음에 머티리얼의 색상을 변경하도록 코드를 작성합니다.

코드 작업이 끝나면 코드를 저장하고 에디터로 이동합니다.

에디터로 돌아온 다음에는 각 몬스터 오브젝트에 컴포넌트를 부착하고 변경할 색상을 지정해줍니다.

이제 게임을 플레이시켜보면 각자의 머티리얼이 서로에게 간섭하지 않고 서로 다른 색깔을 표시하게 되는 것을 볼 수 있습니다.

그리고 오브젝트를 선택해서 살펴보면 원래는 M_Monster (Material)이라고 표시되던 머티리얼이 M_Monster (Instance) (Clone)으로 표시되면서 현재 머티리얼이 원본이 아닌 복제된 머티리얼임을 알 수 있습니다.

물론 이렇게 무작정 머티리얼을 복제하게 만들면 같은 머티리얼에 대해서도 복제본이 생겨나기 때문에 머티리얼 관리자 같은 방식을 이용해서 완전히 같은 머티리얼이 이미 복제 생성되어 있는 상황이라면 그것을 가져와서 사용하도록 하는 것이 좋습니다.

아웃트로

이번 영상에서는 원본 머티리얼을 공유하는 오브젝트들이 각자 다른 방식으로 표현되도록 할 수 있는 머티리얼 인스턴싱에 대해서 알아보았습니다.

이 강좌는 시청자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Create 2D & 3D Experiences With Unity's Game Engine | Unity Pro - Unity Store

Unity Pro software is a real-time 3D platform for teams who want to design cross-platform, 2D, 3D, VR, AR & mobile experiences with a full suite of advanced tools.

store.unity.com

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요! 

 

베르의 게임 개발 유튜브

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다! 게임 개발에 도움이 되는 강좌들을 올리는 채널입니다! [투네이션 후원] https://toon.at/donate/637735212761460238 [유니티 어필리에이트

www.youtube.com

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다! 이번에도 임무를 계속해서 만들어봅시다.

 

사용 엔진 버전 : 2019.4

 

타임라인

0:00 인트로

0:08 오른쪽 전선 배치

0:41 RightWire 클래스 생성과 연결 기능 구현

2:23 기능분리

5:05 아웃트로

 

[예제]

https://drive.google.com/file/d/1EsCSDsd5Ekt4eehA9WhIyWT0QTsVzw0N/view?usp=sharing

 

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

지난 영상에 이어서 임무를 계속해서 만들어보겠습니다.

오른쪽 전선 배치

이번에는 끌어온 왼쪽 전선이 연결될 오른쪽 전선을 만들 차례입니다.

Left Wire를 복사해서 크기를 -1로 변경한 다음 오른쪽으로 옮겨 줍니다.

그리고 오브젝트의 이름을 Right Wire로 바꿔준 뒤 Wire Body에 붙어있는 Left Wire 컴포넌트를 제거해줍니다.

참고로 하이어라키에서 Right Wire가 Left Wire보다 상단으로 가도록 배치해줘야 합니다.

RightWire 클래스 생성과 연결 기능 구현

그 다음에는 오른쪽 와이어에 붙을 클래스를 만들 차례입니다.

Right Wire라는 이름으로 C# 스크립트를 생성하고 스크립트 에디터를 엽니다.

그리고 LeftWire 스크립트로 이동합니다.

LeftWire 스크립트의 Update 함수에서 마우스 클릭을 떼는 부분을 찾아줍니다.

여기서 클릭을 떼는 순간에 RayCast를 발사하고 RightWire를 찾도록 만들어줍니다.

RightWire를 찾은 다음에는 LeftWire의 길이와 방향을 발견한 RightWire를 향하도록 만들어줍니다.

코드를 모두 작성한 다음에는 저장하고 에디터로 이동합니다.

에디터에서는 앞에서 배치해둔 Right Wire의 Wire Body에 RightWire 컴포넌트를 붙여줍니다.

그리고 게임을 플레이해서 테스트해보면 왼쪽의 와이어를 끌어서 오른쪽 와이어에 붙일 수 있는 것을 볼 수 있습니다.

잠시 플레이를 중단하고 오른쪽 와이어를 복사해서 아래 쪽으로 쭉 배치해줍니다.

그리고 다시 플레이하고 테스트 해보면 오른쪽 와이어 중에 하나를 골라서 마음대로 연결할 수 있는 모습을 볼 수 있습니다.

그럼 한 번 더 플레이를 중단하고 이번에는 왼쪽 와이어를 복사해서 배치해줍니다.

그리고 다시 플레이해서 테스트 해보겠습니다.

이번에는 제 의도와는 조금 다르게 왼쪽 와이어 중 하나만 선택해도 모든 와이어가 딸려나오는 모습을 볼 수 있습니다.

기능 분리

이제 LeftWire에 몰아 넣어둔 기능을 분리할 때가 왔습니다.

먼저 FixWiringTask라는 이름으로 C# 스크립트를 생성합니다.

사실 원래라면 여러 임무 클래스를 사용해야하기 때문에 BaseTask 클래스를 만들고 그 클래스를 상속받는 방식으로 구현하겠지만 지금은 강좌 진행 속도를 위해서 FixWiringTask 클래스에서 바로 구현하도록 하겠습니다.

스크립트 에디터로 이동해서 FixWiringTask 클래스의 멤버 변수로 List<LeftWire> 타입의 mLeftWires와 List<RightWire> 타입의 mRightWires를 선언해줍니다.

그리고 현재 선택된 와이어를 기억하기 위해서 LeftWire 타입으로 mSelectedWire도 선언해주겠습니다.

멤버 변수 선언이 끝난 다음에는 LeftWire 스크립트로 이동합니다.

이 Update 함수에 있는 코드를 FixWiringTask의 Update 함수로 옮겨줘야 합니다.

그전에 이 코드에 있는 기능 중에 LeftWire가 자체적으로 처리해야 하는 코드를 함수로 따로 빼겠습니다.

SetTarget 함수를 만들어주고 Update의 코드 중에 마우스 위치를 대상으로 와이어의 각도와 길이를 수정하는 코드를 붙여넣은 뒤 수정해줍니다.

그 다음에는 ResetTarget 함수를 만들고 와이어의 위치와 각도를 원상복구하는 코드를 옮겨줍니다.

함수를 모두 만든 다음에는 Update 함수의 각 부분의 코드를 함수로 대체해줍니다.

그리고 이렇게 완성된 코드를 잘라내서 FixWiringTask의 Update 함수로 옮겨줍니다.

그러면 당연하게도 에러가 발생할텐데 대부분은 mSelectedWire로 바꾸거나 추가해주면 됩니다.

코드를 모두 작성한 다음에는 저장하고 에디터로 이동합니다.

에디터로 돌아온 다음에는 와이어들의 부모 오브젝트에 방금 만든 FixWiringTask 컴포넌트를 붙여주고 각 와이어 리스트에 Wire Body들을 넣어줍니다.

모든 작업이 끝난 다음에 게임을 플레이해서 테스트해보면 왼쪽 와이어들이 한꺼번에 움직이지 않고 각자 따로 마우스로 끌어서 오른쪽 와이어에 붙여지는 모습을 확인할 수 있습니다.

아웃트로

이번 영상에서는 끊어진 전선을 연결하는 임무에서 왼쪽 와이어를 끌어서 오른쪽 와이어에 붙이는 기능을 만들어 보았습니다.

이 강좌는 시청자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Create 2D & 3D Experiences With Unity's Game Engine | Unity Pro - Unity Store

Unity Pro software is a real-time 3D platform for teams who want to design cross-platform, 2D, 3D, VR, AR & mobile experiences with a full suite of advanced tools.

store.unity.com

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요!

 

베르의 게임 개발 유튜브

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다! 게임 개발에 도움이 되는 강좌들을 올리는 채널입니다! [투네이션 후원] https://toon.at/donate/637735212761460238 [유니티 어필리에이트

www.youtube.com

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 C#의 리스트에 대해서 알아봅시다.

 

타임라인

0:00 인트로

0:08 리스트란?

0:38 리스트 생성과 데이터 저장

1:55 반복문으로 리스트 안의 데이터 출력하기

3:36 리스트 안의 데이터 찾기

4:20 리스트 안의 데이터 삭제하기

5:35 아웃트로

 

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번에는 C#의 리스트에 대해서 알아보겠습니다.

리스트란?

먼저 간단하게 이야기해서 리스트는 이름 그대로 하나의 목록처럼 배열과 유사한 방식으로 데이터들을 저장하는 컨테이너입니다.

C# 기초 중에 배열에 대해서 배우신 분들이라면 여러 개의 값들을 묶어서 배열로 저장하는 방법을 기억하고 계실 겁니다.

하지만 배열의 단점은 그 크기가 생성 당시의 크기로 제한이 되기 때문에 배열의 크기를 변경하기 위해서는 배열을 새로 만들어야 합니다.

하지만 리스트는 동적으로 크기가 바뀌기 때문에 그럴 필요가 전혀 없고 메모리가 허용하는 만큼 자동으로 늘어납니다.

리스트 생성과 데이터 저장

먼저 리스트를 만드는 방법을 알아보겠습니다.

리스트를 만들기 위해서는 리스트가 포함되어 있는 System.Collections.Generic 네임스페이스를 using 선언해줘야 합니다.

그 다음 List를 선언하고 뾰족괄호 안에 이 리스트가 저장하고자 하는 데이터 타입을 넣어주면 됩니다.

지금은 int로 적겠습니다.

참고로 이렇게 뾰족괄호 안에 원하는 타입을 넣는 방식은 제네릭이라고 하며 원하는 데이터 타입을 넣을 수 있게 해주는 개념입니다.

이런 제네릭 개념이 없으면 넣고자 하는 데이터 타입에 따라서 IntList, FloatList, StringList 등 같은 기능을 제공하지만 안에 담는 데이터가 다른 클래스들이 무수히 많이 생겨나게 됩니다.

물론 이에 대한 자세한 내용은 추후에 제네릭을 다루는 강좌에서 이야기해보도록 하겠습니다.

이렇게 새로 선언한 리스트는 new 키워드를 사용해서 할당하고 사용하면 됩니다.

그리고 이 리스트에 데이터를 저장하는 방법은 아주 간단합니다.

이런 식으로 Add 함수를 호출하고 매개변수에 넣을 데이터를 입력해주면 됩니다.

이렇게 Add 함수로 넣어준 데이터들은 리스트 안에 넣어준 순서대로 저장됩니다.

이 방법 외에도 Insert 함수를 사용하면 데이터를 맨 끝자리가 아니라 원하는 위치에 넣을 수도 있습니다.

이렇게 첫 번째 매개 변수에는 숫자가 들어갈 위치를 넣고, 두 번째 매개 변수에는 들어갈 데이터를 넣어줍니다.

반복문으로 리스트 안의 데이터 출력하기

앞에서는 리스트 안에 데이터를 넣는 방법을 알아보았으니 이번에는 반복문을 이용해서 리스트를 순회하면서 리스트 안에 들어있는 데이터를 출력해보겠습니다.

먼저 리스트를 순회하는 방법은 크게 두 가지가 있습니다.

먼저 for문을 이용하는 방법입니다.

for문을 이용해서 두 번째 i의 비교 대상에 리스트의 Count, 즉 리스트 안에 들어있는 아이템의 갯수를 넣어주면 for 문은 리스트 안에 들어있는 아이템의 갯수만큼 반복하게 됩니다.

그리고 그 안에서 리스트의 각 방에 접근하여 데이터를 출력하면 이렇게 콘솔창에 표시됩니다.

두 번째 방법은 foreach문을 이용하는 방법입니다.

foreach를 사용하면 따로 방 번호에 해당하는 인덱스 값을 사용하지 않고 리스트를 순회할 수 있습니다.

역시 출력하고 나면 for문으로 순회하며 출력했을 때와 같은 결과를 얻을 수 있습니다.

그럼 for문을 사용해서 하는 리스트 순회와 foreach문을 사용해서 하는 리스트 순회는 어떤 차이가 있으며 어떤 방식이 더 나은지 궁금해하시는 분들이 있을 겁니다.

좋은 자세입니다.

그런 작은 궁금증을 가지고 계속해서 공부하는 자세가 여러분들이 더 나은 프로그래밍 실력을 쌓는 데 큰 발판이 될 겁니다.

먼저 이 두 방식은 성능적인 면에서 현재의 컴퓨터에서는 유의미한 차이를 보이지는 않습니다.

다만, 사용 방식에 따라 다르게 사용하면 되는데, 리스트에 접근하는 방 번호가 유의미하지 않으며 모든 리스트 방을 순차적으로 돌아야 한다면 foreach문을 사용하면 되고, 방 번호가 유의미한 계산에 따라 방을 선택해서 작동해야 한다면 for문을 사용하면 됩니다.

그리고 또 한 가지, 순회하는 도중에 리스트에 데이터를 추가하거나 삭제하는 등의 변동이 발생한다면 for문을 사용하는 것이 좋습니다.

데이터 찾기

그 다음에는 리스트에 데이터를 넣어두고 나중에 필요할 때 원하는 데이터를 꺼내쓰거나 원하는 데이터가 리스트의 어느 위치에 있는지 확인할 수 있어야 합니다.

먼저 Contains 함수를 사용하면 원하는 데이터가 리스트 안에 들어있는지 일일이 반복문을 사용하지 않고도 확인할 수 있습니다.

그리고 원하는 데이터가 리스트의 몇 번째 위치에 있는지 찾는 방법은 IndexOf 함수를 사용하면 됩니다.

참고로 IndexOf 함수를 사용할 때 리스트 안에 들어있지 않은 값을 넣으면 -1을 돌려줍니다.

데이터 삭제하기

리스트에 저장한 데이터는 계속해서 저장해두는 것이 아니라 필요에 따라서 더 이상 필요하지 않은 데이터는 리스트에서 삭제해야 합니다.

그러므로 이번에는 리스트에서 데이터를 삭제하는 방법을 알아보겠습니다.

리스트에서 데이터를 삭제하는 방법 역시 간단합니다.

Remove 함수를 호출하고 매개 변수에 지우고자 하는 값을 넣어주면 됩니다.

다만 이 때 같은 값이 여러 개가 들어있다면 리스트에서 가장 앞에 있는 값만 지워집니다.

그러므로 같은 값들이 모두 삭제되기를 원한다면 RemoveAll 함수를 사용해야 합니다.

다만, RemoveAll 함수는 조금 복잡한 매개 변수를 넣어줘야 하니 이 부분은 적당히 알아두시면 됩니다.

이 외에도 RemoveAt 함수로 리스트의 원하는 위치에 있는 값을 지울 수도 있고 RemoveRange 함수를 사용하면 원하는 위치에서부터 특정한 범위 안에 있는 값을 삭제할 수도 있습니다.

마지막으로 Clear 함수를 사용하면 리스트 안에 있는 모든 데이터를 삭제할 수 있습니다.

아웃트로

이번 영상에서는 C#의 리스트에 대해서 알아보았습니다.

이 외에도 리스트에는 훨씬 많은 기능이 있습니다.

상세한 기능들에 대해서는 강좌 요청이 있다면 추후에 만들어보도록 하겠습니다.

이 강좌는 시청자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Create 2D & 3D Experiences With Unity's Game Engine | Unity Pro - Unity Store

Unity Pro software is a real-time 3D platform for teams who want to design cross-platform, 2D, 3D, VR, AR & mobile experiences with a full suite of advanced tools.

store.unity.com

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요! 

 

베르의 게임 개발 유튜브

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다! 게임 개발에 도움이 되는 강좌들을 올리는 채널입니다! [투네이션 후원] https://toon.at/donate/637735212761460238 [유니티 어필리에이트

www.youtube.com

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 어몽어스의 전선 고치기 임무를 만들어봅시다!

 

사용 엔진 버전 : 2019.4

 

리소스 : https://drive.google.com/file/d/1-QrHUpE40wdpZpNthEFHxo3Iw50-Ufi_/view?usp=sharing

 

타임라인

0:00 인트로

0:27 끊어진 전선 UI 배치하기

2:22 와이어 끌기 기능 구현

4:05 와이어 끌기 기능 테스트

4:27 아웃트로

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번에는 크루원들이 진행해야 하는 미션을 만들어보겠습니다.

물론 실제 게임에서는 맵 하나에 굉장히 많은 수의 미션이 있지만 모든 미션을 다 만들었다간 어몽어스 강좌가 앞으로 1년은 더 만들어야 할 것 같으니 하나의 미션과 미션 진행률에 집중하도록 하겠습니다.

본격적인 작업에 들어가기 전에 영상 하단의 링크에서 리소스를 다운로드 받아서 임포트합니다.

끊어진 전선 UI 배치하기

우리가 만들 임무는 끊어진 전선을 연결하는 임무입니다.

먼저 Task UI라는 이름으로 이미지를 배치하고 화면 전체를 덮도록 세팅한 다음 이미지를 투명하게 만들어 줍니다.

그리고 그 이미지 아래에 이미지를 하나 더 배치하고 전선 패널 이미지를 넣어줍니다.

그 다음에는 빈 게임 오브젝트를 만들고 그 아래에 전선 베이스와 맞는 전선끼리 연결되었을 때 불빛이 표시될 이미지를 하나씩 배치합니다.

그리고 Wire Base 아래에 같은 스프라이트를 사용해서 이미지를 하나 더 배치한 뒤 앵커를 middle right로 변경하고 Pivot X를 0으로 변경해줍니다.

그러면 이미지의 길이를 바꿔도 제 위치에서 늘어나게 됩니다.

그리고 Wire Body 아래에 잘린 전선 피복과 끊어진 구리선 이미지를 추가한 뒤 둘 모두 앵커를 middle right로 변경하고 Pivot X를 0으로 변경해줍니다.

그러면 마찬가지로 Wire Body의 길이가 변경되어도 끊어진 부분이 함께 움직이는 것을 볼 수 있습니다.

그 다음에는 끊어진 전선 구리 이미지 오브젝트에 Box Collider 2D 컴포넌트를 붙여준 뒤 콜라이더가 끊어진 전선 부분을 덮도록 만들어줍니다.

그리고 Tag에서 task-wire라는 이름으로 태그를 하나 만들어주고 이 태그를 적용해줍니다.

와이어 끌기 기능 구현

전체적인 UI 배치는 뒤로 넘겨두고 우선 와이어를 컨트롤 하는 기능부터 만들어보겠습니다.

먼저 LeftWire라는 이름으로 C# 스크립트를 생성하고 스크립트 에디터로 이동합니다.

스크립트 에디터가 열리고 나면 스크립트의 상단에 UnityEngine.UI 네임스페이스를 using 선언해줍니다.

그리고 RectTransform 타입으로 wireBody라는 멤버변수와 LeftWire 타입의 selectedWire 변수를 선언해줍니다.

그 다음에는 Update 함수로 가서 마우스 버튼을 누르는 순간에 RayCast를 쏴서 맞은 콜라이더의 부모에서 LeftWire를 찾아서 selectedWire로 설정해줍니다.

그리고 SelectedWire가 비어있지 않은 동안에는 오브젝트의 위치와 마우스 커서의 위치를 이용해서 전선이 움직일 각도와 거리를 계산하고 이것을 wireBody에 적용하도록 만들어줍니다.

마지막으로 마우스 클릭을 떼는 순간에 wireBody의 각도와 거리를 원상복구 시키고 selectedWire를 비워주도록 만들어줍니다.

추가로 게임 해상도가 달라질 때마다 변경되는 캔버스 크기 때문에 distance가 일치하지 않는 문제를 해결하기 위해서 캔버스의 크기를 가져와서 distance에 캔버스 크기의 역수를 곱해주는 코드를 추가합니다.

지금은 기능을 프로토타이핑하는 과정이니 모든 기능을 LeftWire에 추가한 상황이지만 다른 부분을 만들면서 이 기능들을 각자 맞는 위치로 이동시킬 예정입니다.

코드를 모두 작성한 다음에는 코드를 저장하고 에디터로 이동합니다.

와이어 끌기 기능 테스트

에디터로 이동한 다음에는 앞에서 만들어둔 Wire Body 오브젝트에 LeftWire 컴포넌트를 붙이고 WireBody 프로퍼티에 Wire Body 오브젝트를 할당해줍니다.

그 다음 게임을 플레이해서 테스트해보면 끊어진 전선 구리 부분을 클릭해서 드래그 하면 전선이 마우스를 따라서 움직이고 클릭을 떼는 순간 전선이 원래 자리로 돌아가는 모습을 볼 수 있습니다.

아웃트로

이번 영상에서는 어몽어스의 임무 중 하나인 끊어진 전선 수리하기 임무를 만들기 위해서 와이어를 끌어당기는 부분을 만들어보았습니다.

이 강좌는 시청자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Create 2D & 3D Experiences With Unity's Game Engine | Unity Pro - Unity Store

Unity Pro software is a real-time 3D platform for teams who want to design cross-platform, 2D, 3D, VR, AR & mobile experiences with a full suite of advanced tools.

store.unity.com

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요! 

 

베르의 게임 개발 유튜브

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다! 게임 개발에 도움이 되는 강좌들을 올리는 채널입니다! [투네이션 후원] https://toon.at/donate/637735212761460238 [유니티 어필리에이트

www.youtube.com

 

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 C#의 enum에 대해서 알아봅시다.

 

타임라인

0:00 인트로

0:40 enum을 사용하지 않을 때

1:55 열거형 enum

3:30 아웃트로

 

[참고자료]

마이크로소프트 C# 공식 도큐먼트 - https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/builtin-types/enum

예제로 배우는 C# 프로그래밍 - https://www.csharpstudy.com/CSharp/CSharp-enum.aspx

 

[예제]

https://drive.google.com/file/d/1E1MBAEJVS3iQ8u8OMT-_Z3BZv2SZ9j5E/view?usp=sharing

 

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번에는 C#의 enum에 대해서 알아보도록 하겠습니다.

보통 인간은 문자와 기호 그리고 숫자를 이용하지만 컴퓨터는 모든 것을 0과 1로 된 숫자로 받아들입니다.

그렇기 때문에 인간이 알아보기 쉽게 문자열로 만들면 프로그램이 느려지고 컴퓨터가 알아보기 쉽게 숫자로 만들면 인간이 알아보기 어려워집니다.

이것을 해결하기 위한 방법의 하나가 바로 enum, 즉 열거형입니다.

열거형에 대해서 알아보기 위해서 먼저 비주얼 스튜디오를 실행하고 빈 C# 프로젝트를 생성해줍니다.

enum을 사용하지 않을 때

먼저 enum을 사용하지 않고 프로그램을 만들 때는 어떻게 되는지 알아봅시다.

프로그램은 아주 간단한 형태라고 해도 여러 가지의 상태나 타입을 가지게 되는 경우가 많습니다.

지금은 간단한 예시로 두 개의 숫자와 계산 타입을 받아서 결과 값을 돌려주는 함수를 만들어보겠습니다.

물론 실제 프로그래밍에서는 이렇게 Calculate 함수 하나만 만들고 타입에 따라서 계산 결과를 돌려주는 것보다는 각 계산 방식에 따라서 함수를 따로 만드는 방식을 채택하겠지만 지금은 예시를 보여드리기 위함이니 이렇게 만들도록 하겠습니다.

먼저 계산 타입을 int 형으로 받는 방식은 이렇게 구현됩니다.

이런 int 타입으로 구현 된 방식의 경우에는 각 숫자가 어떤 계산 타입을 말하는 것인지 알기 어려운 문제가 있음을 한 눈에 알 수 있습니다.

그래서 어떤 숫자가 어떤 계산 방식을 뜻하는지 함수 사용자에게 알리기 위해서는 많은 양의 주석을 달 수 밖에 없습니다.

그 다음 방법은 타입을 문자열로 받는 방식입니다.

이렇게 문자열로 타입을 받게 되면 사람이 코드를 읽기는 쉬워지지만, int 타입과 마찬가지로 어떤 문자열이 어떤 타입을 나타내는지 추가로 주석을 달아서 알려줘야 하며, 더 큰 문제는 타입을 입력할 때 오타가 발생할 수 있다는 점입니다.

열거형 enum

이렇게 타입이나 상태를 정의할 때 int나 string을 사용하면 발생하는 문제들을 살펴보았습니다.

이번에는 이 영상의 주제인 enum으로 계산 타입을 만들어보겠습니다.

enum을 만들 때는 이렇게 해당 열거형의 이름을 적고 중괄호 안에 각 타입의 이름을 적어주면 됩니다.

이 때 이름은 문자열로 적듯이 원하는 이름을 자유롭게 적어주면 됩니다.

그리고 이렇게 선언된 열거형 키워드들은 각각 하나의 정수에 대응되는데 추가로 값을 대응시켜주지 않으면 배열처럼 0부터 차례대로 숫자가 매겨집니다.

이렇게 각 키워드마다 배열처럼 숫자가 매겨지는 점을 이용해서 enum을 int 타입으로 바꿔서 배열에 접근하는 방식으로 사용할 수 있습니다.

물론 반대로 int 타입을 enum 형식으로 바꿀 수도 있습니다.

그리고 키워드들이 다른 값을 가지기를 원하면 이런 식으로 대입시켜주면 되고 대입해준 키워드부터는 대입해준 값을 기반으로 숫자가 올라갑니다.

추가로 이렇게 키워드에 값을 대입해주는 방식을 이용하면 서로 다른 키워드가 같은 값을 가지게 만들 수도 있습니다.

이렇게 만든 enum 타입으로 다시 Calculate 함수를 만들어보면 이런 방식으로 구현됩니다.

앞에서 int나 string으로 만든 함수와 별 차이는 없어보이지만, 실제로 사용했을 때는 별도의 주석이나 설명없이도 어떤 계산 타입이 존재하며 어떤 값을 넣어줘야 하는지 명확하게 알 수 있습니다.

이런 방식 외에도 아래의 참고자료 링크를 보시면 Flags 어트리뷰트를 이용해 비트 연산을 하는 응용법도 있습니다.

비트연산과 관련된 내용은 지금 영상 오른쪽 상단에 표시되는 영상 링크를 통해서 보실 수 있습니다.

아웃트로

이번 영상에서는 C#의 enum에 대해서 알아보았습니다.

이 강좌는 시청자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Create 2D & 3D Experiences With Unity's Game Engine | Unity Pro - Unity Store

Unity Pro software is a real-time 3D platform for teams who want to design cross-platform, 2D, 3D, VR, AR & mobile experiences with a full suite of advanced tools.

store.unity.com

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요!

 

베르의 게임 개발 유튜브

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다! 게임 개발에 도움이 되는 강좌들을 올리는 채널입니다! [투네이션 후원] https://toon.at/donate/637735212761460238 [유니티 어필리에이트

www.youtube.com

 

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 투표 후에 플레이어가 추방되는 연출과 기능을 만들어보겠습니다!

 

리소스 : https://drive.google.com/file/d/1aCeadnc5XUeTM0fwNUsFQvsu5lFv5C8r/view?usp=sharing

 

사용 엔진 버전 : 2019.4

 

타임라인

0:00 인트로

0:24 추방 UI 배치

1:27 추방 UI 기능 구현

8:05 씬 세팅과 테스트

8:59 아웃트로

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

아주 오랜만에 메이크 더 어몽어스 강좌로 돌아왔습니다.

이번에는 지난 강좌에 이어서 투표로 결정된 추방자가 추방되는 연출을 추가하고 추방된 플레이어가 죽는 기능을 추가해보도록 하겠습니다.

본 작업에 들어가기 전에 영상 하단의 링크에서 리소스를 다운로드 받아서 임포트해줍니다.

추방 UI 배치

바로 직전 강좌에서는 투표 직후에 누가 표를 많이 받았는지 보여주는 결과까지 구현했으니 이제 투표 결과로 표를 많이 받은 플레이어를 추방하는 UI를 추가할 차례입니다.

Gameplay 씬에서 Canvas 오브젝트 아래에 이미지 오브젝트를 하나 생성하고 Ejection UI 라는 이름을 붙여줍니다.

그리고 이 이미지가 화면 전체를 덮도록 만들어주고 색을 검은 색으로 만들어 줍니다.

그 다음에는 이 이미지 아래에 텍스트 오브젝트를 만들고 글자 색과 글자 크기를 적당하게 지정해줍니다.

그리고 이미지 오브젝트를 하나 더 생성하고 방금 전에 임포트한 이미지를 넣어주고 머티리얼과 위치를 설정해줍니다.

마지막으로 추방된 플레이어 이미지가 날아갈 경로의 왼쪽 끝과 오른쪽 끝을 표시하는 오브젝트를 배치합니다.

추방 UI 기능 구현

UI 배치를 마친 다음에는 기능을 만들 차례입니다.

EjectionUI라는 이름으로 C# 스크립트를 생성하고 스크립트 에디터를 엽니다.

스크립트 에디터가 열리고 나면 먼저 스크립트 상단에 UnityEngine.UI 네임스페이스를 using 선언해줍니다.

그리고 EjectionUI 클래스의 멤버 변수로 Text 타입의 ejectionResultText과 Image 타입의 ejectionPlayer를 선언해줍니다.

그 다음에는 추방된 플레이어 이미지가 날아갈 경로의 왼쪽 끝과 오른쪽 끝 위치를 담을 RectTransform 타입의 left와 right 변수를 선언합니다.

먼저 Start 함수를 만들고 ejectionPlayer 이미지의 머티리얼을 인스턴스화 해줍니다.

그 다음에는 Open 함수를 만들고 추방당할 플레이어가 있는지를 뜻하는 bool 타입의 isEjection, 추방당한 플레이어의 색상을 표현할 EPlayerColor 타입의 ejectionPlayerColor, 추방당한 플레이어가 임포스터인지 알려주는 bool 타입의 isImposter, 남아있는 임포스터의 수를 알려주는 int 타입의 remainImposterCount를 매개변수로 선언해줍니다.

이 함수에서는 먼저 isEjection 값에 따라서 출력될 텍스트를 만들어 주고 난 다음 오브젝트를 활성화시켜줍니다.

그 다음에는 ShowEjectionResult_Coroutine 함수를 만듭니다.

여기서는 글자가 순서대로 촤라락 보여지는 기능을 만들기 위해서 텍스트를 앞부분과 뒷부분으로 나눠줄 겁니다.

먼저 추방되는 플레이어의 여부에 따라서 플레이어 이미지의 색을 결정해줍니다.

그 다음에는 추방되는 캐릭터 이미지를 회전시키면서 날아가도록 코드를 작성합니다.

그리고 적당한 딜레이를 주면서 글자를 순서대로 출력하도록 만들어 줍니다.

코루틴 함수를 모두 작성한 다음에는 이 코루틴 함수를 Open 함수에서 호출하도록 만들어줍니다.

마지막으로 Close 함수를 만들어서 EjectionUI를 닫도록 코드를 작성합니다.

그 다음 작업으로는 투표가 끝난 이후에 이 EjectionUI를 호출해줘야 합니다.

우선 이 EjectionUI로 접근하기 쉽도록 IngameUIManager로 이동해서 EjectionUI를 캐싱해서 프로퍼티로 불러올 수 있도록 만들어 줍니다.

그 다음에는 GameSystem 스크립트를 열고 MeetingProcess_Coroutine 함수로 이동합니다.

이 코루틴 함수의 아래에 CalculateVoteResult_Coroutine 함수를 만들어 줍니다.

CalculateVoteResult_Coroutine 함수에서는 투표 결과를 계산해야 하는데 먼저 어느 플레이어가 가장 많은 표를 받았는지 확인해야 합니다.

플레이어들이 받은 표를 계산하여 정렬시키기 위해 IComparer 인터페이스를 상속받아서 CharacterVoteComparer라는 이름으로 클래스를 만들어줍니다.

IComparer 인터페이스를 상속받아서 Compare 함수를 구현하면 배열을 빠르게 정렬할 수 있습니다.

Comparer를 만든 다음에는 CalculateVoteResult_Coroutine 함수로 돌아가서 System.Array.Sort 함수에 players 배열과 방금 만든 CharacterVoteComparer를 넣어서 플레이어들을 받은 표 순서대로 정렬해줍니다.

그리고 남은 임포스터 수를 구해두고 제일 처음에는 표를 가장 많이 받은 플레이어의 받은 표 수와 스킵 표 수를 비교합니다.

스킵 표 수가 가장 많이 받은 표 수보다 많거나 같다면 플레이어는 추방당하지 않습니다.

그리고 가장 많은 표를 받은 플레이어와 2순위 플레이어가 동률인 경우도 추방이 이루어지지 않습니다.

마지막으로 스킵 표와 2순위 표보다 1순위 표가 많은 경우에는 1순위 플레이어를 추방해야 합니다.

이 CalculateVoteResult_Coroutine 함수는 서버에서 호출될 예정이기 때문에 클라이언트에서 EjectionUI를 열도록 만들어둘 RpcOpenEjectionUI 함수를 만들고 ClientRpc 어트리뷰트를 붙여줍니다.

그리고 여기서는 IngameUIManager를 통해서 EjectionUI에 접근해서 Open 함수를 호출해줍니다.

그 다음에는 CalculateVoteResult_Coroutine 함수로 돌아가서 각 상황에 맞게 RpcOpenEjectionUI 함수를 호출해줍니다.

RpcOpenEjectionUI 함수를 호출한 다음에는 플레이어가 추방당하는 분기에서 추방당한 플레이어를 죽음 처리해줘야 합니다.

Dead 함수를 호출하면 될 것 같은데, 현재 이 Dead 함수는 크루원이 임포스터에게 죽는 것을 전제로만 동작하게 되어 있으니 조금 수정이 필요해보입니다.

Dead 함수로 이동해서 매개변수에 bool 타입의 isEject 매개변수를 추가해주고 시체를 만드는 부분을 if문으로 묶어서 추방으로 죽은게 아닐 때만 동작하도록 만들어줍니다.

그리고 아래의 RpcDead 함수에도 같은 매개변수를 추가하고 KillUI가 isEject가 아닐 때만 호출되도록 수정해줍니다.

그리고 이 Dead 함수를 수정함으로써 발생하는 에러 역시 모두 수정해줍니다.

수정이 모두 끝나면 CalculateVoteResult_Coroutine 함수로 돌아가서 가장 많은 표를 받은 플레이어의 Dead 함수를 호출해주고 사망한 크루원의 시체들을 찾아서 제거해줍니다.

추방 작업이 끝나고나면 플레이어들이 다시 테이블 근처에 원형으로 배치되도록 만들어줘야 합니다.

GameReady 코루틴 함수를 보면 캐릭터들을 원형 테이블 근처에 배치하는 코드가 있을 겁니다.

이 코드를 블럭 선택해서 우클릭하고 [빠른 작업 및 리팩터링] 항목을 선택해서 [메서드 추출]로 새 함수로 만들어 줍니다.

그리고 이 함수를 CalculateVoteResult_Coroutine 함수에서 호출해줍니다.

그 다음에는 클라이언트에서 EjectionUI를 닫게 만들어줄 RpcCloseEjectionUI 함수를 만들고 ClientRpc 어트리뷰트를 붙여준 다음 EjectionUI의 Close 함수를 호출하게 만들어줍니다.

그리고 다시 플레이어의 캐릭터가 움직일 수 있게 myCharacter의 IsMoveable을 true로 바꿔줍니다.

완성된 RpcCloseEjectionUI 함수는 CalculateVoteResult_Coroutine 함수에서 모든 작업이 끝나고 일정 시간이 지나면 호출되게 만들어줍니다.

그리고 CalculateVoteResult_Coroutine 함수를 MeetingProcess_Coroutine 함수의 제일 아래에서 호출해줍니다.

아 마지막으로 MeetingUI가 닫히도록 만들어주기 위해서 MeetingUI 스크립트로 이동해서 Close 함수를 만들어주고 GameSystem의 RpcOpenEjectionUI 함수에서 호출해줍니다.

코드를 모두 작성한 다음에는 저장하고 에디터로 돌아갑니다.

씬 세팅과 테스트

에디터로 돌아온 다음에는 EjectionUI 오브젝트에 방금 생성한 컴포넌트를 부착하고 프로퍼티를 할당해줍니다.

그리고 캔버스에 붙어있는 IngameUIManager에 EjectionUI를 캐싱해줍니다.

작업이 끝난 다음에는 게임을 빌드해줍니다.

빌드가 완료되면 게임을 실행하고 테스트합니다.

테스트 해보면 아무도 추방하지 않은 경우, 임포스터가 아닌 플레이어를 추방했을 경우, 임포스터인 플레이어를 추방했을 경우, 모두 다른 문구가 나오는 것을 볼 수 있습니다.

아웃트로

이번에는 어몽어스 게임에서 투표 후에 플레이어가 추방되는 UI 연출과 그 처리를 해보았습니다.

이 강좌는 시청자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Create 2D & 3D Experiences With Unity's Game Engine | Unity Pro - Unity Store

Unity Pro software is a real-time 3D platform for teams who want to design cross-platform, 2D, 3D, VR, AR & mobile experiences with a full suite of advanced tools.

store.unity.com

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요!

 

베르의 게임 개발 유튜브

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다! 게임 개발에 도움이 되는 강좌들을 올리는 채널입니다! [투네이션 후원] https://toon.at/donate/637735212761460238 [유니티 어필리에이트

www.youtube.com

 

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

이번에는 유니티 2020에서 추가된 Properties 기능에 대해서 알아봅시다.

 

사용 엔진 버전 : 2020.3

 

타임라인

0:00 인트로

0:08 인스펙터에서 여러 개의 오브젝트를 컨테이너에 담기

0:26 1. 일일이 집어넣기

0:43 2. 인스펙터 잠그기

1:13 3. Properties 이용하기

1:45 아웃트로

스크립트

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번에는 유니티 에디터의 Properties 기능에 대해서 알아보겠습니다.

인스펙터에서 여러 개의 오브젝트를 컨테이너에 담기

유니티에서는 에디터의 인스펙터에서 오브젝트를 담을 컨테이너를 이렇게 스크립트에서 리스트나 배열로 만들 수 있습니다.

스크립트에서 만든 리스트나 배열은 에디터에서 이렇게 보여지죠.

그리고 이 컨테이너에 씬 안에 있는 오브젝트를 끌어넣을 수 있습니다.

1. 일일이 집어넣기

그런데 한꺼번에 여러 개의 오브젝트를 넣기 위해서 여러 오브젝트를 선택하면 컴포넌트가 붙어있는 오브젝트의 선택이 풀리면서 인스펙터에서 사라집니다.

그래서 인스펙터를 잠그는 방법을 몰랐을 때는 오브젝트를 하나하나 선택해서 일일이 집어넣을 수 밖에 없었죠.

2. 인스펙터 잠그기

하지만 인스펙터 뷰 우측 상단에 있는 자물쇠 모양 버튼을 클릭하면 인스펙터가 잠기면서 지금 선택한 오브젝트로 인스펙터가 고정됩니다.

그러면 다른 오브젝트를 선택해도 인스펙터가 바뀌지 않고 여러 오브젝트를 한꺼번에 컨테이너에 넣을 수 있게 되죠.

하지만 인스펙터 잠금을 푸는 것을 깜빡하면 다른 오브젝트를 변경하기 위해 선택해도 인스펙터가 변경되지 않아서 헤매게 되는 실수가 발생합니다.

그래서 작업이 끝나면 인스펙터 잠금을 일일이 풀어줘야 한다는 단점도 있습니다.

3. Properties

이 모든 단점을 해결하기 위한 기능이 바로 Properties입니다.

이 기능은 2020 버전에 추가된 기능으로 게임 오브젝트에 우클릭하고 제일 아래의 [Properties...] 항목을 선택하면 Properties 창이 열리며 인스펙터에서 보이는 것과 동일한 내용을 볼 수 있게 됩니다.

여기서는 다른 오브젝트를 선택해도 Properties 창의 내용이 바뀌지 않습니다.

그래서 여러 오브젝트를 선택해서 컨테이너로 한 번에 넣어줄 수 있습니다.

그리고 작업이 끝나면 어떤 잠금을 푼다던가 하는 일에 신경쓰지 않고 그냥 Properties 창을 꺼버리면 됩니다.

아웃트로

이번 영상에서는 유니티 에디터의 Properties 기능에 대해서 알아보았습니다.

이 강좌는 시청자 여러분들의 시청과 후원으로 제작되었습니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Create 2D & 3D Experiences With Unity's Game Engine | Unity Pro - Unity Store

Unity Pro software is a real-time 3D platform for teams who want to design cross-platform, 2D, 3D, VR, AR & mobile experiences with a full suite of advanced tools.

store.unity.com

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요!

 

베르의 게임 개발 유튜브

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다! 게임 개발에 도움이 되는 강좌들을 올리는 채널입니다! [투네이션 후원] https://toon.at/donate/637735212761460238 [유니티 어필리에이트

www.youtube.com

 

안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다!

베르의 게임 개발 유튜브의 디스코드 채널 개설 공지입니다!

 

타임라인

0:00 인트로

0:42 디스코드 채널 소개와 가입 방법

2:33 질문 채널 사용법

3:57 아웃트로

 

[디스코드 채널]

 

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

인트로

안녕하세요. 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번에는 베르의 게임 개발 유튜브의 디스코드 채널이 만들어졌다는 것을 알려드리려고 합니다.

사실 디스코드 채널 생성 공지는 얼마 전에 했던 라이브 스트리밍과 커뮤니티 글을 통해서 드렸었지만, 라이브 스트리밍과 커뮤니티 글은 접근성이 떨어져 못본 분들이 많은 듯해서 이렇게 영상을 만들게 되었습니다.

유튜브 채널을 계속 운영해오면서 강좌에 대한 질문이나 궁금하신 점들을 주로 댓글로 보고 답변을 드렸었는데 아무래도 유튜브 댓글로는 이미지나 영상을 첨부할 수 없어서 자세한 내용 파악이나 답변이 어려운 점이 많았습니다.

그래서 이렇게 이미지나 영상들을 포함해서 질문할 수 있는 사이트들을 여럿 고민하다 디스코드에 채널을 열기로 결정했습니다.

디스코드 채널 가입과 채널 소개

우선 영상 하단에 있는 디스코드 채널 링크를 통해 베르의 게임 개발 채널에 가입하실 수 있습니다.

채널에 가입하고 나면 이렇게 여러 개의 채팅 채널을 보실 수 있습니다.

먼저 공지 채널은 강좌가 업로드되거나 베르의 게임 개발 유튜브 채널에 이벤트가 있을 때 공지가 올라오는 채널입니다.

아직은 별다른 이벤트가 없어서 대부분은 강좌 업로드 공지만 올라오지만 언젠가 이벤트를 열게 되어서 이벤트 공지를 올릴 때가 오면 좋겠네요.

그 다음 일반 채널은 채널에 접속하신 유저들끼리 대화를 나누는 채널입니다.

욕설이나 어그로, 도배 등 나쁜 행동은 삼가해주시고 자유롭게 대화를 나눠주세요.

그 다음 질문 채널은 강좌나 개발에 있어서 궁금하거나 도움이 필요한 부분을 질문으로 올려주시면 되는 채널입니다.

질문 채널을 이용하는 방법은 잠시 후에 좀 더 자세하게 설명하기로 하고 다음 채널 설명으로 넘어가겠습니다.

그 다음 채널은 강의요청 채널입니다.

이 채널에서는 여러분들이 원하는 강좌를 요청해주시면 됩니다.

요청해주신 강좌는 제가 만들 수 있는 강좌라면 저의 강좌 목록에 올라가게 됩니다.

많이 어렵거나 제가 모르는 분야라서 제가 하기 어려운 내용이라면 요청을 받아들이지 않을 수도 있지만 가급적이면 리스트에 올리고 연구를 하는 방식으로 진행하려고 합니다.

그리고 이미 리스트에 있는 주제라면 리스트에서 우선 순위가 올라가게 됩니다.

물론 한 분이 여러 번 요청하는 건 기록해두고 한 계단만 올릴 예정이니 요청을 도배하지는 말아주세요.

그 다음 건의 채널은 유튜브 채널이나 디스코드 채널 운영과 관련하여 이렇게 했으면 좋겠다하는 사항을 제안하는 채널입니다.

마지막으로 프로젝트 자랑 채널은 여러분들이 만들거나 개발 중인 프로젝트를 자랑하기 위한 채널입니다.

자신의 프로젝트를 자랑하거나 다른 사람의 프로젝트를 보면서 칭찬과 격려를 아끼지 말아주세요.

그리고 이 채널에 올려주신 프로젝트는 제 유튜브 영상이나 스트리밍을 통해서 소개될 수 있습니다.

베르의 게임 개발 채널 디스코드는 현재 이렇게 운영되고 있습니다.

질문 채널 사용법

각 채널에 대한 설명을 끝마쳤으니 이제 질문 채널을 사용하는 법에 대해서 자세히 설명해보겠습니다.

먼저 질문을 하실 때는 하려고 하는 질문이 다른 유저가 한 적이 있는지 확인해보시면 좋습니다.

질문 채널의 상단에 #모양으로 된 스레드 버튼을 눌러보면 현재 해결 중인 질문과 이미 해결된 질문들을 볼 수 있습니다.

스레드에서 활성화를 선택해서 나오는 스레드들은 현재 해결 중이거나, 해결된지 얼마 안 된 질문입니다.

그리고 그 옆에 보관됨을 선택하면 해결된지 시간이 꽤 지난 질문들을 볼 수 있습니다.

여기서 궁금한 내용을 검색해서 찾아보고 원하는 해결책이 아니라면 질문을 새로 올려주시면 됩니다.

질문을 올리실 때 버그와 관련된 내용이라면 스크린샷이나 GIF, 영상, 로그 등 해당 문제와 관련된 자료를 첨부하시면 좀 더 원활한 답변이 가능합니다.

그리고 이 질문 채널에서는 저 뿐만 아니라 여러분들도 알고 계시는 내용의 질문에 답변을 함께 달아주시면 모두에게 도움이 됩니다.

질문에 답변을 남기시는 방법은 해당 질문 채팅에 마우스 커서를 올리고 스레드 만들기 버튼을 클릭하면 답변을 남길 스레드를 만들 수 있습니다.

스레드를 만들 때는 스레드의 제목을 정해야 하는데 이 제목은 [작성자의닉네임]을 적고 유니티와 관련된 내용이라면 [유니티], 언리얼4 엔진과 관련된 내용이면 [언리얼4], 그 외의 내용이라면 [기타]처럼 [질문 카테고리]를 적어주고, 본 제목으로 질문 내용을 요약해서 적어주시면 됩니다.

아웃트로

이번 영상에서는 베르의 게임 개발 유튜브의 디스코드 채널 생성 공지를 해드렸습니다.

앞으로 질문을 디스코드 채널을 통해서 해주시느라 영상의 댓글이 줄어들 수 있을 것 같습니다.

그래도 유튜브 영상에 댓글 많이 남겨주세요.

이 채널의 강좌들은 시청자 여러분들의 시청과 후원으로 제작되며 채널의 운영에 큰 도움이 됩니다.

이상 베르의 게임 개발 유튜브였습니다. 감사합니다.

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Create 2D & 3D Experiences With Unity's Game Engine | Unity Pro - Unity Store

Unity Pro software is a real-time 3D platform for teams who want to design cross-platform, 2D, 3D, VR, AR & mobile experiences with a full suite of advanced tools.

store.unity.com

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

 

반응형

+ Recent posts