본문 바로가기
Unity Boot Camp

Udemy STARTERS (유데미 스타터스) Unity 취업 부트캠프 14주차 - Visual Scripting

by 개발하는 디토 2022. 9. 25.

C# scripting을 하지 않고도 노드를 생성해 연결하는 것으로 게임을 만들 수 있는 Visual Scripting에 대해 배웠다.

 

Visual Scripting

특징

  • 실시간 디버깅 가능, 코드의 흐름을 파악하기 좋다는 장점 존재
  • 개발자와 비개발자의 빠른 소통, 빠른 프로토타이핑의 장점 존재
  • 아무래도 Bolt를 다시 Unity 코드로 옮기는 과정이 있기 때문에 로직이 추가된다는 단점 존재
  • 모든 개발을 Visual scripting만으로 작성하는 것은 추천하지 않음

시작하기

  1. 오브젝트에 Add component - Visual Scripting - Script Machine 추가
  2. Script Machine component에서 New 눌러 Asset에 그래프 생성
    또는 Assets 폴더에서 Create - Visual Scripting - Script Graph 선택 후 component에 넣어주기

*** Graph와 Embed 의 차이

Graph로 만들면 그래프 파일이 Assets에 독립적인 파일로 존재해 다른 Script Machine에도 중복으로 넣어줄 수 있음. 또한 Component를 삭제해도 Graph는 남아있음. Embed로 생성 시 Component가 삭제될 때 만든 그래프도 함께 삭제되기 때문에 Graph로 생성하는 것을 추천!

 

 

3. 생성된 Graph에서 필요한 기능 검색해 작성.

 

 

Visual Scripting 실습

x 축으로 자동 이동, 키보드 위아래 키 받아 위아래로 움직이는 게임

준비물

Hierarchy

 

  • Sphere 생성 (Player)
  • 빈 오브젝트 아래에
    • Cube 생성 (Land, Roof)
    • 빈 오브젝트 생성해 Inspector 창의 아이콘을 다른 것으로 바꾼 뒤 Land 큐브의 왼쪽 끝, 오른쪽 끝에 각각 설치. 이름은 StartPoint, EndPoint로 설정.
  • 그림자 지는 게 싫으면 Main Camera Rotation x, y 값 적절히 조절

 

Player 이동을 위한 Visual Scripting

Player 이동 script

Player에 Rigidbody 추가 후 Gravity 해제 / Constraints에서 Freeze Position z 체크 / Freeze Rotation 모두 체크 Player의 Script Machine에서 이동 속도(moveSpd), 위아래 움직이는 속도(floatingSpd) 변수 추가 메인 카메라를 Player 따라가도록 자식으로 설정

Add Node를 통해 각종 기능 노드 생성 가능 (빈 공간 우클릭)

  • Object 내의 변수 생성 후 drag → Visual scripting에 Get Variable 생성
  • Create Vector3 (x,y,z) 통해 x, y, z 값 따로 받아 new Vector3와 같은 명령어 실행할 수 있음
  • Rigidbody drag 후 Set velocity 검색해 velocity 설정하는 노드 추가

 

Land 생성

플레이어 이동에 따라 땅 새로 생성

 

Player 위치 - nextLandPos 의 x 값이 landSpawnDist보다 작으면 새로이 Land 생성

Player 위치는 (x, y, 0) / nextLandPos는 (-15, 0, 0) / landSpawnDist (40)

즉 Player의 위치가 x값 25 되기 전까지 계속 while Loop True

 

SubGraph Get Random Item

List of GameObject를 받아 리스트의 크기를 max (but exclusive), 0을 min으로 내보내는 Random 함수 사용

→ Random함수에서 나온 index 값과 List of GameObject를 List로 받는 Get Item() 함수를 사용해 GameObject를 고름.

→ SubGraph의 output으로 내보냄

StartPoint를 찾아 Get Position으로 위치 값 받음

Next Land Position에서 Start Point 위치를 뺀 뒤 그 위치에 Get Random Item을 통해 선택한 오브젝트를 Instantiate(생성)함. 이때 부모를 지정하지 않으면 Hierarchy 창에 만들어지고 부모를 선택하면 해당 부모 아래에 만들어짐.

