목록Game Dev (258)
KoreanFoodie's Study
언리얼 엔진의 개념과 동작 원리 복습 이득우님의 블로그를 보며, 배운 내용을 간단히 정리해보려 한다! 언리얼을 처음 시작한다면, 이득우님이 쓰신 책인 "이득우의 언리얼 C++ 개임 개발의 정석" 을 꼭 읽어보는 것을 추천한다! 이 블로그에도 강좌 내용을 정리해 놓았지만, 실제로 읽어보는 것을 적극 추천한다. 8. 액터의 제작 액터는 월드에 배치될 수 있는, 월드 트랜스폼이 있는 언리얼 오브젝트라고 할 수 있다. 게임 컨텐츠의 설계는 액터에서부터 시작한다고 할 수 있다. 액터를 세팅할 때는 아래와 같이 애셋을 불러와 적합한 메시에 적용하면 된다. 자세한 구현은 이 글을 참고하자. static ConstructorHelpers::FObjectFinder SK_BlackKnight(TEXT("SkeletalM..
언리얼 엔진의 개념과 동작 원리 복습 이득우님의 블로그를 보며, 배운 내용을 간단히 정리해보려 한다! 언리얼을 처음 시작한다면, 이득우님이 쓰신 책인 "이득우의 언리얼 C++ 개임 개발의 정석" 을 꼭 읽어보는 것을 추천한다! 이 블로그에도 강좌 내용을 정리해 놓았지만, 실제로 읽어보는 것을 적극 추천한다. 1. 언리얼 엔진도 결국 모듈의 집합이다. 게임을 만들면서, 개발자는 새로운 기능을 계속 추가하게 되는데, 이것을 사용자 게임 모듈이라고 한다. 구조는 다음과 같다. 2. 언리얼 엔진은 크로스 플랫폼(Windows 와 MacOS) 을 지원한다. Config, Content, Plugins, Source, .uproject 만 있으면 "Generate Visual Studio project files"..
MoveTo 와 애니메이션 비헤이비어 트리 로직을 짜면서 MoveTo 를 테스트했는데, 해당 지점으로 이동할 때 걷는 애니메이션이 재생되는 것이 아니라 캐릭터 메시 자체가 미끄러지듯이 슬라이딩하는 현상이 생겼다. 애니메이션을 어떻게 하면 재생할 수 있지? 라고 생각하며 AnimBP 를 잘 연결해줬는데도 동작이 제대로 안되는 상황이 있었다. 언리얼 포럼에서는 다양한 해결책을 제시한다. 1. 애니메이션 블루프린트 연결 확인하기 2. CharacterMovement -> NashMovement 에서 Use Acceleration for Paths 체크하기 근데 나는 이 두가지 전부 아니였다. 나의 경우, 아래와 같이 Speed 값에 따라 애니메이션을 변경하는 블렌드 스페이스를 만들었는데, 알고보니 Speed ..
[언리얼] 어떤 개념 : 어떻게 하기 맨 처음 언리얼을 설치하고 프로젝트를 열려고 하면, 다음과 같이 연결이 되어 있지 않다. 이 문제는 속성에서 연결 프로그램을 다음과 같이 해 주면 된다 : "C:\Program Files (x86)\Epic Games\Launcher\Engine\Binaries\Win64\UnrealVersionSelector.exe" 만약 위의 방법이 안 되면, 위의 UnrealVersionSelector.exe 를, 다음 경로에 복붙한다 : "C:\Program Files\Epic Games\UE_4.27\Engine\Binaries\Win64" 그래도 안 될 경우 : 해당 UnrealVersionSelector.exe 파일을 관리자 권한으로 한 번 실행시켜, 레지스트리에 등록 ..
Udemy 관련 개념 정리 및 Dev Log 를 기록하고 있습니다! Monobehaviour 유니티에는 Monobehaviour 라는 클래스가 있다. 씬에서 GameObject 로 사용하는 클래스는 Monobehaviour 를 상속하게 되는데, Monobehaviour 에는 다양한 내장 메소드들이 있다. Awake, Start 처럼 초기화에 쓰이는 녀석도 있고, OnEnable 이나 OnDisable 처럼 해당 게임 오브젝트를 껐다 킬때 ( SetActive( ) 함수 호출 혹은 .enabled 값 변경 ) 호출되는 함수들도 있다. 중요한 것은, 어떤 함수가 어떤 순서로 호출되는지를 알아야 한다는 것이다! 이 링크에 정리된 사진을 가져온 것이다. 특히 주의해야 할 사항으로는, Spawner 클래스에서 생..
Unreal unresolved external symbol 에러 오랜만에 언리얼을 켰는데 다음과 같은 에러가 발생했다. 일반적으로, 크게 두 가지로 나뉘는데.... 1. 함수를 선언만 하고 구현을 안함 링커에서 에러가 났다는 건, 링킹 과정에서 적절한 함수를 찾지 못했다는 의미이기도 하다. 따라서 선언만 해놓고 실제로 구현을 하지 않은 메소드가 있는지 체크해보도록 하자! 근데 이 경우는 구현이 안된 함수가 있다고 알려줘서 쉬운데... 2. 적절한 모듈을 추가하지 않음 사실 이 경우가 매우매우 빡친다. 왜냐하면 명시적으로 원인이 드러나지 않기 때문이다. 하지만 에러로그를 잘 보면 힌트를 찾을 수 있는데... 실제 예시를 보자. 위 경우에서는, 잘 보면 LNK2019 에러에서 BehaviorTree 관련에..
캐릭터 애니메이션 클립 만들기 먼저, 애니메이션 창을 연다. Player 오브젝트를 클릭 후, Create 를 누른다. 그 후, 우리가 만드려는 애니메이션에 필요한 스프라이트들을 Animation 창으로 드래그&드랍한다. 그럼 다음과 같이 해당하는 키프레임 위에 스프라이트들이 올라가는데, Samples 값을 조절해 속도를 조절할 수 있다. Samples 의 값은 1초당 스프라이트가 얼마나 자주 교체되는지를 의미한다. 이제 Die 애니메이션 클립을 만들어 보자. Run 에서 Create New Clip... 을 누르고, Die.anim 으로 저장한다. 마찬가지로 Samples 값을 설정한다. Die 의 경우 딱 한 번만 재생될 것이므로 루프를 해제한다. 이제 다음으로는 FSM (유한 상태 머신) 을 이용해..
유니티에서 오디오 (소리) 재생하기 유니티에서 플레이어가 소리를 내도록 만들고 싶을 때는, 오디오 소스 컴포넌트를 붙이면 된다. 그 후, 스크립트에서 사용할 AudioClip 과 AudioSource 변수를 정의하고, 플레이어 스크립트의 AudioClip 변수에 적절한 오디오 소스 파일을 드래그&드랍해서 넣어준 다음, 실제 타이밍에 맞게 Play 나 PlayOneShot 등의 메소드를 활용하면 된다! 혹은 다음과 같이 구현해도 된다 : // 오디오 소스 컴포넌트에 내장된 클립을 변경 playerAudioPlayer.clip = deathClip; playerAudioPlayer.Play(); 오디오 소스 컴포넌트가 재생하는 소리는 오디오 리스너 컴포넌트가 듣는다. MainCamera 의 경우, Audio..
스프라이트 자르기 픽셀 아트 이미지를 이용해서, 간단한 스프라이트 애니메이션을 만들어 보자. 예를 들어, 다음과 같이 캐릭터가 죽는 스프라이트가 한꺼번에 한 파일로 들어왔다고 해 보자. Inspector 창에서 Sprite Mode 를 Multiple 로 바꾼 다음,Sprite Editor 를 열자. 스프라이트 에디터 왼족 상단에 Slice 에서 Grid By Cell Size 를 클릭한다. 그 후 적절한 사이즈로 스프라이트를 자르면 다음과 같이 스프라이트가 잘린 것을 확인할 수 있다! 오른쪽 상단의 Apply 를 누른 후 종료하자.
지역 공간과 전역 공간 위의 큐브는 y 축을 기준으로 회전을 가해졌다. 현재 트랜스폼의 좌표계는 지역공간으로 나와 있는데, 이를 전역 공간 (게임 월드를 기준) 으로 바꿔서 옮겨볼 수도 있다. 지역 공간은 부모 오브젝트를 기준으로 하며, 오브젝트 공간은 자기 자신을 기준으로 한다. 지역 공간이 부모 오브젝트를 기준으로 하기 때문에, 큐브 A 의 자식 큐브 B 를 설정한 후 큐브 A 를 회전하면, 큐브 B 의 공간도 회전된 상태로 트랜스폼이 이동과 회전이 이루어질 것이다. 인스펙터 창에 표시되는 위치, 회전, 스케일은 지역 공간 기준으로 측정된 값이다. 평행이동과 회전 예제 // 기본적으로 지역 공간을 기준으로 평행이동 transform.Translate(new Vector3(0, 1, 0) * Time...