Unreal

게임 엔진/Unreal

[Unreal] [Networking] TCP Socket을 이용한 Client 개발

TCP Socket을 구현하는 방법들 TCP Socket은 네트워크 레벨에서의 기능을 담당한다. Connect, Read, Write, Disconnect 등등과 같은 기능들이 있을 것이다. 다만 이 소켓을 이용한 함수들을 이용하는데에는 필연적으로 직면하게 되는 문제가 있다. 네트워크 레벨을 통해서 데이터를 주고받아야 하기 때문에, 네트워크 레벨에서 버퍼에 데이터가 모두 준비되지 않았을 경우, 이 상황을 어떻게 처리해야할까? 이러한 문제에 대해 여러가지 방법으로 대응이 가능하다. 다음과 방법들이 있다. 1. Blocking I/O TCP 소켓의에서 Blocking I/O는 가장 간단하고 일반적으로 사용되는 접근 방식이다. Blocking I/O를 이용하여 Socket의 기능을 이용하는 경우 어플리케이션은..

게임 엔진/Unreal

[Unreal] [Example] Editor에 Asset 생성 및 저장

Create Asset to Editor Unreal 에디터에 c++을 이용하여 원하는 에셋을 생성하는 예제이다. Target Asset Data Asset을 이용하기 위해서 먼저 사용하고자 하는 데이터 형태를 c++로 작성한다. #include "CoreMinimal.h" #include "Engine/DataAsset.h" #include "MyPrimaryDataAsset.generated.h" UCLASS() class TESTPROJECT_API UMyPrimaryDataAsset : public UPrimaryDataAsset { GENERATED_BODY() public: UPROPERTY(EditAnywhere) FString ItemName; UPROPERTY(EditAnywhere) U..

게임 엔진/Unreal

[Unreal] 언리얼 메모리 관리 시스템 (Smart Pointer, GC)

언리얼 메모리 관리 시스템 스마트 포인터와 가비지 컬렉터는 메모리 관리를 위한 개념들로 프로그래밍 영역에서 굉장히 일반적으로 통용되는 개념이다. 언리얼은 스마트 포인터와 가비지 컬렉터(GC)를 모두 사용하여 메모리를 관리하는데, 두 개념 모두 c++로 자체 제작한 코드를 이용한다. 순수 c++을 이용하는 상황에서는 스마트 포인터들을 사용하고, UObject와 관련된 부분에서는 GC를 사용한다. Smart Pointer 1. TUniquePtr 메모리의 유일한 소유권을 넘겨주고, 해제를 자동화한 개념. (c++ stl의 unique_ptr과 대응된다.) 일반적인 포인터와 달리 객체가 파괴될 때 소유한 메모리도 해제한다. 아래 예제를 보자. 해당 코드대로 실행 시 메모리는 해제되지 않고 남아있게 된다. 이러..

게임 엔진/Unreal

[Unreal] [Editor] Slate를 이용한 커스텀 에디터 List View 제작

Slate List View Slate ListView 예제이다. 다음과 같은 ui를 제작 할 수 있다. SMyListViewWidget.h #pragma once #include "CoreMinimal.h" #include "SlateFwd.h" #include "SlateBasics.h" #include "Widgets/DeclarativeSyntaxSupport.h" #include "Input/Reply.h" #include "Widgets/SWidget.h" #include "Widgets/SCompoundWidget.h" #include "Widgets/Views/STableViewBase.h" #include "Widgets/Views/STableRow.h" #include "Widgets/..

게임 엔진/Unreal

[Unreal] [Editor] 프로퍼티 에디터 제작 방법

