개발단에 가입하여 베르의 게임 개발 유튜브를 후원해주세요! https://www.youtube.com/channel/UC9j37A2ACL9ooSbsT4mtGww/join

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

 

사용 엔진 버전 : 2019.4

 

타임라인

0:00 인트로

0:08 오른쪽 전선 배치

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

2:23 기능분리

5:05 아웃트로

 

[투네이션 후원]

https://toon.at/donate/637735212761460238

 

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

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

- 유니티 에셋스토어 : https://assetstore.unity.com/?aid=1100lkbzf

- 유니티 플러스 : https://prf.hn/click/camref:1100lkbzf/creativeref:1011l61476

- 유니티 프로 : https://prf.hn/click/camref:1100lkbzf/creativeref:1101l61542

 

[디스코드 채널]

https://discord.gg/tqmRTy4pgk

 

[예제]

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들을 넣어줍니다.

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

아웃트로

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

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

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

반응형
  1. 숲새 2022.03.06 22:28 신고

    안녕하세요 언리얼 관련해서 가끔식 보는 사람입니다
    저도 블로그를 해보려고 하는데
    코드블럭 스타일이 베르님처럼 언리얼에 맞는 코드블럭이 안보이더라구요
    혹시 어떤방식으로 하셨는지 여쭤봐도 될까요?

    • wergia 2022.03.16 13:02 신고

      저는 예전에 코드블럭 작업을 수동으로 했었습니다.

+ Recent posts