본문 바로가기

전체 글475

언리얼엔진5 SpawnAIFromClass ▣ 먼저 Enemy cpp로가서 AIControllerClass에 대한 설정과 AutoPossessAI 설정을 하는 코드를 작성합니다. ▣  AutoPossessAI 종류 Disabled 기능이 비활성화되었습니다(AI를 자동으로 보유하지 않음). PlacedInWorld 폰이 세계에 배치된 경우에만 AI 컨트롤러가 소유합니다. Spawned 월드가 로드된 후 Pawn이 스폰된 경우에만 AI 컨트롤러가 소유합니다. PlacedInWorldOrSpawned 폰은 생성될 때마다 AI 컨트롤러에 의해 자동으로 소유됩니다.  ▣ AI가 있는 스폰 하려면 Unreal Engine에서 "Spawn Actor for Class" 대신 "Spawn AI From Class" 노드를 사용해야 합니다. 이는 AI 캐릭터가 .. 2024. 5. 9.
언리얼엔진5 Mirror System ▣ 먼저 Material을 생성합니다.   ▣ 키보드 3번 키를 누른 상태에서 마우스 클릭을 하면 Constant 노드를 추가할 수 있습니다. 색을 흰색으로 바꾸고 Base Color에 연결합니다.  ▣ 키보드 1번 키를 누른 상태에서 마우스를 클릭하여 노드 3개를 생성하고 value값을 위에 이미지처럼 각각 지정한 다음에 Metallic, Specular, Roughness를 각각 연결합니다.   ▣ 디테일탭에서 Forward Shading에 High Quality Reflections, Planar Reflections 두 개를 체크하고 저장합니다.   ▣ 거울효과를 적용하고 싶은 Actor에 Material을 적용하고    ▣ Planar Reflection을 검색하여 거울효과 앞에 드래그합니다. .. 2024. 5. 7.
언리얼엔진5 Inventory DataTable save ▣ 먼저 Blueprint Structure 두 개를 생성합니다. FItemData는 아이템 데이터를 관리하는 구조체이고 FSlot 저장할 아이템 이름과 아이템 수에 관한 구조체입니다.   https://dev.epicgames.com/documentation/ko-kr/unreal-engine/blueprint-variables-in-unreal-engine?application_version=5.3 언리얼 엔진의 블루프린트 변수 | 언리얼 엔진 5.4 문서 | Epic Developer Community값을 가지거나 월드 내 오브젝트나 액터를 참조하는 프로퍼티입니다.dev.epicgames.com   ▣ 아이템에 ItemData를 반환하기 위한 블루프린트 인터페이스를 생성합니다. 생성한 블루프린트 인.. 2024. 5. 6.
언리얼엔진5 Inventory Widget ▣ 먼저 Inventory Widget을 생성합니다.   ▣ 생성한 Inventory Widget으로 가서 Canvas Panel를 추가하고 Canvas Panel에 Blackground Blur와 Image, Border를 각각 배치합니다.   ▣ Background Blur에 디테일탭에 Blur Stregth 효과를 5.0으로 지정합니다.   ▣ 그리고 Widget Animation을 두 개 생성하고 Render Opacity로 투명도를 조절하는 애니메이션을 완성합니다. InventoryEffect는 Inventory가 처음 나올 때 점점 나타나고InventoryEffectOut은 Inventory가 점점 사라지는 효과입니다.    ▣ Graph로 가서 Event Contruct에는 Inventory.. 2024. 5. 6.
언리얼엔진5 c++ CalculateDirection ▣ 애니메이션 블루프린트에 노드처럼 c++ 코드에서도 먼저 Angle 변수선언을 하고 CalculateDirection() 함수를 호출하여 필요한 데이터를 매개변수에 넣고 저장합니다.  ▣ 컴파일 후 애니메이션블루프린트에 스테이트머신에서 블랜드스페이스에 변수에 값을 연결하고 플레이를 하면 방향에 맞게 블랜드스페이스 애니메이션이 실행됩니다. 2024. 5. 5.
언리얼엔진5 c++ CharacterMovement ▣ 먼저 h헤더파일에 CharacterMovementComponent에 데이터를 저장할 변수를 선언하고 GetCharacterMovement()를 대입합니다.   ▣ cpp파일에서 필요한 헤더를 추가하고  ▣ CharacterMovement변수를 접근하여 변경하고 싶은 Speed를 대입해서 변경하면 됩니다. 2024. 5. 4.
언리얼엔진5 c++ BehaviorTree(BTService 생성 및 사용) ▣ Add Service에서 Set  Default Focus를 추가하여 BehaviorTree에서 Ai에 Focus를 변경할 수 있습니다.  ▣ 서비스(Services)는 컴포짓(Composite) 또는 태스크(Task) 노드에 어태치 되며, 분기가 실행 중인 동안 정의된 빈도로 실행됩니다. 보통 블랙보드의 확인과 업데이트에 사용됩니다. 이 노드는 다른 비헤이비어 트리 시스템에서 전통적인 병렬(Parallel) 노드를 대체합니다. ▣ Default Focus는 AI 컨트롤러(AI Controller)의 포커스를 설정하여 블루프린트 및 코드의 액터에 액세스 하는 바로가기를 생성합니다. AI 컨트롤러의 포커스를 액터로 설정하면 블랙보드 키에 액세스 하지 않고 AI 컨트롤러에서 직접 액세스 할 수 있습니다... 2024. 4. 30.
언리얼엔진5 c++ BehaviorTree(BTTask 생성 및 Character 호출) ▣ c++ 클래스 생성에서 BTTaskNode를 선택하여 생성합니다. 블랙보드 키가 필요하지 않을 경우 BTTaskNode로 생성합니다. https://dev.epicgames.com/documentation/ko-kr/unreal-engine/API/Runtime/AIModule/BehaviorTree/UBTTaskNode?application_version=5.3 UBTTaskNodeTask are leaf nodes of behavior tree, which perform actual actionsdev.epicgames.com   ▣ Build.cs 파일로 가서 "GameplayTasks"를 추가합니다.   ▣ 그리고 h 헤더파일로 가서 생성자 및 ExecuteTask 함수를 선언합니다.  ▣ E.. 2024. 4. 29.
언리얼엔진5 c++ BehaviorTree(Decorator, Selector, 플레이어 발견, 원위치로) ▣ 먼저 PlayerLocation을 활성화 비활성화하는 방식으로 AI를 이동하고 다시 원래위치로 돌아가는 코드를 작성하겠습니다.  ▣ LineOfSightTo() 함수로 플레이어를 발견하면 BlackBoard PlayerLocation를 세팅하고 아니면 PlayerLocation블랙키를 지우는 코드를 작성합니다. https://dev.epicgames.com/documentation/ko-kr/unreal-engine/BlueprintAPI/AI/Components/Blackboard/ClearValue%3Fapplication_version%3D5.0%3Fapplication_version%3D5.0%3Fapplication_version%3D5.0?application_version=5.0 Clea.. 2024. 4. 28.
언리얼엔진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=5.3 Line O.. 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 이동하는 함수 코드를 완성합니다.  ▣ UGameplayStatics::Get.. 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 Component ToMove Co.. 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/Engine/Kismet/.. 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://docs.unrealengine... 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.. 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.