본문 바로가기

전체 글466

언리얼엔진5 c++ BehaviorTree(Blackboard Set, Ai Move) ▣ 먼저 Behavior Tree와 Blackboard를 생성합니다. 각각 이름 앞에 BT, BB를 붙여서 어떤 파일인지 의도에 맞게 작성합니다. ▣ 비헤이비어 트리는 블루프린트와 유사한 시각적 방식으로 생성됩니다. 비헤이비어 트리 그래프(Behavior Tree Graph)에 기능이 탑재된 다양한 노드를 추가하고 연결하는 방식입니다. 비헤이비어 트리가 로직을 실행하는 한편, 비헤이비어 트리가 결정을 내리는 데 필요한 정보인 블랙보드 키(Blackboard Key)는 블랙보드(Blackboard)라는 별도의 에셋에 저장됩니다. 일반적인 워크플로는 블랙보드를 생성하고, 블랙보드 키를 추가한 다음, 블랙보드 에셋을 사용하는 비헤이비어 트리를 생성하는 순서입니다. 블랙보드는 아래 이미지에서처럼.. 2024. 4. 27.
언리얼엔진5 c++ AIController(LineOfSightTo : 시선방향) ▣ LineOfSightTo() 함수를 활용하여 시선에 보이면 True로 시선에 있지 않으면 False로 반환하는 함수를 활용하여 조건문을 만들었습니다. ▣ LineOfSightTo() : 다른 배우의 중앙과 상단까지 라인을 확인합니다. ▣ AAIController::ClearFocus : 지정된 우선순위에 대해 Focus를 지우고 결과적으로 FocalPoint도 지워집니다. ▣ AAIController::StopMovement : 컨트롤러가 현재 수행 중인 이동을 중단합니다. https://dev.epicgames.com/documentation/en-us/unreal-engine/BlueprintAPI/Controller/LineOfSightTo?application_version.. 2024. 4. 27.
언리얼엔진5 c++ AIController(Focus, Move) ▣ 먼저 AiController c++ 코드를 생성합니다.   ▣ 그리고 생성한 c++ AiController를 상속한 블루프린트도 생성합니다.   ▣ 적 블루프린트에 들어가서 디테일탭에 Ai Controller Class를 아까 생성한 AiController 블루프린트로 지정합니다.   ▣ AiController c++ 코드에. h 헤더파일로 들어가서 BeginPlay(), Tick() 함수를 선언하고 함수 정의까지 진행합니다.   ▣. cpp 파일로 가서 #include "Kismet/GameplayStatics.h"를 선언합니다. 그리고 Tick() 함수에 플레이어 Pawn을 저장하는 코드, Ai 시선처리하는 함수, Ai 이동하는 함수 코드를 완성합니다.  ▣.. 2024. 4. 27.
언리얼엔진5 엘리베이터 ▣ 먼저 엘리베이터 블루프린트를 생성하고 Cube Static Mesh를 활용하여 엘리베이터 틀과 버튼을 상속해서 만듭니다.  ▣ Event Graph에서 Event Custom으로 Event 노드를 생성합니다.   ▣ Move Component To 노드를 활용하여 버튼을 클릭하면 Button이 움직이고 엘리베이터가 위아래로 움직이는 노드를 완성합니다.  ▣ Move Compoent To 노드에 이동 위치 및 보간시간을 조절해서 연결합니다. https://dev.epicgames.com/documentation/en-us/unreal-engine/BlueprintAPI/Components/MoveComponentTo?application_version=5.3 Move .. 2024. 4. 26.
언리얼엔진5 c++ SpawnEmitterAtLocation ▣ 먼저 파티클시스템을 저장할 변수를 선언합니다.   ▣ 그리고 cpp파일에서 #include "Kismet/GameplayStatics.h"와 #include "Particles/ParticleSystem.h" 헤더를 추가합니다.  ▣ "Kismet/GameplayStatics.h"   : 블루프린트와 C++ 모두에서 호출할 수 있는 유용한 게임플레이 유틸리티 함수가 포함된 정적 클래스 ▣ #include "Particles/ParticleSystem.h"  : ParticleSystem은 원하는 수의 ParticleEmitters를 포함하는 클래스 https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/E.. 2024. 4. 26.
언리얼엔진5 c++ LineTrace ▣ LineTrace를 쏘는 함수에 코드를 완성합니다. ▣ 필요한 변수를 정의합니다. 각각 LineTrace() 함수안에 들어갈 매개변수입니다. ▣ DrawDebugLine() 함수는 LineTrace 라인을 그려주기 위함입니다.  https://docs.unrealengine.com/4.27/en-US/API/Runtime/Engine/Engine/UWorld/LineTraceSingleByChannel/ UWorld::LineTraceSingleByChannelTrace a ray against the world using a specific channel and return the first blocking hitdocs.unrealengine.com https:/.. 2024. 4. 26.
언리얼엔진5 Blend Poses Enum ▣ 먼저 Blueprint에서 Enumeration을 생성합니다. ▣ 그리고 두 개의 Fire State에 대한 Enum 값을 생성합니다. ▣ Player 블루프린트에서 아까 생성한 Enum에 대한 변수를 생성하고 1번 키를 누르면 Pistol 상태, 2번 키를 누르면 Rifle 상태에 대한 노드를 완성합니다. ▣ 애니메이션 블루프린트로와서 Blend와 Enum 이름을 검색하면 Enum에 대한 Blend Poses 노드가 나옵니다. 이걸 선택하고 https://dev.epicgames.com/documentation/ko-kr/unreal-engine/animation-blueprint-blend-nodes-in-unreal-engine?application_version=5.3 언리얼 엔진의 애니메이션.. 2024. 4. 23.
언리얼엔진5 c++ PlaySound ▣ 먼저 언리얼에서 지원하는 소리를 다운로드합니다. https://docs.unrealengine.com/4.27/ko/WorkingWithAudio/Overview/ 오디오 시스템 개요 사운드 큐 노드 기반 오디오 애셋 사용법을 포함해서, 게임내 사운드 재생에 사용되는 오디오 시스템에 대한 개요서입니다. docs.unrealengine.com ▣ 소리를 재생할 c++ 클래스에 들어가서 .h 파일에서 소리에 대한 변수를 선언합니다. ▣. cpp 파일로 가서 소리를 재생하기 함수가 있는 #include "Kismet/GameplayStatics.h"를 선언합니다. ▣ GameplayStatics : 블루프린트와 C++ 모두에서 호출할 수 있는 유용한 게임플레이 유틸리티 함수가 포함된 정적 클래스 https.. 2024. 4. 23.
언리얼엔진5 c++ HUD Widget ▣ 먼저 Widget Blueprint를 생성하고 CrossHair 이미지를 넣어 컴파일 저장합니다. ▣ Build.cs로 코드로 가서 UMG 키워드와 PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" }); 주석을 해제합니다. 이 두가지는 UMG에 대한 코드를 사용하기 위함입니다. ▣ .h 헤더파일로 가서 두 개의 유저위젯 변수를 추가합니다. ▣ TSubclassOf는 UClass 유형의 안전성을 보장해 주는 템플릿 클래스입니다. 예를 들어 디자이너가 대미지 유형을 지정하도록 해주는 프로젝타일 클래스를 제작 중이라 가정합시다. 그냥 UPROPERTY 유형의 UClass를 만든 다음 디자이너가 항상 UDamageType 파.. 2024. 4. 22.
언리얼엔진5 c++ socket에 StaticMesh 적용 ▣ 먼저 Mesh 스켈레톤에 Socket을 추가하고 총을 프리뷰로 가져와서 회전 및 위치를 지정합니다. ▣ StaticMeshComponent를 추가하기 위해 변수를 먼저 선언부에 선언합니다. ▣ StaticMeshComponent 생성 및 상속 그리고 Sock에 상속할 코드를 완성합니다. ▣ AttachToComponent() 함수 매개변수 끝에 SockName을 지정합니다. https://docs.unrealengine.com/4.27/en-US/API/Runtime/Engine/GameFramework/AActor/AttachToComponent/ AActor::AttachToComponent Attaches the RootComponent of this Actor to the supplied co.. 2024. 4. 20.
언리얼엔진5 c++ GameMode Default Pawn ▣ 먼저 Game Mode Base C++ 클래스를 생성합니다. ▣ 먼저 클래스 생성자를 선언부에 선언합니다. ▣ 구현부. cpp에서 플레이어. h 헤더를 포함하고 기본 Pawn클래스로 지정할 클래스 경로를 복사하고 그 경로를 가져와서 DefaultPawnClass에 대입합니다. ▣ 컴파일 후 World Settings에 Game Mode를 생성한 C++로 지정하면 Default Pawn Class 가 코드로 지정한 Pawn로 바뀐 걸 확인할 수 있습니다. 2024. 4. 20.
언리얼엔진5 c++ AnimInstance Montage 구르기 ▣ 먼저 가져온 애니메이션에 디테일에서 EnableRootMotion을 체크합니다. 그럼 애니메이션으로 이동되는 경로가 고정됩니다. ▣ 그리고 애니메이션을 몽타주로 생성하고 애니메이션 블루프린트에 연결까지 진행합니다. ▣ InputMappingContext에 Rolling에 대한 InputAction을 추가합니다. ▣ 플레이어 C++에. h 헤더에서 애니메이션 몽타주에 대한 변수, 입력변수, 함수를 선언합니다. ▣. cpp에서 InputAction에 대한 경로 지정 및 바인딩 코드를 완성하고 Rolling함수 안에서 AnimInstance를 가져와 Montage_Play() 함수를 이용해서 몽타주를 플레이하는 코드를 완성합니다. https://docs.unrealengine.com/4.27/en-US/A.. 2024. 4. 18.
언리얼엔진5 c++ Animation(move, jump) ▣ Add C++ Class에서 All Classes를 선택해서 Animinstance를 생성합니다. ▣ Animation Blueprint를 생성하고 밑에 Parent Class에서 아까 생성한 Animinstance를 선택하고 생성합니다. ▣ 플레이어 C++코드로 들어가서 SetAnimInstanceClass를 지정해야 합니다. FClassFinder를 이용해서 Class를 가져오는데 애니메이션블루프린트 경로를 먼저 복사해서 그대로 붙여 넣고 ▣ 위에 있는 경로처럼 필요한 경로만 넣어주시고 Class를 가져오기 때문에 맨 끝에 _C를 추가하고 저장합니다. ▣ 컴파일 후 Player블루프린트에서 Animation 메뉴에 Anim Class를 확인하면 애니메이션 블루프린트 클래스가 추가된 걸 확인할 수 .. 2024. 4. 17.
언리얼엔진5 c++ EnhancedInput ▣ EnhancedInput 입력 Context와 InputAction을 생성합니다. ▣ Project Settings -> Input -> Default Classess에 EnhancedInput과 Component를 설정했는지 확인합니다. 그리고 플레이어 C++ 코드를 불러옵니다. ▣ 솔루션 탐색기에서 Source폴더에 프로젝트폴더에 프로젝트이름. Build.cs를 찾아서 PublicDependencyModuleNames.AddRange()함수코드에 "EnhancedInput"을 추가하고 저장합니다. ▣ 그리고 플레이어 캐릭터 C++에. h 헤더로 가서 #Include "InputActionvalue.h"를 추가합니다. 이때 빨간 줄로 오류가 나오는 경우가 있습니다. 저장 후 ▣ 프로젝트 경로로 가서.. 2024. 4. 15.
언리얼엔진5 c++ Camera SpringArm ▣ UPROPERTY() : 변수에 붙은 리플렉션 매크로 ▣ 에디터 접근을 위한 매크로 https://dev.epicgames.com/documentation/ko-kr/unreal-engine/unreal-engine-uproperties?application_version=5.3 언리얼 엔진 UProperty 게임플레이 클래스에 대한 프로퍼티 생성 및 구현 관련 레퍼런스입니다. dev.epicgames.com ▣ SpringArm, Camera 컴포넌트를 사용하기 위한 헤더 추가 #include "GameFramework/SpringArmComponent.h" #include "Camera/CameraComponent.h" ▣ CreateDefaultSubobject(컴포넌트 이름) : 구성 요소 또.. 2024. 4. 14.
언리얼엔진5 c++ SkeletalMesh 설정 ▣ Tools에서 New C++ Class를 클릭합니다. ▣ Character Class로 선택하고 이름과 경로를 지정한 다음에 생성합니다. ▣ ContructorHelpers는 ObjectBase.h 에 정의되는 특수한 네임스페이스로, 생성자 전용 흔한 동작을 수행하는 데 사용하는 헬퍼 템플릿이 들어 있습니다. 예를 들어, 에셋이나 클래스로의 레퍼런스 검색은 물론 컴포넌트 생성 및 검색용 헬퍼 템플릿이 있습니다. ▣ 사용방법 : ContructorHelpers::FObjectFinder변수이름(TEXT("경로"); 경로는 가져올 Mesh에서 오른쪽마우스를 클릭하고 Copy Reference로 저장한 후에 붙여 넣습니다. https://dev.epicgames.com/documentation/ko-kr/.. 2024. 4. 14.
언리얼엔진5 UMG 불투명 애니메이션 ▣ 위젯블루프린트를 생성하고 불투명하게 해 줄 Text를 생성하고 Animation에서 render opacity를 0, 1로 각각 애니메이션에서 지정합니다. render opacity는 불투명도를 의미합니다. ▣ 레벨블루프린트로 들어가서 Squence노드를 활용하여 두 개를 동시에 호출하여 애니메이션이 재생되고 소리가 나오게 노드를 완성합니다. ▣ Sequence 노드는 한 번의 실행 신호로 일련의 이벤트를 순서대로 발동시키는 노드입니다. 이 노드에는 출력이 몇이든 있을 수 있으며, Sequence 노드가 입력을 받자마자 그 모두가 호출됩니다. 그들 모두 순서대로 지연 없이 호출됩니다. 전형적인 사용자에게는 이 출력들이 동시에 발동된 것처럼 보일 것입니다. 이 예제에서 Sequence 노드는 레벨 시작.. 2024. 4. 12.
언리얼엔진5 spring arm 제어 ▣ spring arm에 위치를 제어해서 카메라 위치를 옮기면 이렇게 spring arm에 대한 충돌이 어느 방향에서는 충돌하되지 않아 벽을 통과하는 문제가 발생합니다. ▣ 이럴 때에는 SpringArm에 위치는 Player Mesh 위치에 있어야 벽을 통과하는 문제가 해결되고 카메라에 위치는 Target Arm Length와 Socket Offset, Target Offset를 이용해서 제어해야 합니다. 먼저 Socket Offset에 위치를 바꿔서 카메라에 위치를 조절하겠습니다. ▣ 그럼 이렇게 벽을 통과하는 문제는 해결되지만 벽이 닿이는 시점에 따라 카메라 위치가 바뀌게 됩니다. ▣ 이번에는 Socket Offset으로 위치를 변경하겠습니다. ▣ 그럼 카메라가 반전되는 문제는 해결되지만 카메라를 가.. 2024. 4. 12.
언리얼엔진5 캐릭터 앉기 ▣ 앉는 키에 대한 Input System을 생성합니다. ▣ 생성한 IA_Crouch노드를 추가하고 오른쪽 마우스를 클릭하여 Crouch라고 검색하여 Crouch 함수와 Un Crouch 함수를 생성합니다. ▣ Crouch함수 : 캐릭터에게 웅크리기 시작하도록 요청합니다. 요청은 CharacterMovementComponent의 다음 업데이트 시 처리됩니다. https://dev.epicgames.com/documentation/ko-kr/unreal-engine/BlueprintAPI/Character/Crouch?application_version=5.3 Crouch Crouch dev.epicgames.com ▣ Character Movement 컴포넌트에서 Can Crouch를 체크하고 Max W.. 2024. 4. 10.
언리얼엔진5 슬로우모션 ▣ Set Global Time Dilation노드는 전역 세계 시간을 설정하는 노드입니다. 1.0은 일반속도, 1.0보다 크기 되면 전역 세계 속도가 빨라지고 1.0보다 작게 설정하면 전역 세계 속도가 느려집니다. https://docs.unrealengine.com/4.27/en-US/BlueprintAPI/Utilities/Time/SetGlobalTimeDilation/ Set Global Time Dilation Set Global Time Dilation docs.unrealengine.com ▣ Custom Time Dilation 노드는 플레이어 속도를 제어합니다. 단 솔로모드 일 때 가능합니다. 0.5로 설정하면 Half Speed Global Time에 반 속도로 1로 설정하면 Worl.. 2024. 4. 7.
언리얼엔진5 타이머 ▣ Get World Delta Seconds 노드를 이용해서 변수에 값을 더해서 타이머를 완성합니다. https://dev.epicgames.com/documentation/en-us/unreal-engine/BlueprintAPI/Utilities/Time/GetWorldDeltaSeconds?application_version=5.3 Get World Delta Seconds Get World Delta Seconds dev.epicgames.com ▣ 컴파일 저장 후 플레이를 해보면 Float 형식으로 타이머가 출력됩니다. ▣ 이번에는 Delay 함수를 이용해서 1초마다 변수에 +1을 더하는 방식으로 타이머를 완성합니다. ▣ 컴파일 저장 후 1초마다 변수 값이 하나씩 늘어나 출력되는 걸 확인할 수.. 2024. 4. 6.
언리얼엔진5 1인칭 3인칭 시점 변경 ▣ 먼저 1인칭 시점 카메라를 Mesh에 추가하고 Sockets을 head 머리로 지정하고 회전값을 시점에 맞게 변경합니다. ▣ Event Graph에서 V키를 누르면 1인칭 3인칭을 활성화 비활성화하는 노드를 완성합니다. ▣ 노드는 디테일탭에 있는 Activate를 체크 및 해제를 해서 조절하기 위함입니다. ▣ V 키를 누르면 이렇게 1인칭 3인칭 시점이 변경되는 걸 확인합니다. 2024. 4. 6.
언리얼엔진5 Ai move to (Ai 랜덤이동, Ai 공격) ▣ Enemy ai를 만들 Character 클래스를 생성합니다. ▣ BP_EnemyAi로 이름을 지정하고 메뉴 들어가서 Mesh를 지정하고 PawnSensing 컴포넌트를 추가합니다. ▣ Event Graph에서 Add Custom Event를 추가하여 Follow Player, RandomMove 두 개 Event를 생성합니다. Follow Player는 플레이어를 발견하면 플레이어를 따라가는 이벤트 RandomMove는 플레이어를 발견하지 않는 상태에서는 랜덤으로 이동하는 이벤트입니다. ▣ Ai move to를 검색하여 Ai move to 노드도 추가합니다. https://dev.epicgames.com/documentation/ko-kr/unreal-engine/BlueprintAPI/AI/AIM.. 2024. 4. 6.
언리얼엔진5 geometry material 모두 적용 ▣ 적용할 geometry Box를 선택하고 Shift + B 키를 누르면 모든 면이 선택됩니다. ▣ 그리고 Suface Materials에 원하는 Material을 넣으면 이렇게 모두 적용되는 걸 확인할 수 있습니다. 2024. 4. 6.