김영호 Profile picture
Sep 9, 2022 316 tweets >60 min read Read on X
명절 특집 언리얼을 배워보자 타래 🧵
예전부터 명절특집으로 안해본걸 해보는 시간을 가졌었다. 간단한 게임을 만들어보거나, 새로운 프로그래밍 언어를 배워보거나 하는 식. 이번에는 언리얼을 해보기로 했다.
간단한 목표는 캐릭터 두 명이 나와서 공격과 방어, 구르기를 할 수 있는 형태까지 만들어보기. 연휴 내에 할 수 있을지 모르겠지만, 하다 안되면 말지 뭐.
가장 먼저, 나는 큰 그림으로 이해하는 것을 선호하는 편. 좋은 방법이 뭐가 있을까.. 고민하다가 나처럼 유니티 경험있는 개발자들이 언리얼을 배우려고 하는 경우가 많을 것 같아서 "unreal for unity devs"라고 검색해보기로 했다.
언리얼 공식 문서가 있네. 읽어 보자
docs.unrealengine.com/4.27/en-US/Bas…
잘만든 비교 샷 Image
아주 인상적으로 정리가 잘 되어있다. Image
유니티는 C# 코드가 에셋의 한 종류인 반면, C++ 코드를 사용하는 언리얼은 에셋(Contents 폴더)와 별도의 Source 폴더에 들어가고 별도로 처리되는 모양이군 Image
유니티의 GameObject는 언리얼의 Actor와 대응되는데 Actor의 특별한 타입으로 Pawn같은게 있단다. 잘 와닿지 않지만 나중에 찾아보기로 하고 계속 읽어본다
언리얼에도 똑같이 컴포넌트가 있고 Actor에 붙이는 것까지 똑같은데, 하나의 Actor 안에 컴포넌트를 계층구조로 설치할 수 있다는 점이 다르다. 유니티처럼 불필요하게 계층 구조로 깔끔하게 기능을 나누기 위해 GameObject를 여러 개 만들 필요가 없겠군 Image
하나의 Actor 안에 복잡한 계층 구조를 가지는 컴포넌트에 대해서는 이 문서를 읽어보자docs.unrealengine.com/4.27/en-US/Bas…
유니티에 Prefab이 있다면 언리얼엔 Blueprint Class가 있다는 군. 언리얼 안써본 사람에게 Blueprint라는 용어는 비주얼 스크립팅 기능만을 의미한다고 알고 있었는데, 이것에 차이도 나중에 찾아봐야겠다
바로 다음에 나오네, 비주얼 스크립팅은 그냥 Blueprint Scripting이라고 하나보다.
대충 코드 얼개는 이렇군 Image
"Your new Actor Blueprint Class can have its own Blueprint Visual Scripting!" 음. 잘 이해가 안가지만 지금까지 읽은 바로는 Prefab 자체에 전용 Visual Script를 설치할 수 있다는 이야기같다. 즉 여러 컴포넌트 간 상호작용 비지니스 로직을 여기서 구현할 수 있다는 이야기인 것 같다.
유니티의 Prefab에 해당하는 Blueprint Class는 상속가능하다고 자랑스럽게 설명하고 있다. 언리얼아조씨, 유니티 Prefab도 Prefab variant가 생긴지 한참 되었답니다.
Blueprint라는 용어가 문서 내에서 혼용되는데, 지금 이해한 바로는 Blueprint == Blueprint Scripting == Blueprint Visual Scripting을 혼용해서 쓰는 느낌이고, Blueprint Class는 Prefab 같은거라고 이해하고 있긴 한데, 막 C++ 코드로부터 상속도 되는거보니 뭔가 코드적인 개념이 포함되나봄 Image
유니티의 Transform에 대응되는 Root Component와 Scene Component에 대한 소개가 나옴. Scene Component의 자식클래스라고 계속 언급하는거보니까 유니티의 Transform처럼 무조건 위치회전스케일을 가지고 있는게 아니라 여러 버전의 자식클래스들이 있을 것 같다는 예상
이 비교 그림은 참 귀하다. Image
오 이제 Pawn을 비롯한 Actor의 서브클래스들의 설명이 나온다. 음 읽어보니 Pawn은 Controller, Player Controller를 통해 플레이어나 AI 등의 외부 입력을 받아 움직이게 되는 개체를 위한 기능, Character는 2족 버전의 Pawn인 것. Image
Super Cool Feature라면서 Gameplay Framework라는걸 소개한다. 음.. 아직 구체적으로 감이 잡히지 않는데 계속 읽어보자.
대략적인 소개는 여기까지고 코드 작성하는 법이 나오기 시작한데. 예제는 Visual Studio를 사용하라는데, 나는 익숙한 VS Code를 쓰고 싶단 말이지. 나중에 VS Code로 쉽게 될지 조금만 찾아보고 아님 그냥 하란대로 해야지
유니티는 MonoBehaviour 코드를 작성해서 Component를 만드는 것 밖에 할 수 없지만 언리얼은 Component를 작성할수도 있고, 기본이 되는 Actor를 상속해서 기능을 구현할 수도 있는데, 이게 굉장히 편리할거라고 강조하시네.
C++을 마지막으로 한게 2015년인데, 어쨋든 Super::라는 문법은 처음 보는 것 같다. 언리얼은 어떤 C++을 쓰는지, 어떤 문법을 참조해야할지 알아봐야겠다. 메모 Image
클래스 이름의 Prefix 의미.
The prefix "A" indicates an Actor sub-class, whereas the prefix "U" indicates an Object sub-class.
"F" is used for most plain data structures or non-UObject classes.
유니티의 Instantiate에 대응되는 함수들. NewObject는 UObject 타입을 생성할 때, SpawnActor는 AActor 타입을 생성할 때.
UObject를 상속하는 타입은 유니티의 ScriptableObject를 상속하는 타입이라고 보면 된다고. Image
Actor는 World에 존재함. SpawnActor는 World의 메서드여서 현재 World에 생성하는 방식. 유니티의 Instantiate처럼 특정 Actor를 완전히 복제하려면 FActorSpawnParamters라는 걸 쓰면 되나보다. Image
캐스팅하는 문법. 그냥 필요할 때 차차 다시 찾아보자 Image
이런 식으로 주요 함수들을 유니티, 언리얼 C++, Blueprint Script 비교해서 보여주는데, 너무 훌륭하다. Image
언리얼은 Primitive Component라는걸 사용하는데 시각요소와 물리시뮬레이션 요소를 하나로 합쳐놨군. 이건 유니티 쪽의 Rigidbody + 시각요소는 니 맘대로 가 더 좋아보이는데, 더 효과적인 측면이 있으려나?
유니티의 Layer에 대응되는 개념으로 Channel이라는게 있다는데, 나중에 읽어볼 것.
unrealengine.com/en-US/blog/col…
그 뒤로는 세세한 물리 구현 방법이나 입력 구현 방법을 유니티와 비교하고 있는데, 이건 그냥 그때 구현에 필요할 때 읽어보면 될 것 같다.
유니티의 기본 길이 단위는 m인데 언리얼은 cm이라고
In UE4, positive X is "forward", positive Y is "right" and positive Z is "up".
다 읽었음 다음 공부해야할 링크를 준다. Image
문서 읽으면서 나중에 찾아볼 것을 적어놨는데, 읽다보니 해결된 것은 이미 체크했음. 일단 다음 단계는 가장 기본적인 튜토리얼을 해보는건데, 그전에 언리얼4와 5 중에 뭘 택해야할까? 사용성이 다를지. 같은 것을 찾아봐야겠다. Image
"unreal 4 vs unreal 5"라고 검색하면 적당한 변경점 차이점을 정리한 문서가 나올 것 같았는데 생각보다 없네. 무슨 "뭐가 더 좋냐"식의 비교만 가득하다
Unreal 4를 써본적은 없지만 Unreal 5 마이그레이션 가이드를 읽어보면 대충 감을 잡을 수 있지 않을까?docs.unrealengine.com/5.0/en-US/unre…
멍멍이가 산책가자고 보채니 나갔다와서 계속...
멍멍이 산책하면서 다시 생각해보게 됐다. 언리얼5와 언리얼4를 비교하는 이유는? 가급적 최신 버전을 쓰고 싶지만, 극명하게 워크플로우가 달라지거나 예제, 교육자료 등의 하위호환성이 안좋다면 당장 인기있는 언리얼4로 배우는게 더 낫지 않을까 하는 것
그렇게 생각하고 나니 가장 먼저 해봐야할 것은 언리얼 사이트에 들어가보는 것이다. 유니티의 최신 LTS 버전처럼 "이거 쓰는 걸 권장합니다"하는 버전이 있다면 그냥 그걸 쓰면 되는 것이다.
언리얼 엔진을 설치하기 위해선 게임할 때 쓰는 에픽게임즈 런처를 깔아야 한다. 깔고 보니까, 일단 5.0.3 외의 버전은 일단 숨겨져 있다. 권장은 5인 것 같으니 일단 5를 깔면서 아까 마이그레이션 가이드 문서를 보기로 했다. Image
내가 당장 할 건 아니니까 그냥 적당히 훑어봤는데 꽤나 큰 변화가 있네. 4로 작성한 예제코드나 튜토리얼을 5로 따라하려면 고생 좀 할 수도 있을 것 같은걸? 5버전 호환되는 튜토리얼은 충분할까?
UE 5.0 이런 식으로 호환여부를 잘 표시해주고 있고, 내 니즈로는 충분할 것 같으니 그냥 5.0을 써도 되겠다.
dev.epicgames.com/community/lear… Image
그냥 궁금하니까 조금만 더 찾아보자. 개발자들의 의견을 보고 싶은데... "site:reddit.com unreal 4 unreal 5 difference" 요렇게 검색해보기로 했다.
"As a newbie should I just jump into Unreal 5 or Unreal 4"라는 글을 찾았음. 9개월 전의 글이긴 하지만 대부분 안정성과 교육자료를 이유로 UE4를 추천하고 있네.
reddit.com/r/unrealengine…
의견들을 자세히 봤는데 뭐, 호환성은 문제가 있지만, "관련된 지식과 워크플로우"에 있어서는 비슷할 것 같다는 확신이 생겼음. 그냥 UE5로 하다가 따라해보고 싶은 튜토리얼이 UE4면 UE4 깔아서 하면 되는 것. 땅땅땅
"Your First Hour in Unreal Engine 5"라는 제목이 눈길을 끌었다 이걸 해보자. Image
튜토리얼은 별도의 파일 없이 영상만 있는 모양. 따라하면서 보고 싶었지만 그냥 먼저 봐야겠다. 엔진 설치를 위해 14.4 GB를 받아야 하는데 엔진 다운로드가 3.4MB/s 밖에 안나오네. 흠...멍멍이 산책가기 전에 미리 설치 걸어놓을껄.
dev.epicgames.com/community/lear…
Unreal Learning Kit이라는 걸 마켓 플레이스에서 검색해서 설치하라고 알려준다. Image
음. 아무래도 따라하면서 해야할 것 같으니 기다리는 동안 다른걸 해보기로 했다. 아까 궁금했던 주제. 언리얼을 VS Code로 작업하면 안될까? 를 찾아보기 위해 "unreal vs code"라고 검색해보자.
언리얼은 VS Code는 신경쓰지 않는다는걸. 소규모로 VS Code 언리얼 플러그인 같은 것들이 보이긴 했지만. 나는 로마에 가면 로마법을 따라야 한다는 주의다. 그냥 가이드 대로 Visual Studio를 깔기로 했다.
생각보다 Visual Studio를 설치할 때 신경써야할게 많으니 이 문서를 꼼꼼히 읽어보고 설치해야할 것 같다.
docs.unrealengine.com/5.0/en-US/sett…
문서에서는 VS 2019가 디폴트라는데 Visual Studio를 다운받으려니 2022가 최신 권장 버전이네. 조금 검색해봤는데 그냥 2019까는게 속 편할 것 같다.
VS는 커뮤니티, 프로페셔널, 엔터프라이즈가 있군 무슨 차이일까?
docs.microsoft.com/en-us/visualst…
"visual studio community vs professional" "is visual studio community enough for unreal" 등으로 검색해서 느낌만 보니까 그냥 커뮤니티 깔면 되겠다.
문서에 나온대로 설정해서 설치하기로 했다.
docs.unrealengine.com/5.0/en-US/sett… Image
VS 설치는 20MB/s 나오는데 말이야... UE는 아까부터 설치했는데 17%인거보니까 좀...막막하구만. 실행해보지 못하고 공부만 하다 오늘 지나가겠다..
따라하지 않고 다시 튜토리얼 영상보는걸 재개해보자
템플릿이라는게 잘 되어있는 모양이다
dev.epicgames.com/community/lear… Image
Viewport. 기본 도구의 단축키까지 비슷하구만 Image
간단한 에디터 기능들을 소개해주는데, 아까 유니티 비교 문서를 한 번 읽고 보니까 Actor, Contents, Map 등 개념이 친숙해서 아주 설명이 쏙쏙 들어오는걸 경험하는 중
오, 프로젝트A의 에셋(과 그것이 의존하는 모든 것)을 프로젝트B의 에셋으로 마이그레이션 시켜주는 기능이라니 신박하다. Image
유니티랑 다르게 Import하거나 끌어 놓은 에셋들이 정확히 1:1로 파일과 대응되는게 아니라 일단 메모리에 스테이징 형태로 있고, 그걸 저장해야 비로소 파일로 만들어지나 보네. 올바로 된 느낌이다. Image
하이 퀄리티 에셋을 사용할 수 있는 Quixel Bridge라는걸 쓴다는데..무슨 개념인지 나중에 자세히 찾아봐야겠다. Image
할수록 튜토리얼 깔끔하고 좋은 것 같다. 벌써 네 번째 영상 "Building Your First Level"
dev.epicgames.com/community/lear…
튜토리얼에서 설명안하고 지나간 것 중에, Level에 이것저것 배치했고, 플레이어 관련된건 아무 것도 없는데 플레이 버튼을 누르면 플레이어 캐릭터가 뿅 하고 생긴다. 뭔가 관련 메카니즘이 있겠지? Image
이런 것까지 미리 만들어져 있네 Image
Player에 해당하는 Blueprint Class를 Tag 같은걸로 구분하나? 나중에 찾아보자. Image
Sky Light는 유니티의 Scene 별 Ambient Light setting에 해당하는 것 같고... Image
음. 그 다음 이어지는 내용은 각종 광원 설정에 관한 내용인데, "Your First Hour in Unreal Engine 5"에 꼭 포함되었어야 했나?라고 생각하면 좀 깊게 들어가는 느낌이네 Image
튜토리얼의 다음 챕터는 Blueprint에 대해서 다룸 Image
Game mode 설정에 대한 설명이 나오는데 아까 "어째서 플레이어 캐릭터가 자동으로 생성되는거지"에 해당하는 설정인 것 같다. Image
World Settings에서 GameMode를 Override 하는군 Image
입력 설정하는 것도 유니티와 크게 다르지 않다. Image
설정한걸 String같은 걸로 참조하지 않고 Blueprint에서 노드로 바로 가져 오는 방식이로군 Image
"Your First Hour In Unreal Engine 5"을 끝까지 봤음. 다음엔 뭘 해야할까?
다른 튜토리얼을 찾아보기 전에 좀 궁금한 것 두 가지에 대한 개념을 확실하게 찾아보고 진행하면 좋을 것 같다. Blueprint Class란 무엇인가? Prefab에 대응되는 것이라 하기엔 1:1로 연결되지 않는 사용례가 많은 것 같다.
그나저나 아직도 20GB를 다 다운받지 못해서 언리얼을 실행도 해보지 못했다. 다운속도가 잘 나오게 하는 방법같은걸 찾아보면 나았을까
Blueprint Class라는 공식 문서 페이지를 열어봤다. 옆에 Related Courses 항목이 보임. Blueprints - Essential Concepts가 딱 내가 원하는 내용이 담겨 있을 것 같군.
docs.unrealengine.com/5.0/en-US/blue… Image
Blueprint라는 컨셉이 아주 혼동된다. 그냥 Visaul Scripting이라고 했다가. Prefab에 대응되는 것이라고도 했다가. 조금 더 보고, 엔진에서 실제로 만져보면 금방 감을 잡겠지 뭐. Image
음, 그러니까 Blueprint를 만들 때 Base Class를 지정하는 구나? 그러니까 기능을 총괄하는 Base Class를 생성할 때 선택해서 하나의 에셋(유니티의 프리팹)으로 만들고 여기에 컴포넌트, 관련 데이터들을 모아서 만드는 방식인가보네 Image
Blueprint Script는 이렇게 만들어진 Blueprint 안에서 Visual Scripting 하는거고
Construction Script는 Blueprint Class의 파라매터, 혹은 유니티의 SerializeField에 해당하는 느낌일 것 같군. Image
Level Blueprint는 레벨 당 하나, 글로벌 용인 것 같고. Component를 붙일 수 없고, 다른 Actor나 Object 같은걸 그래프에서 참조할 방법이 있겠지. Image
Animation Blueprint는 유니티의 Animator Controller 같은 역할을 하는 무언가인 것 같은데, 나중에 관련 내용을 자세히 공부해야할 듯 하다. Image
C++코드로 Blueprint를 대신한다는 건 결국, 커스텀 Actor나 커스텀 Component를 만들어서복잡한 기능을 구현하라는 얘기겠지? Blueprint Class라는 클래스를 C++ 소스코드로 직접 작성하는 방법은 없을 것 같다, 에디터에서 다루는 데이터와 컴포넌트없이는 Blueprint Class는 의미 없는거니까. Image
음.. 특정 토픽을 자꾸 파고는 것 같지만 궁금해서 못참겠으니 튜토리얼 하나만 더 보자. "Balancing Blueprint and C++ in Game Development"
dev.epicgames.com/community/lear…
영상에서 문서를 소개해준다. 그냥 개념만 훑고 싶으니 영상은 멈추고 문서를 훑어서 읽어보기로
docs.unrealengine.com/4.27/en-US/Res…
"Generally, the first step is to create a set of "Base" C++ classes that your Blueprint classes will inherit from. Once you have created the base native classes for your game, you will need to reparent any prototype Blueprints to your new native classes.
Once you have done this, you can start moving variables and functions from your Blueprint classes into native C++." 역시 예상한 방식이 맞았다. 이제 Blueprint와 관련해선 어떤 느낌인지 확실히 감 잡은듯.
아직도 설치는 99%다. 오늘 켜보고 뭐 하다가 막히만 애매하니까 내일 새로 설치된걸 돌려보는걸로 작업을 시작하면 재밌게 할 수 있을 것 같다.
첫째 날 정리
(1) 언리얼을 공부하기로 마음먹었다면 지금 바로 설치부터 시작하세요.
(2) 유니티를 해봤다면 "Unreal Engine 4 For Unity Developers" 문서를 읽어보면 엄청 효과적으로 학습할 수 있을 것 같습니다.
(3) Blueprint는 유니티의 Prefab같은 역할을 하면서 동시에 그 자체로도 C++의 부모 클래스를 지정하여 도메인 로직을 포함할 수 있고, 그 안에 Visual Scripting같은 기능까지 코드없이 만들 수 있게 해주는 괴물입니다.
오늘의 명절 퀘스트 클리어. 일단은 어제 설치한 언리얼5를 처음으로 실행해보고, 봤던 튜토리얼을 복습하면서 직접 이것저것 만져보기
다짜고짜 실행을 눌러봤지만 아무 일도 일어나지 않는다. Image
뭘 해야하나, 뭘 잘못했나 한참 방황하고 있었는데 뭔가 권한 요청이 뜬다. 진짜 헤비한가보군...
음. 내 노트북으로는 본능적으로 Quality Preset을 Maximum으로 하면 안될 것 같아서 Scalable로 놓고 만들어보기로 했다. Image
드라이버 버전 업데이트를 게을리 해서 이런 경고가 뜬다. 일단은 그냥 하고 저녁 먹으러 갈 때 드라이버 업데이트를 돌리는걸로. Image
으, 나는 주로 마우스 휠버튼 드래그로 패닝을 하는데(유니티, 블렌더 공통) 휠버튼 드래그가 얘네랑 좀 다르게 동작하는 바람에 약간 고통이다. Image
일단 실행은 잘된다. 프레임도 부드럽고 Image
일단 여기에 무슨 파일이 있나 들여다보기로 했다. ImageImage
일단 쭉 둘러본 바로는 컨텐츠(유니티의 에셋)의 구성은 유니티의 그것과 흡사하다. 각각의 것을 잘 이해하려면 공부할게 많아 보이긴 하지만.
일단 지금 하고 싶은건 (1) 어제의 의문이었던 어떻게 플레이어 캐릭터가 자동생성되는지에 대한 이해. GameMode라는게 어떤 원리로 동작하는지. (2) 플레이어 캐릭터의 동작 원리를 이해하기. 카메라, Player Controller 등, 얘네가 플레이어 캐릭터를 구성하는 Actor와 어떻게 연관되는지 이해하기
하지만 강아지 목욕과 저녁식사에 징집되었으니 이따가 계속...
어제 열이 심하게 나서 그냥 접고 잤는데 코로나였다...
적당한 튜토리얼이 있으면 좋을 것 같고, 아니면 그냥 메뉴얼같은 문서를 찾아봐도 좋을 것 같은데, 적당한 튜토리얼이 있을지 찾아보자
"Your First Game In Unreal Engine 5" -> "Practical in-editor demo making a game from scratch highlighting UE5 features."라고 되어있다. 이건 1시간 20분 쯤 되는 튜토리얼인데 음.. 일단 틀어보자 Image
Blank 프로젝트에 Empty Level을 만들어서 시작하는걸 보니 처음부터 제대로 가르쳐 줄 생각인가보군.
Light Mixer라는 걸 이용해서 Lighting과 관련된 것들을 쉽게 추가할 수 있나보다. ImageImage
Material을 수정하는걸 보여주는데, 나중에 필요할 때 공부하면 될테니 이 부분은 넘기면서 보기로 했다. Image
유니티의 Terrain에 해당하는게 Landscape인가보다. Image
GameMode와 Gameplay Framework가 동의어인 것 같기도 하고, GameMode와 관련된걸 차근차근 만들고 있다. Image
GameModeBase라는 걸 상속하는 Blueprint를 만들고 여기에 PlayerController 등을 어떤걸 쓸지 연결해주는 방식이구나 Image
카메라를 플레이어 캐릭터 자체에 직접 설치하네. 이게 언리얼에서 일반적인 방법인지는 나중에 다시 찾아봐야겠다. Image
PlayerController 안에서 이런식으로 캐릭터 이동을 구현한다고 한다. Image
Animation Blueprint에 대한 설명도 좀 나온다. 이것도 조만간 공부해야겠지만 지금은 그냥 느낌만 보면서 빠르게 넘기기로 했다. Image
그 뒤로 사운드나 이펙트같은 것들도 간단히 사용법을 소개하고 있는데, 일단은 넘기기로 했고, 다 봤음. 이 강좌는 진짜 게임 개발 전체 프로세스를 모두 다루고 있어서 나중에도 참고하기 좋겠다.
어제 만든 템플릿 프로젝트를 다시 열어서 GameMode Blueprint같은거나, 그런게 어떻게 되어있는지 구경해보자.
어제 만든 프로젝트는 ThirdPerson 템플릿으로 만든 프로젝트고, 여기 보니 관련 Blueprint를 명시하고 있다. 이것들을 열어보기로 한다. Image
BP_ThirdPersonGameMode를 열어봤는데, Default Pawn Class를 지정한 것 말고는 딱히 특별한건 없다. Image
역시 여기 템플릿에서는 입력 처리 부분이 캐릭터 안에 구현 되어있군 Image
이것저것 눌러보고 했더니 조금은 감을 잡을 것 같다. 이제는 튜토리얼보다 궁금한 내용을 문서에서 찾아보는 식으로 해도 충분할 듯?
일단 가장 궁금했던 Gameplay Framework 문서를 읽는다
docs.unrealengine.com/4.27/en-US/Int…
읽다보니 Gameplay Framework Quick Reference라는걸 읽어보래서 이것 먼저 읽는다 docs.unrealengine.com/4.27/en-US/Int…
잘 정리된 또다른 그림 발견 Image
음 문서를 읽다보니.. 아직도 Controller의 책임을 정확히 이해하지 못하고 있는 것 같아서 이쪽 문서를 잘 읽어보기로 했다.
APawn 클래스 레퍼런스에서 AddMovementInput이란걸 찾았음. 결론적으로 이야기하면 PlayerController에서 입력처리 후 Pawn의 AddMovementInput을 부르는게 의도된 동작인 느낌이고, 간단하게 만들거면 그냥 입력처리를 Pawn(플레이어 캐릭터) 자체에서 해도 되는거고.
docs.unrealengine.com/5.0/en-US/API/… Image
그럼 Pawn에 입력 값만 넣어주면 자동으로 이동하는건 어떤 원리인거지? Character에 입력에 따라 어떻게 이동하는지에 대한 로직이 모두 구현되어있고, 파라매터로 설정만해주면 되는건가?
CharacterMovement라는 컴포넌트가 이 역할을 하는 것 같다. Image
ACharacter 자체가 "인간형 Pawn"에 특화된 클래스이기 때문에 인간형 캐릭터의 움직임 자체에 특화된 기능들이 싹다 구현되어 있음. 문서는 Root Motion이나 멀티 플레이 시 동작 등 심화주제에 대한 설명이 많으니 꼼꼼히 읽지 않고 넘기자
그렇다면 Character가 아니라 Pawn은 이동 로직을 어떻게 구현하고 있을까?
딱히 만들어진 건 없는 것 같다. Pawn을 부모클래스로 하는 Blueprint Class를 만들고, 매 프레임 AddForce를 불러서 공이 굴러가도록 만들어 보기로 했다. Image
BP_Ball.Sphere Sphere has to have 'Simulate Physics' enabled if you'd like to AddForce. 이런 에러가 뜬다. 옵션을 지정해줘야 하나보군 Image
체크하고 다시 시도해봤지만 공이 안굴러간다. 힘이 너무 약한가? Image
힘을 1에서 100으로 늘려도 안굴러간다. 뭔가 잘못된 것 같다. 지금 다시 생각해보면, Sphere는 BP_Ball의 하위 컴포넌트일 뿐이라, Pawn 자체를 움직이지 않기 때문인 것 같기도 하고. 공 굴리기를 만들려면 어떻게 하는게 좋을지 찾아보는 것도 하나의 방법이겠다.
이리저리 보다가 Mobility라는 항목이 보이네. 이게 관련있을 것 같다. Image
요런걸 설정해줘야 하는구나.
docs.unrealengine.com/4.27/en-US/Bas… Image
DefaultSceneRoot를 Sphere로 대체하면 될 것 같다는 느낌이 들었다. Image
이렇게 했는데 이래도 안된다. 어쨋든 이렇게 되어있어야 하는건 맞는 것 같긴 해 ImageImage
뭔가 길을 잃은 느낌인데.. Pawn 문서를 읽어보자.
docs.unrealengine.com/4.27/en-US/Int…
별거 없었고, 그러던 차에 Rolling이라는 템플릿이 있대서 이걸 까보고 싶었는데... 언리얼5에는 이 템플릿이 없다... Image
이래서 Unreal4를 깔아야 했나...일단 내가 알고 싶은건 Character가 아닌 Pawn의 이동로직을 구현하기 위해 어떤 설정이 필요한지..이니까, Vehicle 템플릿으로 프로젝트를 만들어 보기로 했다. Image
그리고 뭐 밑져야 본전이니까 UE4도 깔기로 했다.
오... 왜 빠르지? Image
Vehicle Template 프로젝트 생성이 완료되었고 일단 플레이해보자. Image
이렇게 템플릿만 돌리면 고퀄로 만들어준다니... 언리얼 멋지다... Image
SportsCar_Pawn을 뜯어보자 Image
예상은 했지만 Parent Class가 그냥 Pawn이나 DefaultPawn이 아니네 Image
그리고 CharacterMovementComponent처럼 VehicleMovementComponent가 있고 Image
그와중에 UE4 설치가 완료되었으니, Rolling Template을 뜯어보자 Image
역시 기대했던 대로 Pawn을 Parent Class로 받는다. 이제 내가 만든거랑 템플릿의 구현이랑 비교해보면 뭐가 잘못됐는지 알 수 있겠지? Image
얼핏봐선 뚜렷한 차이를 모르겠는걸...
이리저리 실험하면서 공을 움직이는데 성공하긴 했다. 두 가지 문제가 있었음.
"Mobility: No root component, unknown mobility"라고 뜨는게 누가 봐도 뭔가 잘못되서 공이 안움직이는 것 같아서 저 문자 그대로 검색해봐도 아무것도 안나와서 좀 난감했음. Image
근데 정확히 똑같이 Pawn을 상속받는 Blueprint Class를 UE4에서 만들었더니 여기엔 Movable로 떠서, 여기서 똑같은 로직으로 공이 움직이게 만들어봤는데, 여기서도 여전히 안 움직이는 것이었다. Image
어쨌든 저 "Mobility: No root component, unknown mobility"는 검색해도 아무런 정보도 나오지 않는데다, 일단 그냥 무시하기로 함.
그러다가 여기 Accel Change를 체크하니까 공이 움직이기 시작하는 것이었다.. UE5에서도 똑같이... Image
Force 부분에 1, 10, 100, 1000까지 넣어봐도 공이 꿈쩍도 안하길래 뭔가 Pawn에서 셋팅해줄걸 안해서 생긴 문젠줄 알았는데, 이제 Accel Change라는걸로 움직인다는걸 알고나서 10000까지 넣어보니 이제야 움직이기 시작하더라 Image
결론은 물리 단위를 꼼꼼히 살피지 않은 탓과 UE5에서 뭔가 오해할만한 에러 메시지 덕분에 좀 헤맸던 것.. 전체적인 맥락은 전부 이해한 것 같다.
빈 프로젝트를 만든 다음, 공을 컨트롤 해서 보너스 아이템 같은걸 먹는 것까지 직접 만들어보기로 했다.
Maps라는 폴더를 만들고 Level을 하나 만든다 Image
Directional Light 추가 Image
벽이랑 바닥을 추가해서 대충 스테이지를 만들었다 Image
Player Start를 추가하고 Image
GameMode, PlayerController, Pawn 세 가지의 Blueprint Class를 만들어준다. Image
BP_GameMode에서 방금 생성한 BP_PlayerController, BP_Ball을 설정해주고 Image
Project Settings에 가서 BP_GameMode를 Default GameMode로 설정해준다. Image
BP_Ball에 일단 Sphere를 넣고, 플레이했을 때 Player Start 지점에 공이 잘 생성되는지 확인해보자 Image
생성되지 않네. 왜지? Image
런타임에 보니까 여전히 DefaultPawn을 생성하고 있다 Image
아까 설정이 원래대로 되돌아가있었네.
BP_Ball이 생성된 것은 확인했지만, 카메라가 없어서 공을 제대로 확인할 수 없었다.
카메라 설정하는건 좀 복잡할 것 같으니 아까 Rolling Template의 것을 그대로 따라해보자.
Rolling Template의 공에는 SprintArm이라는 컴포넌트를 설치하고 그 하위에 카메라를 설치한 형대로 되어있다. Image
Viewport에선 이렇게 보임 Image
Spring Arm의 설정값들을 보면서 그대로 따라하기로 했다. 파라매터 이름만 보면 대체로 뭘하는지 이해할 수 있어서 어려움은 없었음.
Camera도 마찬가지. 별로 수정할게 없네. 이제 돌려보자.
공이 떠 있다. Simulate Physics인가 그걸 켜면 중력을 받을 것 같은데? Image
역시 예상대로 잘 됐다. Image
이제 입력처리를 만들 차례. 여러 가지 예제와 문서를 종합해보면 입력 값을 읽어서 Add Movement Input같은 걸 이용해 Pawn에 넘겨주는 것까지는 PlayerController의 책임이고 Pawn은 Consume Movement Input 이라는 함수를 이용해서 입력에 따른 움직임을 구현해주는 것이 Best Practices인 것 같다.
먼저 Axis Mappings를 설정해줬다. Image
Add Movement Input은 PlayerController 내부에서는 검색이 안되네 Image
Context Sensitive를 푸니까 찾을 수 있었다. Image
약간 긴가민가한데, "Your First Game In Unreal Engine 5"에서 PlayerController에 입력 처리를 구현했었던 것 같으니 이 튜토리얼을 다시 뒤져보자
내가 찾고 싶었던건 GetControlledPawn이었다. Image
음 두 개의 입력 값을 X, Y 값이 있는 Vector로 조립한 다음에 입력 값으로 넘겨줘야겠는데.. Image
"unreal blueprint make vector from floats" 이렇게 검색했는데, 운좋게도 언리얼의 API 이름이 Make Vector였다. 이렇게 해서 PlayerController의 결과물은 이렇게 됐다. 잘 될지는 BP_Ball까지 구현해봐야 알겠지만 Image
BP_Ball을 구현하려고 Consume Movement Input Vector를 사용하려고 보니까 Movement Update 중에만 사용되어야 한다고 한다. "Movement Update 중"이라는게 무슨 의미일까? Image
"movement update" unreal로 검색해봐도 딱히 뭐가 나오지 않는걸 보니, 시스템적으로 있는 개념이 아니라 그냥 이동업데이트할 때마다 한 번씩 불러야 한다, 에 가까운 걸로 이해하고 넘어가기로 함.
이동 입력에 적당한 숫자를 곱해서 힘을 가하는 쪽으로 하려고 곱하는 Blueprint Node를 찾아봤고, 이게 나왔는데 UE5 에디터 상에는 이 노드를 찾을 수 없네... Image
좀 검색해보니 저 함수는 UE5에서 없애버린 듯? 대신 Multiply라는 함수를 찾아서 이걸 사용하기로 했다. Image
하하, 공은 안움직이고 카메라가 이상하게 회전하네.
정황상 카메라가 공이 회전하는 것에 따라 함께 회전하기 때문에 발생한 문제라고 판단했고, Inherit Yaw 등을 모두 껐다 Image
이제 원하는대로 공이 움직이는 것 까지 완료.
한 가지 궁금한 것은, UE4의 Rolling Template에서는 Inherit Yaw 등이 그대로 True인 상태인데 왜 카메라가 공에 따라 회전하지 않을까 하는 것이다
한참 찾다 알았다. Rotation에 Absolute Rotation을 설정할 수 있구나! Image
이런식으로 설정하면 된다. Image
둘째 날 정리. GameMode, PlayerController, Pawn으로 연결되는 기본적인 구조를 이해하고 나니, 게임의 얼개를 어떻게 만들어야 할지 조금은 감이 잡혔다. 감이 잡히고 나서는 각종 템플릿을 뜯어보면서 내가 이해한게 맞는지 확인해보는게 학습에 효과적이었던 것 같다.
"Your First Game In Unreal Engine 5"는 개발 전반을 한 번에 보여주기 때문에 나중에도 언제든 다시 열어보기 좋을 것 같고. 공부하긴 UE4가 더 좋은 것 같다. 끝
코로나 때문에 추석은 다 지나가버렸지만, 코로나 덕분에 일정이 다 캔슬되는 바람에 이 기회에 오히려 느긋하게 언리얼 원하는 만큼 파볼 수 있겠다. 어차피 제 페이스대로 했어도 처음 목표했던 건 애초에 무리였던 것 같기도 하고....
"공격, 방어, 구르기로 두 캐릭터가 싸우는 게임"을 만들기 위해 알아야할 건, (1) AIController는 어떻게 만들고 어떻게 설정하는가. (2) Animation Blueprint 는 어떻게 만들고 어떻게 설정하는가. (3) 충돌 처리, 피격 검출, 크게 이 세 가지일 것 같다.
전에도 언급했다시피 이 내용은 모두 "Your First Game In Unreal Engine 5"에 소개되었던 내용이지만, 당장 필요하지 않아 넘겨 가면서 봤었지. 이 영상을 다시 보면서 하나씩 이해해보자.
dev.epicgames.com/community/lear…
AI Controller는 52:29부터 Image
AIController를 상속받는 Blueprint Class를 만들고 여기에서 AI Move To라는 노드를 사용하는군. Custom Event라는 기능이 유용해보이네? 메모. Image
Pawn 설정값 중에 AI Controller Class를 설정하는 부분을 지나가면서 항상 봤었는데, 역시 여기다 설정하는 것이로군. 그러면 디폴트 AIController는 아무 동작없는 안하는 껍데기려나? 나중에 찾아보기로 Image
그 다음 NavMeshData를 설정해야한다. Image
AI와는 별개지만 Construction Script를 사용해서 AI로 컨트롤되는 Bot의 색깔을 다르게 하는 예제도 보여줌. Construction Script도 나중에 찾아봐야겠다. 메모. Image
일단 AI 부분은 다 봤으니 궁금한 부분을 살짝 해결한 뒤, 내 Ball 게임에 AI를 한 번 만들어보기로.
일단 검색을 해봤는데, 언리얼 공식문서와 레퍼런스가 유니티보다 좀 많이 부실한 것 같은 느낌. 내가 초심자라 잘 못찾는걸 수 도 있지만.. 그냥 몇몇 커뮤니티에서, "GameMode가 처음 PlayerController를 만들고 플레이어에 해당하는 Pawn을 만들어 할당함.
PlayerController에 할당되지 않은 Pawn들은 자동으로 AI Controller Class에 명시된 Controller로 연결된다.." 뭐 이렇게 설명하는 경우는 있지만 공식문서나 이런데서 이를 설명하는 경우는 찾기 힘들었다.
이 시점에서 더 이상 궁금해하지 않는게 합리적인 것 같긴 한데.. 언리얼은 소스코드 포함이니까 살짝만 열어서 느낌 보고 닫아보자.
일단 소스코드 어딨지? 일단 Pawn 클래스를 찾아야하는데, 소스코드 레퍼런스를 찾으려면 먼 옛날 설명에서처럼 접두어 "A"를 붙여서 검색해야 함. "APawn ue5"라고 하면 바로 레퍼런스 페이지가 나온다. 그리고 이 페이지에 파일 경로가 표시되어있다.
docs.unrealengine.com/5.0/en-US/API/… Image
저 경로를 열어봤지만 헤더 밖에 없는 폴더다. 음 느낌적인 느낌으로 경로의 Runtime 부분 대신 Developer로 가면 소스코드가 있을 것 같은데... Image
아니네, 이렇게 되면 Pawn.cpp로 검색!
나왔다. Engine/Source/Runtime/Engine/Private 안에 있었음.
찾아본게 맞았음. PostInitializeComponents라는 Actor의 가상함수를 Pawn이 구현하고 있었는데, 여기서 SpawnDefaultController를 부르고, 이 함수는 이전에 Controller가 할당되어있지 않으면, 즉 PlayerController가 Possess하지 않은 경우 이 Pawn 맞는 AIController를 만들어서 할당하는 방식. Image
파일 단위로 궁금한걸 열면서 읽다보니 좀 불편했는데, 나중에 본격적으로 엔진코드를 많이 읽어봐야할 것 같은 느낌이 들고, 아마도 어렵지 않게 프로젝트 단위로 열어서 참조 점프도 하고 할 수 있겠지.
그럼 이제 AI Ball이 내 공을 쫓아오게 만들어 봐야지
AIController를 상속받는 Blueprint Class를 하나 만들고 Image
예제랑 정확히 똑같게 만들고 돌려보기로 했다. Image
0, 0으로 가질 않는데? 아, NavMeshData 설정을 안했지.
NavMeshBoundsVolume을 추가 Image
"P"키를 누르면 Navmesh 영역을 Viewport에 시각화할지 말지를 토글할 수 있다 Image
일단 잘 설치된 것 같은데, AI 친구는 여전히 움직이질 않는다. Image
내 예상대로라면, "AI Move To"도 결국 Movement Input을 Pawn으로 만들어줄거고, 그러면 기존 BP_Ball의 로직에 따라 지정된 방향으로 가야할 것 같은데 말이지...
일단 궁금한건 입력이 전달되고 있느냐?의 문제. BP_Ball에서 입력값을 사용하기 전에 출력하도록 주먹구구로 아래와 같이 만들어봤는데 역시나 0,0,0 만 찍히더라. Image
대안으로 이렇게 찍어봤는데 계속 Fail만 찍힌다. Image
이리저리 검색해보는데 좀 막힌 느낌이긴 한데... 공 자체가 장애물처럼 인식되는게 문제인가? 흠 Mesh Component에 무슨 설정이 있나 확인해볼 필요가 있겠다. Image
"ue5 ai move to fails"로 검색해서 나오는 것들 이것저것 다 해봤지만 소용없네. 좀 곤란한걸... 여기서 보통 나갈 방향은 (1) 디버깅용 로그나 왜 실패나는지 알려줄만한게 있는지 찾아보기 (2) "AI Move to"와 NavMeshBoundsVolume 등 각 개념을 깊게 이해한다음 잘못한 걸 스스로 찾아내기
(3) 다른 셋팅으로 (가령 Thrid-Person 템플릿 프로젝트나 UE4에서 만든다거나) 똑같이 구현한다음 되는 보는 것
가장 빨리할 수 있는 (3)안을 해봤는데 역시 똑같이 Fail나면서 안된다. Image
이쯤되면 내가 튜토리얼 영상에서 뭔가 놓친게 있는 것 같다는 생각이 든다. 영상을 다시 꼼꼼히 다시 봐봐야겠다.
빼먹은 건 없었다... 그러던 중 Destination 좌표를 잘 바꿔봤는데....와.. 된다....
공가지고 트러블 슈팅하면서도 Destination 좌표를 이리저리 바꿔봤는데 안됐던 이유는, 좌표 입력에 있어서 유니티 때의 습관이 남아있어서, (5, 10, 0) 막 이런식으로 지정했었음. 언리얼은 cm단위기 때문에 (500, 1000, 0) 이렇게 입력해서 입력한 좌표가 빈공간이었으면 공도 됐을수도?
그래도 안되는군, 그렇다면 NavMesh를 Ball 자체가 파먹기 때문일텐데, NavMesh 구워질 대상으로 만들지 않으려면 어떤 옵션을 조절해야할까?
이거 찾다가 다른 쪽으로 촉이 와서 좀 검색하다가 발견한 페이지. "AI MoveTo"는 "CharacterMovementComponent"가 있는 것을 가정하고 그에 한해서만 동작하게 만들어져 있다고...
forums.unrealengine.com/t/use-ai-move-…
정말 문서에 별 설명도 없이 "for Pawn"이라고 해놓고 이래도 되는거냐고... "for Character" 혹은 "for Pawn with CharacterMovementComponent"이렇게는 써줘야지 최소한... 이게 바로 월컴투 언리얼인가? Image
본격적으로 애니메이션 공부하기 전에 공 두 개 만들어서 AI가 플레이어 따라다니는 것까지 해보려 했지만, 김이 팍 새버렸고... 공 프로젝트는 여기서 접고 내일은 애니메이션 블루프린트 공부좀 해봐야겠다.
오늘의 총평은, 언리얼 소스코드 통째로 주는건 참 좋지만, 문서가 좀 너무 뭐가 없어서 당황스러웠고 엉뚱하게 많이 헤맸다. 나는 동작원리를 큰 그림에서라도 이해하고 넘어가는 것을 선호하는데, 언리얼에서는 소스코드를 다 읽을 생각이 아니라면 많이 내려놔야 할 듯... 하다.
어제 여러가지 부족한 정보 때문에 많이 헤맸던 경험 덕분에 접근 방향을 좀 바꾸기로 했다. 목표한 게임 만들기 위한 지식을 체리픽해서 공부하기보다 일단 공식문서 전체를 쭉 훑어보면서 공식 문서에서 어떤 것들을 기대할 수 있는지 감 잡는 일을 먼저 해야 더 빨리 갈 수 있을 것 같다.
방법은 그냥 문서 페이지 열고 처음부터 끝까지 읽어보는 것. 엔진이 전체적으로 무슨 기능을 갖고 있는지 파악하기도 좋고, 문서가 어떤 형태로 작성되어있는지 전체적인 감을 잡기도 좋다. 이건 유니티 공부할 때도 했었는데 참 도움이 많이 됐었다고 생각한다.
docs.unrealengine.com/5.0/en-US/
Unreal Engine Terminology, 각 개념들이 정리된 페이지인데 얼핏봐도 엄청 친절하게 잘 설명해주고 있네.
docs.unrealengine.com/5.0/en-US/unre…
Content Browser 동시에 여러 개 띄울 수 있군.. Image
디폴트 레벨 설정은 여기서 Image
Actors Reference, 이 문서도 좋다. Actor 종류를 잘 정리해서 설명하고 있음
docs.unrealengine.com/5.0/en-US/unre…
점점 디테일에 디테일한 내용들이 많아서, 아, 이런것들이 여기 정리되어있구나... 정도로 느낌만 가져가면서 띄엄띄엄 훑어 보는 중.
어느정도 뭐가 있는 지 다 훑어 본 후의 소감은, 어제 부족하다고 느꼈던 레퍼런스 문서에 비해, 차근차근 개념 빌드업부터 해주는 "가이드" 문서는 엄청 잘 되어있다. 언리얼에 포함된 기능들은 엄청 방대하고, 그만큼 공부해야할 것도 많다는 뜻.
그리고 다시 생각해보니 언리얼을 써본 주변 사람들이 "언리얼은 언리얼이 상정한 게임류(FPS, TPS, etc)를 만들려고 하면 진짜 쉬운데, 그것을 벗어나려면 좀 힘들어요"라고 이야기했던게 생각나는데,
언리얼은 게임을 만들다보면 필연적으로 상호 의존되는 기능들을 그냥 싹다 포함해서 한 번에 제대로 구현해버린 느낌. 이거에 맞게 쓰면 생산성이 어마어마하지만, 특정 기능만 똑 떼거나, 수정하기도 힘들고. 내가 어제 겪은 레퍼런스가 부실하다고 느꼈던 것도
특정 기능만 똑떼서 레퍼런스로 설명하기엔 의존성이 너무 많이 얽혀서 그랬겠구나 싶기도 하다. 그러다보니 레퍼런스보다 가이드 문서에 힘을 준 것 같기도 하고.
유니티와 비교로 부연설명을 좀 더 하자면, 유니티에서 캐릭터를 이동시키는 방법은 지금 떠오르는 것만 4가지다. (1) Transfrom 수정 (2) Rigidbody (3) Root Motion (4) NavMeshAgent. 그리고 게임을 만들다보면 이것들을 섞어 써야 하는데, 정말 난감한 상황이 많이 생김...
언리얼은 좀 더 봐야겠지만.. 지금까지의 내 인상으로는 엔진에서 하란대로만 하면 저런거 다 통합되어있어요.. 같은 느낌일 것 같다.
"Gameplay Tutorials" 이 문서 하위 문서들이 아주 스탭바이스탭으로 따라할 수 있도록 잘 정리되어 있다.
docs.unrealengine.com/5.0/en-US/game… Image
이것저것 읽어볼게 너무 많은 것 같지만 일단은 애니메이션 관련 기능에 집중해보자. 일단 지난번 튜토리얼 영상의 애니메이션 부분부터 다시 본다. 43분 5초부터.
dev.epicgames.com/community/lear…
Character Movement Component (CharMoveComp)에 이것저것 설정할 수 있는 것들이 많다. Image
애니메이션 Import할 때 Skeleton을 설정하면, 애니메이션만 import함. Importing 과정에서 Retargeting같은건 자동으로 해주는건가? 이런걸 좀 더 찾아봐야 할 듯. Image
Animation Blueprint 안에 State Machine을 만들고 Image
대체로 상태머신, 트랜지션, BlendSpace 이런 것들 유니티와 모두 비슷하다. 이 중에 Analysis라는 기능으로 알아서 분석해서 적절하게 블렌딩해주는 기능이 있나 본데 나중에 더 알아봐야겠다. Image
문서를 차근차근 읽어보려다가 Learning Path라는, 공부해야할 것을 순서대로 제시해주는 컨텐츠를 발견. 여기 가이드 대로 Stack-O-Bot Start Kit을 일단 깔아놔야겠다.
dev.epicgames.com/community/lear… Image
요새 계속 코로나 때문에 먹은 약 기운 때문(아니면 그냥 태생적인 게으름인가)에 작업을 오래 하지 못하고 찔끔찔끔하고 계속 누워있는 일이 많았다.
어제는 그나마 누워서 아이패드로 언리얼 문서를 계속 뒤적이며 봤음. 애니메이션 관련 내용과 블루프린트 관련 내용을 봤는데 꼼꼼한 가이드 문서가 좋았다.
docs.unrealengine.com/5.0/en-US/blue… Image
일단 예전에 Custom Event라는 것이 궁금했기도 하고 해서 "Blueprint Communication Usage"를 읽어보자.
docs.unrealengine.com/5.0/en-US/blue…
오 다른 것보다 Blueprint Interfaces라는 것도 있군 Image
이전에 궁금했던 Custom Event에 관해서도 좀 읽어보자
docs.unrealengine.com/4.27/en-US/Pro…
그동안 CustomEvent는 저 빨간 네모 박스에 연결해서 사용하는것만 봤는데, 직접 Event가 트리거 되게 하는 Blueprint Node가 따로 있었군 Image
얼핏 문서를 읽어봤을 땐 Event Dispatcher와 Custom Event의 기능이 겹치는 것 같은데 무슨 차이지? "Event Dispatcher vs custom event" 이렇게 검색했더니 아니나 다를까 다음과 같은 문서가 나왔다.
forums.unrealengine.com/t/what-is-the-…
답변은 결국 Event Dispatcher가 뭔가 쓰기 편하게 해주는 Shortcut이라고. 쓰다보면 알게 되겠지.
문서 읽다보면 한도 끝도 없을 것 같고, 이제 어제 깔아놨던 Stack-O-Bot 프로젝트를 좀 뜯어봐야지.
BP_Bot, 블루프린트가 엄청 방대하게 만들어져 있네. 주석도 꼼꼼하게 달려 있다. Image
Animation Blueprint도 방대하다 Image
Slot과 Montage라는 개념을 조금만 더 찾아보자. Image
이 문서에 자세히 설명되어 있긴 한데, Animation Sequence랑 뭐가 다른지 잘 모르겠네.
docs.unrealengine.com/5.0/en-US/anim…
마찬가지로 "animation montage vs animation sequence" 요렇게 검색했더니 "Montage has more output controls or notifiers, so You can use it for different events. Sequence is just a playable animation without anything. It simply plays one time or in loop" 이렇게 설명하는데,
저건 알고 있지만 굳이 저걸 나눠서 작업해야하는건가 싶어서... 뭐 그런가보다 하고 넘어가자.
여러 방면으로 뜯어 봤는데, 그 중에 "버튼 누르는 애니메이션 처리"가 방금 공부했던 Event Dispatcher와 Animation Montage를 활용하고 있어서 도움이 많이 됐는데,
BP_Bot, 즉 플레이어가 버튼 앞에서 E키를 누르면 StartInteraction을 호출하는데, 그 대상이 BP_InteractionComponent다. Image
StartInteraction은 BP_InteractionComponent에 있는 Custom Event이고, BP_InteractionComponent는 BP_Button 같은 상호작용 가능한 개체에 붙어있는데, 이런 식으로 OnInteract라는 Event Dispatcher로 연결함. Image
BP_InteractionComponent를 포함하고 있는 BP_Button이 BP_InteractionComponent의 Event Dispatcher인 OnInteract를 Bind하고 Image
이 이벤트를 받아 Play Anim Montage를 실행해서 버튼 누르는 애니메이션이 실행되게 됨 Image
이제 두 번째 공부 페이즈는 종료하고, 다시 연습 페이즈를 시작해보자. 목표는 내가 원하는 캐릭터와 애니메이션을 가져와서 움직이게 만들기.
사실 이 프로젝트를 처음 계획할 땐 막연히 Mixamo에서 가져올 생각이었는데, 혹시 마켓 플레이스에 무료로 쓸만한게 있는지 좀 찾아봐야겠다.
무료로 하니까 한 페이지 밖에 없구만... 그냥 Mixamo로 가야지
예전에 봐놨던 요걸 다운받아보자 Image
어떤 형태로 다운 받아야 하지? "mixamo unreal"로 검색 Image
심지어 공식 문서가 있군
docs.unrealengine.com/4.27/en-US/Ani…
Mixamo Animation Pack이란걸 사용한 방법이네.. 이거 말고...
영상을 하나 찾았는데 마침 내가 하려는거랑 똑같은 캐릭터로 예제를 보여주네. 그냥 FBX Binary로 두면 되는군.
Image
캐릭터는 무기프롭이 함께 있는 버전과 그렇지 않은 버전 두 가지가 있는데, 무기 프롭이 있는 버전으로 다운 받은 다음 import 해보기로 했다. Image
다운받은 fbx 파일을 디폴트 설정 그대로 import하는 것 만으로 잘 되고, ThirdPerson 템플릿의 캐릭터의 Mesh 부분을 갈아끼워봤음. 예상대로 애니메이션은 제대로 동작하지 않고, T포즈 그대로 움직이기만 함 Image
기존에 템플릿에 있는 Animation Blueprint와 그 애니메이션들을 새 Skeletal Mesh로 리타게팅하는게 있을법도 한데... 찾아봐야겠다.
오 이건가? Image
Image
요렇게 생겼다 Image
애니메이션이 제대로 리타게팅 되지 않았음. 애니메이션들 열어봐도 그냥 T-Pose네. 다 삭제하고 다시 알아보자
제대로 동작하게 하려면 IK Retargeter라는 걸 잘 설정해야할 것 같은데, 이 문서를 읽어보자.docs.unrealengine.com/5.0/en-US/ik-r…
그러기 위해선 IK Rig에 대해 잘 알아야 한다.
docs.unrealengine.com/5.0/en-US/ik-r…
설명서 따라하면서 이런 식으로 IK Retargeting 기능을 설정하고 Image
IK Retargeter에서 미리보기 하니까 좀 웃기지만 뭔가 된다.
마네킹은 A포즈, 팔라딘은 T포즈여서 이런 상태인 것 같은데, 마침 문서에 포즈를 교정하는 가이드도 있으니 따라 해본다.
왼쪽 위의 Edit Pose를 누르고 포즈를 수정해본다. Image
뿌듯하게도 잘 되는군
그럼 이제 설정한 IK Retargeter를 이용해서 Animation Blueprint를 다시 리타게팅해보자.
잘 됐는데 녹화하다 크래쉬 나서 하던게 날아가버렸네. 기왕 다시 해보는거 이번에는 여성형 마네킹 애니메이션을 리타게팅해봐야지.
발은 살짝 공중에 떠 있고, 점프 애니메이션에는 명백한 오류도 있고 그렇네. 일단 IK Goal을 이용해 리타게팅을 더 깔끔하게 할 수 있다는데, 그건 다음에 해보기로 하자.
이젠 Mixamo에서 애니메이션을 다운받아서 직접 Animation Blueprint를 구현해볼 차례다. 가장 기본적인 걷기/뛰기를 구현하기 위해 BlendSpace를 공부해보자.
일단 Mixamo에서 Sword and Shield Pack 전체를 다운받아서 Import했음 Image
이제 이걸 읽어보자.
docs.unrealengine.com/4.27/en-US/Ani…
읽고 테스트하는 과정에서 Mixamo 애니메이션을 Root Motion이 포함된 버전으로 다운받았다는걸 깨달았음. "Pack"으로 다운받으면 옵션을 따로 지정할 수 없어서 필요한걸 따로 하나씩 "In Place" 옵션을 설정해서 다운받아야 하는 것 같다. Image
Idle, Walk, Run 세 개만 In Place 옵션으로 다운받아보자.
예전에 튜토리얼에서 봤던게 생각났는데, 이렇게 Analysis 칸에 LeftFoot, RightFoot을 놓고 돌리면 자동으로 발 위치에 맞게 Walk/Run 애니메이션을 적절한 위치로 자동으로 블렌딩 설정을 해준다. Image
Validated Get이라는 Node는 이렇게 만드는거군요. Image
결론적으로 튜토리얼과 템플릿 내용들을 이리저리 따라하면서 직접 만들었고, Image
Mixamo에서 받은 애니메이션을 이용해 자연스럽게 움직이게 하는 것 성공

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with 김영호

김영호 Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @yeonghoey

May 27, 2023
즐겁게 읽은 「시드 마이어 : 컴퓨터 게임과 함께한 인생」에서 좋았던 구절 7가지 Image
1. "플레이어에게 더 많은 선택지를 줄수록 더 빨리 싫증 내고 최종적인 만족도는 더 낮다. (...) 플레이어의 선택권을 줄이고 가장 좋은 선택지만 보여주는 것이 내가 해야 할 일이라고 생각했다. (p.102)"
2. "게다가 그는 게임에 미완성인 부분이 있어도 그 때문에 집중하지 못한 적이 한 번도 없었다. 엉망인 그래픽, 너무 강한 적, 3턴째에 강제 종료되는 버그 등 어떤 문제가 있는 프로토타입을 주어도 그는 중요하지 않은 불평거리를 깨끗이 무시하고 그 게임의 핵심을 꿰뚫어 볼 줄 알았다. (p.161)"
Read 8 tweets
Jul 29, 2022
<Zombies and Keys> 게임 디자인 이야기 타래 #zombiesandkeys Image
[챕터 1] 범위 규칙
약 15개월 전, 이 프로토타입을 첫 상업용 프로젝트로 만들어보기로 결심했다.
Read 79 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us!

:(