분류 전체보기 37

언리얼엔진5 포트폴리오 개발일지#2(25.03.18)#5.5.4Ver

오늘은 간단하게 애니메이션을 구비하고 리타겟팅 애니메이션만 해주었다.총을 드는 애니메이션은 간단하게 팹에서 무료로 받아주고 부족한 애니메이션은 맥시모에서 다운로드 받았다.하이퍼 fps를 개발하기위해 캐릭터는 위와 같은 무료 캐릭터를 사용하였다. 5.4전까지는 애니메이션 리타겟팅이 조금 어려웠는데 뼈 부위마다 리타겟팅을 해줘야해서5.4부터는 애니메이션 리타겟팅이 매우 쉬워졌다. 교체하고 싶은 애니메이션을 드래그해서 마우스 우클릭하면 리타겟 애니메이션이 뜨는데,그걸 누르면해당 창에서 타겟 스켈레탈 선택하고 원하는 애니메이션 시퀀스 눌러서 애니메이션 익스포트하면 타겟 스켈레톤에 적용된 애니메이션이 나온다. 원래 이 스켈레톤의 애니메이션이타깃 스켈레톤의 애니메이션으로 변환이 가능하다. 너무 간단해져서 시시해졌다..

언리얼엔진5 포트폴리오 개발일지#1(25.01.22)

https://www.udemy.com/course/unreal-engine-5-cpp-multiplayer-shooter/**해당 프로젝트는 해당 강의를 기반으로 제작됩니다.** 오늘 일지는 간단하게 프로젝트를 생성하고 스팀 멀티플러그인을 연결하는 작업만 할 것이다.프로젝트 생성후에 제작한 멀티플레이 플러그인을 프로젝트 폴더에 붙여넣기.멀티플레이를 위한 플러그인에서 Online Subsystem Steam 활성화 활성화후 Config 폴더에서 DefaultEngine.ini에서마지막에 해당 기입https://dev.epicgames.com/documentation/ko-kr/unreal-engine/online-subsystem-steam-interface-in-unreal-engine해당 문서에서 기..

언리얼엔진5 C++로 정복하기(11) 언리얼엔진 5.4 DLSS 적용하기

언리얼엔진5 5.4에 DLSS 적용하는 방법을 알아보자https://developer.nvidia.com/rtx/dlss/get-started#ue-version DLSS - Download and Get StartedFind documentation and tutorials to integrate DLSS through Streamline.developer.nvidia.com위 사이트에 들어가서동의를 한뒤 UE 5.4 Download를 누르자다운로드를 받고나면 모든 파일을 압축해제 하고Plugins 폴더내에 모든 폴더들을언리얼엔진 5.4 설치폴더\Engine\Plugins\Marketplace\Nvidia 에 넣어준다 그런다음 자신이 진행중인 프로젝트를 실행하여편집 -> 플러그인으로 들어간다.그런다음 ..

언리얼 엔진 5 2024.11.13

언리얼엔진5 C++로 정복하기(10) 온라인 스팀 서비스 플러그인 정리

1. UMultiplayerSessionsSubsystem 클래스의 코드 설명  코드 설명:UMultiplayerSessionsSubsystem::UMultiplayerSessionsSubsystem(): 클래스 생성자. 델리게이트를 초기화하여 특정 이벤트가 발생했을 때 호출할 함수를 등록합니다.CreateUObject(this, &ThisClass::OnCreateSessionComplete): 델리게이트에 this 객체의 OnCreateSessionComplete 메서드를 바인딩하여 세션 생성 완료 시 호출하도록 설정합니다.IOnlineSubsystem* Subsystem = IOnlineSubsystem::Get();: 현재 프로젝트의 온라인 서브시스템(예: 스팀)을 가져옵니다.SessionInte..

언리얼 엔진 5 2024.11.12

언리얼엔진5 C++로 정복하기(9) 온라인 스팀 서비스로 멀티플레이

1. 세션 인터페이스 초기화 및 변수 선언IOnlineSessionPtr는 세션을 관리하는 인터페이스 포인터이다. 이를 통해 언리얼 엔진의 온라인 서브시스템을 사용하여 세션 생성, 검색, 참여 같은 작업을 수행할 수 있다.  2. 세션 생성 함수 (CreateGameSession)이 함수는 게임 세션을 생성하기 위한 핵심 로직이다. 세션의 유효성을 확인한 후, 이미 존재하는 세션이 있으면 삭제하고 새로 생성하고. 설정은 최대 플레이어 수, 광고 여부, 그리고 MatchType을 포함해 다양한 속성을 구성할 수 있다.  3. 세션 생성 완료 콜백 (OnCreateSessionComplete)이 함수는 세션 생성이 완료된 후 호출된다.. 성공했을 경우 디버그 메시지를 통해 세션 이름을 출력하고, Server..

언리얼 엔진 5 2024.11.07

게임 수학 (3) 삼각 함수

