전체 글 516

[Unreal5] 데이터관리 (GameplayeTags, AssetManager, DataSet)

GameplayTags언리얼 엔진에서 게임 내에서 사용되는 태그 시스템입니다. 이는 게임 객체에 추가 정보를 부여하고 분류하는 데 사용됩니다. 예를 들어, 캐릭터, 아이템, 스킬 등에 대해 특정 기능이나 카테고리를 할당하고 식별하는 데 사용된다. 사용방법.Build.cs 파일에 GameplayeTags를 추가한다.PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "EnhancedInput", "GameplayeTags" }); 헤더파일과 CPP파일 생성헤더파일#pragma once#include "NativeGameplayTags.h"namespace R1GameplayTags{ ..

Unreal 2024.06.05

[Unreal5] 입력 설정 함수

SetupInputComponentAPawn 클래스와 그 하위 클래스에서 사용되는 함수입니다. 이 함수는 Pawn에 대한 입력 설정을 처리합니다. AActor 클래스에서도 사용될 수 있습니다..hprotected: // Called to bind functionality to input virtual void SetupInputComponent() override; // Movement functions void MoveForward(float Value); void MoveRight(float Value);.cppvoid AMyPawn::SetupInputComponent(){ Super::SetupInputComponent(); InputComponent-..

Unreal 2024.06.05

[C++] && 오른 값 참조(move)와 보편 참조(forward)

1. 오른값 참조 (Rvalue reference)기본적으로 왼값(lvalue)은 메모리에 지속적으로 존재하는 객체를 가리키는 표현식이며, 오른값(rvalue)은 메모리에서 임시로 생성되거나 이동할 수 있는 객체를 가리키는 표현식입니다.오른값 참조는 기존의 왼값 참조와 구분하기 위해 Type&& 형태로 표기됩니다. 객체의 내용을 다른 객체로 이동하여 복사 비용을 최소화하고 성능을 향상시키는 기법입니다. 이를 통해 객체를 복사하는 대신 소유권을 이동시켜 효율적으로 작업할 수 있습니다.  Type&& 형태로 사용되며, Type은 임의의 타입을 나타냅니다. 오른값 참조는 오른값(임시 객체나 이동 가능한 객체)에만 바인딩됩니다.#include #include void process(int&& value) { ..

VisualStudio/C++ 2024.06.04

[VS]Visual Studio LNK1168: 쓰기용으로 열 수 없습니다. 오류

https://learn.microsoft.com/ko-kr/cpp/error-messages/tool-errors/linker-tools-error-lnk1168?view=msvc-170 링커 도구 오류 LNK1168자세한 정보: 링커 도구 오류 LNK1168learn.microsoft.com 링커 도구오류로 파일이 사용 중이고 파일 핸들이 다른 프로세스에 의해 잠겨 있거나 파일 또는 파일이 있는 디렉터리나 네트워크 공유에 대한 쓰기 권한이 없을 때 발생한다. 즉 프로세스가 종료되지 않고 계속 돌아가고 있기 때문에 발생한다.프로세스를 제거해주면 해결된다. 1. cmd창에 tasklist 입력2. cmd 창에 ctrl+f를 하여 찾기를 열어 프로세스 명을 입력하고 찾고자하는 프로세스 PID를 찾는다.3...

VisualStudio 2024.06.04

[Unreal5] Input Action와 Input Mapping Context 사용방법

Input Action 플레이어의 입력을 처리하기 위한 중요한 구성 요소로 게임 내에서 키보드, 마우스, 게임패드 등 다양한 입력 장치를 통해 발생하는 이벤트를 간편하게 관리하고 처리할 수 있습니다. Value TypeValue Type 설명Digital설명: 디지털 입력은 이진 입력입니다. 즉, 입력이 참(True) 또는 거짓(False)인 경우를 처리합니다. 키보드의 키 누름, 마우스 버튼 클릭, 게임패드 버튼 누름과 같은 입력에 사용됩니다.예: 스페이스바를 눌러 점프하는 동작, 마우스 왼쪽 버튼을 눌러 총을 쏘는 동작. UEnhancedInputComponent->BindAction(JumpAction, ETriggerEvent::Triggered, this, &AMyCharacter::Jump);..

Unreal 2024.06.03

[Unreal5] Component 추가 및 속성 변경

