목록언리얼 (116)
초보 코린이의 성장 일지
기본적인 이론을 알고 보는게 더 빠른 이해를 도울 수 있으므로 설명부터 시작해 보겠다. 1. 기본적인 에디터창이 보인다. 하지만 좌우 어디에도 카테고리 및 창이 존재하지 않는다. 2. 원래는 존재 했으나 하나씩 지울수가 있는데, 이 본 화면에 에디터창만은 에디터를 종료하지 않는다 끌 방법이 없다. 3. 메인 프레임이라는 화면상에 하나로 올라가있으며, 나머지 카테고리 및 창들이 주변에 붙어서 생성되어 화면에 보이는 것이다. 4. API나 DX에도 나오듯 View 영역이 메인 프레임을 나타낸다고 생각하면 이해하기 쉽다. 5. 메인 프레임을 반환하는 방식으로 Handle을 구해서 코드를 작성해볼 것이다. 1. | 기호에 보면 왼쪽, 오른쪽 구간으로 나눠서 사용하는데 의미가 다르다. 왼쪽이 나타나는 설명, 오른..
1. 에디터안에 카테고리에 무언가를 추가하기 위해서는 StaticComponent를 가져와야 한다. 2. 그 안에 그릴 정보는 StaticMesh를 가져와서 작업을 진행해야한다. 더보기 #include "StaticMesh_Detail.h" #include "DetailLayoutBuilder.h" #include "DetailCategoryBuilder.h" #include "DetailWidgetRow.h" #include "Misc/MessageDialog.h" #include "Serialization/BufferArchive.h" #include "CStaticMesh.h" // 에디터 상에서만 끼워넣기 때문에, 게임모드인지 확인할 수 있는 방법이 없다. FReply FStaticMesh_Det..
더보기 #if WITH_EDITOR // 월드 아웃라이너 // 안에 이름 전부를 알아낼떄 사용 GLog->Log(GetActorLabel()); #endif 1. 게임내에서 코드를 수정 할 수 없는 부분, 즉 에디터 전용일때는 매크로 사용을 필히 해줘여한다. 2. 매크로를 꼭 써야하는 이유에 대해 한가지 알게 된 것이다. 더보기 #pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "CStaticMesh.generated.h" UCLASS() class U2212_05_API ACStaticMesh : public AActor { GENERATED_BODY() #if WITH_EDITOR public: // 에디터 ..
등록시킨 StaticMesh를 클릭하거나 에디터 맵에 올릴때 로그가 출력되도록 만들어 볼 것이다. 1. 직렬화 시켜줄 클래스를 하나 생성해준다. 1. 엔진에있는 MatineeCam_SM을 복사해서 가져와준다. 1. 머터리얼을 하나 검은색으로 생성해주고, 사용할 수 있도록 인스턴스 생성도 해준다. 더보기 #pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "CStaticMesh.generated.h" UCLASS() class U2212_05_API ACStaticMesh : public AActor { GENERATED_BODY() private: UPROPERTY(VisibleAnywhere, Category =..
명령을 Console를 통해 내려 동작을 하도록 구현해 볼 것이다. 더보기 #pragma once #include "CoreMinimal.h" class EXAMPLE_API FExampleConsoleCommand { public: FExampleConsoleCommand(); ~FExampleConsoleCommand(); private: // I가 붙었지만 클래스가 아닌 구조체이다. // 연결해줄 변수 struct IConsoleCommand* Command; private: void ExecuteCommand(); #include "ExampleConsoleCommand.h" #include "GameFramework/Character.h" #include "HAL/IConsoleManager.h..
디버그 플러그인을 사용하여, 플레이어 정보, 플레이어 전방에 있는 객체, Debug Actor 3가지를 띄어보도록 할 것이다. 1. 화면상에 그려지기 위해 상속받은 부모로 들어가서 함수를 오버라이드 해서 사용한다. 더보기 #pragma once #include "CoreMinimal.h" #include "GameplayDebuggerCategory.h" class EXAMPLE_API FExampleDubuggerCategory : public FGameplayDebuggerCategory // 사용하기 위해 상속 { public: // 실제로 그려주는 함수 void DrawData(APlayerController* OwnerPC, FGameplayDebuggerCanvasContext& CanvasC..
언리얼에 기본적으로 사용할 수 있는 플로그인이 아닌, 자체적으로 기능을 만들어 볼 것이다. 플러그인이라는 개념은 여러 모듈을 만들어 배포한다고 생각하면 된다. 1. 기본적으로 템플릿 내려보기로 생성해서 시작해 보겠다. 1. 기본적인 왼쪽에 플러그인들은 엔진 폴더안에 있는 기능들을 보여주고있다. 2. 새로운 사용자에 플러그인을 만들기 위해 오른쪽 하단에 새 플러그인을 클릭해 만들어준다. 3. 기본으로 설정하고 Example라고 이름을 지어 생성해준다. 1. 만들어준 플러그인을 보면 폴더안에 h와 cpp가 분활되어 있는걸 볼 수 있다. 2. 헤더는 모듈을 나눠줄때 dll로 컴파일해서 주게된다. 그때 어떠한 함수가 dll안에 있는지 모르기 때문에 publid로 .h만 지원해준다. cpp는 안에 내부적인 코드 ..
권총에 애니메이션 모션을 만들고 필요한 부위는 IK를 적용하여, 원만한 동작이 나올수 있도록 만들어 볼 것이다. 1. 장착 몽타주를 생성해주고, 노티파이와 커브를 생성해서 보간을 해준다. 1. 발사시 흔들리는 수치도 설정, 권총은 반동을 크게 해준다. 1. 위에 만들어준 몽타주, Shake 레퍼런스 주소를 넣어준다. 1. 에임 오브셋에 정면 동작과 키를 추가해서 위아래 향하는 동작을 만들었을때, 몽타주로 특정한 애니메이션을 만들어야 할때 등등 이렇게 부자연 연출이 나오게된다. 2. 그래서 하나를 조정하게되면, 그 라인을 타고 타고 내려가 같이 움직이는 부위 전부를 움직여 줘여한다. 여기서 FK, IK가 들어간다. 1. 레이어를 하나 생성해준다. 1. 에임오프셋은 라이플꺼랑 동일하므로 그대로 사용한다. 2..
AK47 사용할 때 모션에 부자연스러움이 남아있다. 리깅을 통해서 자연스럽게 잡아줄 것이다. 1. 키 2개를 넣어준다. 2. 회전값만 사용할 것이므로, 롤, 피치, 요만 사용한다. 3. 적절한 수치를 줘서 팔을 견착했을때 자연스럽게 나오게끔 리깅을 해준다. 1. FPS에서 AK47같은 총기류를 사용할때 보면, 좌우로 반동이 되는것보다 앞뒤 반동이 더 크게 적용되는걸 볼 수 있다. 2. 동일하게 앞 뒤 수치를 조절해 줄 것이다. 3. 레퍼런스 복사 후 추가해준다. 4. 리깅으로 인해 도트 위치도 알맞게 나오고, 반동도 적당히 이뤄진다. 1. 권총을 만들기 위해 상속받아 생성해준다. 1. 권총은 End_Equip가 없어도되며, 탄창 또한 필요가 없으므로 NAME_None로 처리해준다. 2. 꺼내는 위치는 정..
AK47를 사용할때 1인칭 모드로 전환해서 발사할 수 있도록 Mesh 하나 더 추가해서 만들어 볼 것이다. 또 한 도트사이트를 달아서 조준이 가능하도록 미리 세팅해볼 것이다. 1. 쓰일 재료가 필요하므로, 템플릿을 이용할 것이다. 2. 추가/임포트 -> 피처 또는 콘텐츠 팩 추가 -> 일인칭으로 만들어준다. 3. 제일 중요한건 팔만 있는 Mesh가 필요하다. 이주해서 가져와 준다. 1. Arms Mesh를 붙여주기 위해 생성. 2. 카메라 바로 앞에 붙여줘야 1인칭 모드처럼 보이게 할 수 있기 때문에 붙여줄 위치는 Camera. 3. 수치들을 조절해준다. 1. 붙여서 생성해 놓은 상태 2. 이제 애니메이션을 사용해서 자연스레 동작속에서 회전을 시켜줄 것이다. 1. 애니메이션 블루프린트에 사용할 에임 애니..