이후 EndPoint를 찾아 Get Position으로 위치 값 알아낸 뒤 Set Value로 Next Land Position을 업데이트 해줌.

 

 

Land 삭제

VSmanager의 자식의 개수가 0보다 크면 if 문 true

Get Child를 통해 0번 자식 (자식 중 생성한지 가장 오래된 오브젝트의 transform) 가져옴

player의 위치에서 0번 Child의 위치를 뺀 값의 x 값 구함

구한 x값이 Land Delete Distance보다 크면 0번 Child의 transform의 Game Object를 Destroy함

 

Visual Scripting 사용 후기

C# script에서 간단히 한 줄 적어주면 될 내용을 노드를 몇 개씩 만들고 연결해줘야 하는 엄청난 귀찮음이 존재한다. 각 노드의 input에 적절한 데이터 타입의 노드를 연결해주어야 하므로 어떤 면에서는 코드에 대해 더 잘 이해할 수 있는 기회가 될 것 같지만... 아무래도 이미 C# script에 익숙한 사람은 이것을 굳이 쓰지는 않을 듯하다. 게다가 C# script와의 호환성이 매우 안 좋다. Script Machine이나 State Machine에서 만든 변수는 C# script로 가져올 수 있는 방법이 없다. 방법이 있는지 모르겠지만 아직까지는 못 찾았다. 따라서 C# script와 Visual Scripting을 함께 사용하려면 결국 변수는 C# script에서 만들어 사용해야 한다는 뜻인데... 그러느니 그냥 C# script만 사용하게 되지 않을까? 아니면 간단한 기능만 Visual scripting으로 빨리빨리 만들고 복잡한 기능은 C#으로 따로 관리하는 식으로 만들 수도 있을 듯하다.

 

C# script의 변수, 함수를 Visual Scripting으로 가져오는 방법은 아래 참고

 

Visual Scripting(BOLT)에 C# script 내 함수, 변수 가지고 오기

문제 Visual scripting에 대해 배워서 게임을 만들고 있는데 도저히 못해먹겠어서 C#으로 기본적인 함수를 만들어 놓고 가져와서 쓰려고 했다. 근데 백날 Visual scripting graph에서 함수나 변수명 검색해

psych-dobby.tistory.com

 

 

 

 

후기

이번주는 유니티에 대한 힘을 조금 빼고 알고리즘에도 시간을 투자하며 문제를 풀어보았다. 알고리즘 문제을 풀면 Github 잔디도 심어져서 조금 더 성취욕이 생긴다. 알고리즘 문제에서 자주 쓰이는 string 처리나, 시간 단축을 위한 C#만의 문법을 정리하느라 기초 문제만 풀고 있는데 더 어려운 문제도 풀어봐야 할 것 같고 그렇다. 알고리즘 스터디 하시는 분들을 보니 분발해야겠다는 생각이 들어서 나도 낑겨달라 했다. 

유니티는 여전히 손이 느리다. 내 앞 옆 뒷분들이 혼자 뚝딱뚝딱 게임을 잘 만드시는 걸 보면 부럽기도 하고 열심히 해야지 하는 생각도 든다. 그래도 이번주는 음악, 파티클 시스템까지 들어간 게임을 완성해서 좀더 그럴듯한 게임이 되었으나 비주얼이 구리니까 어쩔 수 없이 별로 멋있어 보이지는 않는다. 난 역시 병맛 게임이 컨셉에 맞는 것 같다.

 

 

 

 

 

유데미코리아 바로가기 : https://bit.ly/3b8JGeD

본 포스팅은 유데미-웅진씽크빅 취업 부트캠프 유니티 1기 과정 후기로 작성되었습니다.

 

새로운 가능성의 시작, 유데미 x 웅진씽크빅

글로벌 최신 IT 기술과 실무 교육을 입문부터 심화까지! 프로그래밍, 인공지능, 데이터, 마케팅, 디자인 등 세계 최고의 강의를 경험하세요.

www.udemykorea.com

 

댓글