한 각이 직각인 직각삼각형을 이루는 세 변은 각 위치에 따라 빗변,밑변,높이라고 부른다. 한각이 직각이므로 나머지 두 각의 합이 90도가 되어야한다. 빗변과 밑변의 사잇각은 θ를 이용해 표현한다. 직각삼각형을 구성하는 세 변에서 두 변을 뽑아 각각의 비례꽌계를 나타낸 것은 삼각비 라고 한다. 삼각비에는 여러 종류가 있지만 사인sine, 코사인Cosine, 탄젠트Tangent 세가지가 가장 대표적이다. 밑변의 길이를 a, 높이의 길이를 b, 빗변의 길이를 c, 빗변과 밑변과의 사잇각을 θ 라고 할때 sin θ  = b/ccos θ = a/ctan θ = b/a직각 삼각형에서 측정할 수 있는 사잇각은 0도 보다 크거나 90도 보다 작아야한다.직각삼각형을 데카르트 좌포계상에 배치하고 사잇각의 범위를 실수 전체..

게임수학 2024.09.20

게임 수학 (2) 벡터 스칼라

벡터: 평면에서 시각적으로 의미 있는 물체를 생성하려면 평면을 구성하는 원소를 정의해야한다. 이것을 벡터라고 한다. 데카르트 좌표계: 직선의 수 집합을 수직으로 배치해 평면을 표기하는 방식곱집합의 원어: 데카르트 곱->수평으로 배치한 첫 번째 실수 집합의 미지수를 x, 수직으로 배치한 두 번째 실수 집합의 미지수를 y로 표기하고 원점을 기준으로 x축의 오른편, y축의 위편을 양의 영역을 나타낸다.->데카르트 좌표계의 한 원소는 곱집합과 동일하게 순서쌍으로 표현하며 좌표라고 부른다(coordinate) 벡터 공간: 두 개 이상의 실수를 곱집합으로 묶어 형성된 집합을 공리적 집합론의 관점에서 규정한 것벡터: 벡터 공간의 원소->공리적 집합론의 관점에서 특정한 수 집합을 지칭하지 않고 연산이 갖는 성질만 다루..

게임수학 2024.09.03

게임 수학 (1) 수와 집합