Detail Editor Customization 언리얼 커스텀 에디터를 제작함에 있어서 가장 중요한 부분인 custom property editor를 제작하는 내용이다. Property editor란 다음과 같이 사용자가 정의한 어떤 데이터의 프로퍼티를 언리얼 ui상에 표시하고, 또 수정할 수 있도록 해주는 editor이다. Modules 다음 모듈들을 미리 추가해두자. PrivateDependencyModuleNames.AddRange( new string[] { "Projects", "InputCore", "UnrealEd", "LevelEditor", "CoreUObject", "Engine", "Slate", "SlateCore", "EditorScriptingUtilities", "Editor..

게임 엔진/Unreal

[Unreal] [Example] 객체 직렬화 방법

Serialization (Memory Archive) 언리얼에서 제공하는 기본적인 메모리 직렬화 객체 FMemoryArchive를 활용한 예제이다. 언리얼에서는 메모리 읽기, 쓰기 기능을 지원하기 위해 FMemoryArchive를 상속하여 FMemoryReader, FMemoryWriter 형태로 제공한다. #include "Serialization/MemoryWriter.h" #include "Serialization/MemoryReader.h" void SerializationExamples::BaseExample() { UE_LOG(LogTemp, Log, TEXT("BaseExample Begin")); // write data to memory TArray BufferArray; FMemory..

게임 엔진/Unreal

[Unreal] [Editor] Slate를 이용한 에셋 경로 설정 다이얼로그 제작

Asset Path Pick Dialog 예제 다음 코드로 에셋의 경로를 가져오는 다이얼로그를 띄울 수 있다. if문 내부에서 다이얼로그가 닫히고, 가져온 경로를 사용할 수 있다. FString NewNameSuggestion = FString(TEXT("Suggestion")); FString PackageNameSuggestion = FString(TEXT("/Game/")) + NewNameSuggestion; FString Name; TSharedPtr PickAssetPathWidget = SNew(SDlgPickAssetPath) .Title(LOCTEXT("MyTitleName", "Choose Your Location")) .DefaultAssetPath(FText::FromString(P..

게임 엔진/Unreal

[Unreal] [Editor] [Example] Slate 예제 1

Custom Slate Class 만들기 Slate를 이용한 커스텀 클래스 ui 제작 예제이다. 참고 영상 https://www.youtube.com/watch?v=jeK6DPB5weA MyPlugin.Build.cs ... PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" }); ... SMainMenuWidget.h // Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "SlateBasics.h" #include "SlateExtras.h" class MENU_API SMainMenuWidget..

게임 엔진/Unreal

[Unreal] [Editor] [Example] Slate 예제 2

Slate Samples Unreal editor ui framework인 slate에 대한 예제이다. SButton #include "Widgets/Input/SButton.h" TSharedPtr FMyPluginModule::Create() { return SNew(SButton) .Text(WidgetText) .OnClicked(FOnClicked::CreateRaw(this, &FMyPluginModule::OnClickButton)); } FReply FMyPluginModule::OnClickButton() { UE_LOG(LogTemp, Warning, TEXT("OnClickButton")); return FReply::Handled(); } SAssetSearchBox // "Edit..

게임 엔진/Unreal

[Unreal] [Editor] Unreal Plugin 제작 방법

Plugin Start Unreal plugin 시작방법 예제이다. 1. 메뉴바 -> 편집 -> 플러그인 2. 오른쪽 하단 새 플러그인 클릭 3. 에디터 툴바를 사용하는 "에디터 툴바 버튼"으로 플러그인 생성 (MyPlugin) 4. 프로젝트 재시작 시 에디터 툴바에 MyPlugin을 확인할 수 있음 5. 플러그인 소스는 visual studio 프로젝트에서 수정할 수 있음 모듈 기본 코드 Header #pragma once #include "CoreMinimal.h" #include "Modules/ModuleManager.h" class FToolBarBuilder; class FMenuBuilder; class FMyPluginModule : public IModuleInterface { publi..

게임 엔진/Unreal

[Unreal] Animation Notify를 이용한 충돌처리 (AnimNotify, Collision)

Collision by Animation Notify 애니메이션 notify를 통해 캐릭터 객체의 공격 궤적에 따른 충돌처리 예제이다. Header // Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "GameFramework/Character.h" #include "MyCharacter.generated.h" class UStaticMeshComponent; UCLASS() class ANIMATIONRETARGET_API AMyCharacter : public ACharacter { GENERATED_BODY() public: /..

게임 엔진/Unreal

[Unreal] Physics Body의 기하 정보를 이용한 충돌처리

Physics Collision with AggregateGeom Shapes 캐릭터가 공격할때 오른손 캡슐에 의한 충돌판정을 위한 예제이다. Physics Asset 먼저 충돌판정에 사용할 BodyInstance이다. 이후 코드를 통해 이 BodyInstance의 궤적에 따른 충돌을 판정할 것이다. Header #pragma once #include "CoreMinimal.h" #include "GameFramework/Character.h" #include "MyCharacter.generated.h" class UStaticMeshComponent; UCLASS() class ANIMATIONRETARGET_API AMyCharacter : public ACharacter { GENERATED_BO..

게임 엔진/Unreal

[Unreal] [Example] 콘솔 커맨드 제작 방법 (Console Command)

Console Command Unreal 콘솔 커맨드 관련 예제이다. Source #include "HAL/IConsoleManager.h" ... // call this from start - ex) gamemode being void Utility::InitConsoleCommand() { FConsoleCommandWithArgsDelegate Delegate; Delegate.BindStatic(&Utility::ConsoleCommand); IConsoleManager::Get().RegisterConsoleCommand( TEXT("insooneelifeCmd"), TEXT("insooneelife test cmd"), Delegate); } // this is static function v..

게임 엔진/Unreal

[Unreal] 디버깅용 드로워 이용 방법 (Draw Debug)

Debug Draw Unreal engine 개발 과정에서 화면상에 원하는 도형을 그려서, 디버깅을 수월하게 도와주는 함수들에 대한 예제이다. Draw Debug #include "DrawDebugHelpers.h" ... void Examples::DebugDrawExample(UWorld* World) { FVector StartOffset = FVector(0, 0, 200); FVector LocationOne = FVector(0, 0, 600) + StartOffset; FVector LocationTwo = FVector(0, -600, 600) + StartOffset; FVector LocationThree = FVector(0, 600, 600) + StartOffset; FVector..

게임 엔진/Unreal

[Unreal] [Example] 데이터 이용 방법 (DataAsset)

Data Asset Unreal engine에서 파일에 저장된 데이터를 읽어오거나, 파일로 데이터를 저장하는 형태로 데이터를 사용해야 하는 상황이 생길 수 있다. 이러한 상황에서 엔진에서 지원하는 data asset을 이용하면 효과적이다. Data asset을 이용하기 위해서 먼저 사용하고자 하는 data 형태를 c++로 작성한다. Data Asset 정의하기 #include "Engine/DataAsset.h" UCLASS() class TESTWORLD_API UCustomDataAsset : public UPrimaryDataAsset { GENERATED_BODY() public: UPROPERTY(EditAnywhere) FString itemName; UPROPERTY(EditAnywhere)..

AlgorFati
'Unreal' 태그의 글 목록