구조헤더 UPROPERTY(Category = Character, VisibleAnywhere, BlueprintReadOnly) TObjectPtr CapsuleComponent; UPROPERTY(Category = Character, VisibleAnywhere, BlueprintReadOnly) TObjectPtr Mesh; UPROPERTY( VisibleAnywhere, BlueprintReadOnly) TObjectPtr SpringArm; UPROPERTY( VisibleAnywhere, BlueprintReadOnly) TObjectPtr Camera;CPPCreateDefaultSubobject는 클래스의 서브 오브젝트를 생성하는 데 사용되는 함수입니다. 이 함수는 주로 Actor나 ..

Unreal 2024.05.30

[Unreal5] 특정 조건에 맞는 액터를 찾기 및 이동

Pawn 찾기GetPawn()현재 컨트롤러가 소유하고 있는 Pawn에 대한 참조를 가져오는 역할을 합니다. APawn* ControlledPawn = GetPawn();조건에 맞는 액터 찾기UGameplayStatics::GetActorOfClassUGameplayStatics::GetActorOfClass는 월드 내에서 지정된 클래스의 첫 번째 인스턴스를 반환하는 함수입니다. 주로 특정 클래스의 액터가 하나만 존재하거나, 첫 번째로 발견된 액터만 필요할 때 사용됩니다.AMyActorClass* MyActor = Cast(UGameplayStatics::GetActorOfClass(GetWorld(), AMyActorClass::StaticClass()));if (MyActor){ // MyActo..

Unreal 2024.05.28

[Unreal5] 오브젝트 Load 방법 및 생성

TSubclassOf와 ObjectPtrTSubclassOf지정된 기본 클래스에서 파생된 클래스만 참조하는 걸 보장한다.ObjectPtrUnreal Engine 5에서 도입된 새로운 스마트 포인터 타입입니다. 이 포인터는 UObject 참조를 더 안전하고 효율적으로 관리하기 위해 설계되었습니다. TObjectPtr는 기존의 UObject* 대신 사용할 수 있다. UPROPERTY() TObjectPtr Actor; UPROPERTY() TSubclassOf ActorClass;//AR1Actor를 상속받은 모든걸 담을 수 있다. ConstructorHelpers::FClassFinder (초기화 시점 사용)ConstructorHelpers::FClassFinder는 주로 UClass 타입의 클래스를 로드..

Unreal 2024.05.28

[C#] is 와 as

C#에서 is와 as 키워드는 타입 검사를 수행하고 타입 변환을 안전하게 처리하는 데 사용됩니다. 이 키워드들은 특히 상속 관계에 있는 객체를 다룰 때 유용합니다.is 키워드is 키워드는 객체가 특정 타입인지 확인할 때 사용됩니다. 객체가 해당 타입이거나 해당 타입에서 파생된 타입이면 true를 반환하고, 그렇지 않으면 false를 반환합니다. 또한, C# 7.0부터는 is 키워드를 사용하여 변환된 결과를 새로운 변수에 할당할 수도 있습니다.class Base { }class Derived : Base { }class Program{ static void Main() { Base b = new Derived(); if (b is Derived) { ..

VisualStudio/C# 2024.05.27

[C++서버] IOCP(Completion Port) 모델

Overlapped 콜백기반은 비동기 입출력 함수가 완료가 되면 스레드마다 있는 APC 큐에 일감이 쌓인다.Alertable Wait 상태로 들어가면 APC큐를 전체 비운다. (콜백 함수 호출)APC큐는 쓰레드마다있기 때문에 멀티 스레드 환경에서 적절하게 배분하는데 어려움이 있다.( Alertable Wait 상태로 들어가 APC큐를 비워야 하기 때문이다.)  또 한 Alertable Wait 계속 호출하는 부담이 있다. Overlapped  이벤트 방식으로는 소켓과 이벤트를 1대 1로 대응해야 하고 그리고 감시할 수 있는 수량도 64개 밖에 되지 않기 때문에 많은 수의 이벤트를 관찰하기 어렵다.  이런 문제를 보안하기 위해IOPC(Completion Port) 방식이 나오게 된다. IOPC모델은 Ove..

[C++] Overlapped모델 (비동기 + 논블로킹)

Overlapped 콜백기반은 비동기 입출력 함수가 완료가 되면 스레드마다 있는 APC 큐에 일감이 쌓인다.Alertable Wait 상태로 들어가면 APC큐를 전체 비운다. (콜백 함수 호출)APC큐는 쓰레드마다있기 때문에 멀티 스레드 환경에서 적절하게 배분하는데 어려움이 있다.( Alertable Wait 상태로 들어가 APC큐를 비워야 하기 때문이다.)  또 한 Alertable Wait 계속 호출하는 부담이 있다. Overlapped  이벤트 방식으로는 소켓과 이벤트를 1대 1로 대응해야 하고 그리고 감시할 수 있는 수량도 64개 밖에 되지 않기 때문에 많은 수의 이벤트를 관찰하기 어렵다.  이런 문제를 보안하기 위해 IOPC(Completion Port) 방식이 나오게된다.Overlapped모델..

[C++] Select 모델과 WASEventSelect모델

Select 모델 (동기방식)Select 모델은 여러 소켓에 대한 입출력 이벤트를 감지하고 처리할 수 있도록 도와줍니다.Select 모델은 여러 소켓의 상태를 감지하고, 해당 소켓들 중에서 입력이나 출력 준비가 된 소켓을 선택하여 처리할 수 있도록 해줍니다. 이는 비동기 소켓 프로그래밍의 복잡성을 줄이면서도 다중 클라이언트를 처리하는 데 효과적입니다. select() 함수를 사용하여 소켓의 상태를 검사하고, 필요한 작업을 수행합니다.Select 모델은 단일 스레드에서 여러 소켓을 처리하기 때문에 비교적 간단하게 구현할 수 있으며, 블로킹 소켓을 사용하더라도 다중 클라이언트를 동시에 처리할 수 있습니다. 그러나 매우 많은 수의 소켓을 다루는 경우에는 비효율적일 수 있습니다. 이런 경우에는 다른 모델이나 비..

[C++] setsockopt와 Socket 설정

1. SO_KEEPALIVE (Keep-Alive 설정)bool enable = true;::setsockopt(serverSocket, SOL_SOCKET, SO_KEEPALIVE, (char*)&enable, sizeof(enable));목적: 주기적으로 연결 상태를 확인합니다.설명: TCP 연결이 유효한지 주기적으로 확인합니다. 상대방이 갑작스럽게 연결을 끊어도 TCP 프로토콜을 통해 연결 상태를 확인할 수 있습니다.2. SO_LINGER (지연 닫기 설정)LINGER linger;linger.l_onoff = 1;linger.l_linger = 5;::setsockopt(serverSocket, SOL_SOCKET, SO_LINGER, (char*)&linger, sizeof(linger));목적..

[C++] 블로킹방식 TCP/IP 소스

Client소켓 생성 (Socket Creation)클라이언트 소켓을 생성합니다.  AF_INET은 IPv4, SOCK_STREAM은 TCP를 의미합니다.SOCKET clientSocket = ::socket(AF_INET, SOCK_STREAM, 0);서버에 연결 (Connect)서버의 IP 주소와 포트 번호로 연결 요청을 보냅니다. if (::connect(clientSocket, (SOCKADDR*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR){}전체 코드#include "pch.h"#include #include "CorePch.h"#include #include #include #pragma comment(lib, "ws2_32.lib")int main..

[Unreal5]GameInstance와 GameModeBase

https://docs.unrealengine.com/4.26/ko/InteractiveExperiences/Framework/QuickReference/ 게임플레이 프레임워크 간단 레퍼런스게임의 프레임워크를 이루는 게임 규칙, 캐릭터, 컨트롤러, 유저 인터페이스 등에 대한 클래스 간단 개요입니다.docs.unrealengine.com GameInstanceGameInstance는 게임의 전반적인 상태를 관리합니다. 게임이 실행되는 동안 종료되지 않으며, 레벨 간의 전환에도 유지됩니다. 싱글톤 역활전역 데이터 관리: 게임 전반에 걸쳐 유지되어야 하는 데이터를 저장합니다. 예를 들어, 플레이어의 프로필, 설정, 또는 레벨 간에 공유되는 데이터를 관리합니다.게임 세션 관리: 멀티플레이어 세션이나 네트워크 연..

Unreal 2024.05.22

[Unreal5] UObject와 Reflection

https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/Objects/ 오브젝트기본 게임플레이 요소인 Actor 와 Object 에 대한 설명입니다.docs.unrealengine.com UObjectUObject를 상속 받으면 Reflection System에 의해 UHD가 실행되어 Uclass 객체를 만들어주고 Uclass 객체 내부에 CDO라는 객체 샘플 사본을 하나 만들어 두 개가  준비가 되게하여 메모리를 관리한다. UObject는 언리얼 엔진의 대부분의 객체 유형의 기본 클래스로 언리얼의 모든 오브젝트는 UObject를 상속받는다. Uobject를 상속받은 오브젝트를 객체..

Unreal 2024.05.22

[C++] 포인터와 참조

포인터포인터는 메모리 주소를 저장하는 변수로 변수의 주소를 갖는 하나의 타입이다. 포인터의 운영체제의 크기에 따라 4바이트 혹은 8바이트로 나뉜다.포인터 기본포인터는 타입 뒤에 *을 붙여 선언하고 &를 사용하여 주소를 추출해 포인터 변수에 담는다.포인터 변수의 원본 값을 변경하기 위해서는 *을 붙여 변수 값을 수정할 수 있다. 이때 *을 포탈이라고 생각하고 주소를 가지고 있는 포인터 변수의 주소를 이용해 원본데이터로 접근하여 데이터를 변경해 준다. int num = 10; // 정수 변수 선언 및 초기화 int *ptr; // 포인터 변수 선언 ptr = # // num 변수의 주소를 포인터에 할당 // 포인터를 통해 num 변수의 값을 출력 std::cout 포인터 함수포인..

VisualStudio/C++ 2024.05.13

[OpenGL] Viewport와 Scissor Box

WC는 다양한 디바이스의 디스플레이 해상도와 무관하게 그림을 표현할 수 있습니다.NDC는 해상도에 맞춰서 일일이 그림을 만드는 작업을 하는 것보다는 디바이스 해상도를 무시해 버리고 일단 마이너스 1에서 플러스 1까지 가는 어떤 그림을 만드는 것이다.OpenGL의 뷰포트(Viewport)는 OpenGL의 출력 영역을 나타낸다. 보통은 window전체를 사용하지만 window 내의 직사각형 영역을 미니맵처럼 따로 설정 가능 합니다. 즉 렌더링 된 이미지가 표시될 프레임버퍼의 영역을 정의합니다.뷰포트는 윈도 내에서 직사각형 영역이 되어야 되기 때문에 정수좌표계를 가져야 합니다. 그래서 정수 좌표계를 갖는 wc좌표계를 갖게 됩니다. 즉 프레임버퍼의 영역은 WC(Window Coordinate)를 사용하며 어떠한..

OpenGL 2024.05.10

[AI] 임베딩(Embedding)

임베딩기법은 자연어 처리를 위한 기법중 하나로 머신러닝 알고리즘을 쓸 때 머신러닝 알고리즘은 어떤 문자형 데이터를 처리할 수 없기 때문에 인티저 인코딩이나 원핫 인코딩 같은 형태로 벡터 표현 형태로 그 텍스트 데이터를 변경을 수행해 주었어야만 했다. 하지만 주로 사용하는 원핫 인코딩을 사용할 경우 여러 가지 문제점들이 있게된다. 첫 번째로는 데이터 표현형태가 Sparse(희박하다)해진다는 문제점이 있다. 만약 10000개의 단어가 들어있을 때 1000개의 단어에 9999에는 0이들어있고 하나의데이터에 1이 들어있는 문제가있다. 이런 문제를 해결하기 위해 Sparse한 one-hot encoding의 데이터 표현을 Dense(빽빽한)한 표현 형태로 변환하는 기법이다. 이를 위해서 원본 데이터에 Dense한..

AI 2024.05.09

[OpenGL] orthographic프로젝션와 Perspective프로젝션

Orthographic Projection (직교 투영):Orthographic projection은 객체를 카메라에서 동등한 비율로 투영합니다. 즉, 원근감이 없는 투영입니다.이는 3D 객체를 2D 화면에 표시할 때 크기만 변경되고 모양은 유지되는 것을 의미합니다.이는 일반적으로 2D 렌더링, CAD 응용 프로그램 또는 게임에서의 2D 스프라이트와 같은 경우에 유용합니다.Orthographic projection 행렬을 만들 때는 glOrtho() 함수를 사용합니다.void glOrthoRH(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble nearVal, GLdouble farVal);void glOrthoLH(GLdoubl..

OpenGL 2024.05.08