집합: 서로 구분되는 원소로 구성된 묶음 -> 소박한 집합론-> 자연수 N, 정수 Z, 유리수 U, 무리수, 실수 R, 복소수 C, 사원수 H공리: 명제 중에서 증명할 필요가 없는 기본명제->공리를 기반으로 대상을 구분하는 집합론->공리적 집합론이항 연산: 두개의 원소를 사용해 새로운 원소를 만들어냄-> 닫혀있다: 같은 집합에 속한 두 수를 투입한 이항 연산의 결과가 항상 투입한 집합에 속한다면...교환법칙: 임의의 두 수 A,B를 연산할 때 순서에 관게없이 항상 동일한 결과가 나올때A+B = B+A, A*B= B*A결합법칙: 연산이 두번이상 연속될때 앞의 연산을 먼저 계산한 결과와 뒤의 연산을 계산한 결과가 같은 성질(a+b)+C = A+(B+C), (A*B)*C= A*(B*C)분배법칙: (1) A*(..

게임수학 2024.08.28

C++ 개인 필기(15완) 복사

클래스 객체 생성시에 Warrior W -> 기본생성자 호출 Warrior W1=W ->만듦과 동시에 복사 (복사 생성자) Warrior W2 ->기본 W2=W -> 복사대입연산자 복사 생성자 + 복사 대입 연산자 -> 컴파일러가 암시적으로 만들어줌 (메모리에 있는 데이터 그대로 복사) class Warrior{ public: Sword SW; ->포인터로 하지 않을시 워리어와 검이 서로 일치하여 생성, 소멸이 같이됨. } 생명 주기 관리가 어려워진다. (클래스 내에 다른 클래스를 가질땐 포인터나, 참조 값 추천) 복사 생성자, 복사 대입 연산자 -> 주소값 즉 메모리 자체를 그대로 복사 (얕은 복사) 멤버 데이터를 비트열 단위로 복사 (메모리영역 그대로 복사) 포인터 주소값 -> 주소값을 복사 -> 동..

c++ 2024.03.04

C++ 개인 필기(14) 변환

타입 변환 유형(비트열 재구성 여부) 1. 값 타입 변환 (의미를 유지하기 위해, 원본 객체와 다른 비트열 재구성) int a=123456789 //2의 보수 float b= (float)a //부동소수점 ->1.234567e ... -> 메모리에 다른 값 구성 (비트열 재구성) 2. 참조 타입 변환 (비트열을 재구성 하지 않고 관점만 바꾸는것) int a= 123456789 ->메모리의 데이터는 같지만 (관점만 바뀌어) float b= (float)a ->엉뚱한 값 구성 ->참조 타입 변환은 포인터 타입 변환과 동일한 룰을 같는다. 안전도 분류 (1) 안전한 변환 특징) 의미가 항상 100프로 완전히 일치하는 경우 같은 타입이면서 크지만 더 큰 가방으로 이동 작은 가방 -> 큰 가방 good (업캐스팅..

c++ 2024.02.26

언리얼엔진5 C++로 정복하기(8) 객체들에게 왜 대부분 포인터가 붙을까?

언리얼엔진5 에서 c++로 코딩하다보면 헤더파일부분에서 객체를 선언할때 대부분 포인터가 붙는걸 알 수 있는데 왜 그럴까..? 언리얼 객체 관리 시스템과 관련이 있는데, UGameplayStatics나 USoundBase, UCameraComponent 와 같은 것들은 언리얼 엔진의 엑터나 엑터 컴포넌트와 같은 게임 오브젝트들로 이들은 동적으로 생성되고 관리된다.. 게임 오브젝트들은 실행 시간동안 생성되고 파괴될 수 있는데, 포인터를 사용하여 이러한 객체에 대한 참조를 유연하게 할당하고 해제할 수 가 있다. 그리고 성능 최적화 부분에서 객체는 크기가 크고 복잡한데 객체 자체를 값으로 전달하는 것보다 포인터를 전달하는것이 훨씬더 효율적인데, 포인터를 사용하면 객체의 실제 데이터를 복사할 필요 없이 객체에 접..

언리얼 엔진 5 2024.02.20

언리얼엔진5 C++로 정복하기(7) 델리게이트, 인라인

언리얼 엔진에서 델리게이트는 특정 이벤트나 상황이 발생했을때 호출될 함수들의 리스트를 관리한다. 델리게이트는 발생하는 함수들을 등록하여 이벤트 발생 시 등록된 모든 함수를 호출한다. 언리얼엔진에서는 델리게이트를 사용한다면 AddDynamic 함수를 사용하는데 이것은 언리얼 엔진의 멀티캐스트 델리게이트에 함수를 동적으로 바인딩하기 위해 사용되는 매크로이다. 함수를 AddDynamic을 사용하여 델리게이트를 바인딩 할려면 그 함수는 UFUNCITON() 매크로를 사용하여 언리얼 엔진의 리플렉션 시스템에 등록해야한다. 왜냐면 AddDynamic()이 런타임에 함수를 델리게이트에서 바인딩 하기 때문.. 언리얼로 코딩을 하다보면 가끔 FORCEINLINE 을 함수 선언 앞에 붙일때가 있다. 컴파일러에게 특정 함수..

언리얼 엔진 5 2024.02.19

C++ 개인 필기(13) 동적 할당

HEAP -> 필요할대만 사용, 필요없으면 반낪 생성, 소멸시점 관리 동적 할당 : malloc, free / new, delete, /new[], delete[] //유저 영역 (메모장 or 게임)(독립적 실행) //커널영역 (운영체제의 핵심코드 실행) //유저 영역 [ ] malloc(sizeof(void ))를 통해 메모리 낭비 해결 ->메모리 할당 후 시작 주소를 가리키는 포인터를 반환 (메모리 부족시 NULL) void * ->포인터는 포인터, 포인터를 타고가면 뭐가 있는지 모르니깐 너가 적당히 변환해서 사용해라 -> Warrior *w1=(Warrior)ptr; w1->xx 처럼 할당 malloc/free 세트 ->free(ptr) 하지 않을 시에 메모리 누수 힙 오버 플로우->유효한 힙 범위..

c++ 2024.02.14

C++ 개인 필기(12) static

struct vs class c++ 에서 struct, class 는 종이 한장 차이 struct는 기본 접근 지정자= public, class 는 private 왜? c++은 c언어에서 파생되어 발전해서 호환성을 지키기 위해서.. struct는 그냥 구조체(데이터 묶음) 표현 class 객체 지향 프로그래밍의 특징 static 변수 -> 정적=고정된, 공통적으로 모든 객체가 같은 값을 가지면.. warrior, attack=1 static int attack; ->클래스 밖에 빼는 느낌 (전역 변수) AActor::attack=1; -> 외부선언 누구나 동일한 공격을 가진다. -> warrior 클래스의 종속적 함수에 static일때 초기화 하면 .data, 안하면 .bss 영역 static -> 생명..

c++ 2024.02.13

C++ 개인 필기(11) 클래스의 연산자

Class Position 이 있을때 Position pos3 = pos1 + pos2 -> 어떻게 해야할까? 연산자 vs 함수 -> 연산자는 피연산자의 개수/타입 고정 연산자 오버로딩 이란? 우리만의 클래스에 pos1+pos2 와 같은 연산자를 지원하게 만들고 싶을때 사용 1. 연산자 함수 정의 ->함수도 멤버함수와 전역함수가 있는 것처럼 연산자 함수도 2가지 방식 존재 pos1+pos2 만들기 Postion operator+() { Position pos , x=x1+x2, y=y1+y2, return pos;} pos3= pos1+pos2 == pos3=pos.operator+(pos2) 멤버 연산자 함수 a op b 형태에서 왼쪽을 기준으로 실행 (a가 클래스여야 가능 , a 를 기준 피연산자라함..

c++ 2024.02.07