⭐ Unreal Engine
[UE] cannot instantiate abstract class
[UE] cannot instantiate abstract class
2024.05.14순수 가상함수(pure virtual function)을 선언만 하고 정의하지 않고 넘어가면 cannot instantiate abstract class 라는 에러 메시지를 발생하며 컴파일 되지 않는다. 작업하다보면 실수하고 넘어갈 수 있는 부분이기 때문에 해당 에러를 발견하면 즉시 순수 가상함수를 의심하자. cannot instantiate abstract class 문제 문제상황 아래와 같은 에러 메시지가 뜨며 컴파일 되지 않는다. 이유 및 해결방안 cannot instantiate abstract class 추상클래스를 인스턴스 생성할 수 없어 발생하는 에러다. 추상클래스는 순수 가상함수를 포함하는 클래스로 순수 가상함수는 자식 클래스에서 반드시 정의 해주어야 한다. 순수 가상함수를..
[UE] 한 주기 당 RPC 전송량 변경. MaxRPC Per NetUpdate 값 변경하기
[UE] 한 주기 당 RPC 전송량 변경. MaxRPC Per NetUpdate 값 변경하기
2024.05.13Net Update 한 주기 당 전송할 수 있는 RPC 수가 적어 RPC 적용이 느려지는 문제가 발생했다. 언리얼 엔진에서 ' Net Update 한 주기 당 전송할 수 있는 RPC 수 ' 기본값은 2다. 하지만 2는 너무 적은 값이어서 높여주는게 좋다는 결론을 얻었다. 한 주기 당 RPC 전송량 변경 문제상황 Net Update 한 주기 당 전송할 수 있는 RPC 수가 적어 RPC 적용이 느려지는 문제가 발생했다. 언리얼 엔진에서 ' Net Update 한 주기 당 전송할 수 있는 RPC 수 ' 기본값은 2 다.하지만 2는 너무 적은 값이어서 높여주는게 좋다는 결론을 얻었다. 언리얼 엔진에서 제공하는 Lyra 프로젝트에 설정된 값은 10이다. 그래서 나도 10으로 설정하였다. 해결방안 Defa..
[UE] ScriptDelegates.h: ensure( InvocationList[ CurFunctionIndex ] != InDelegate )
[UE] ScriptDelegates.h: ensure( InvocationList[ CurFunctionIndex ] != InDelegate )
2024.05.03ensure( InvocationList[ CurFunctionIndex ] != InDelegate ) 문제상황 ScriptDelegates.h 코드의 ensure( InvocationList[ CurFunctionIndex ] != InDelegate ) 부분에 Break가 걸리며 오류가 발생했다. 콜스택을 타고 추적하니 Dynamic Delegate하는 부분이 나왔다. 확인해야될 사항 위에서 발생한 문제는 Dynamic Delegate에 관련된 문제다. 해당 경우, 확인할 사항들로는Delegate 바인딩한 함수에 UFUNCTION() 을 붙였는지Delegate 바인딩을 실수로 여러번 했는지다. 해결 1. UFUNCTION 붙였는지 확인하기 - 이상없음. 2. Delegate 바인딩을 ..
[UE] C++로 작성한 구조체 DataTable의 Row Type으로 노출시키기
[UE] C++로 작성한 구조체 DataTable의 Row Type으로 노출시키기
2024.04.29C++로 작성한 구조체 DataTable의 Row Type으로 노출시키기 위해서는 public FTableRowBase의 상속을 받아야 한다. C++로 작성한 구조체 DataTable의 Row Type으로 노출시키기 문제 상황 엑셀에서 DataTable를 작성한 후 .csv 파일로 저장한다. 그리고 해당 파일을 언리얼 에디터로 부르려고 한다.하지만 Data Table 생성 시 코드로 작성한 구조체가 노출되지 않는다. 해결방안 USTRUCT(BlueprintType)struct FItem : public FTableRowBase{ GENERATED_BODY()public: UPROPERTY(EditDefaultsOnly) FText Name; UPROPERTY(EditDefaultsOnly) ..
[UE] The following modules are missing or built with a different engine version: Would you like to rebuild them now?
[UE] The following modules are missing or built with a different engine version: Would you like to rebuild them now?
2024.04.22.uproject를 더블클릭하여 언리얼 엔진 에디터를 열려고 하면 아래와 같은 문구가 나오고 에디터가 켜지지 않는다. The following modules are missing or built with a different engine version: Would you like to rebuild them now? 해당 문제가 발생했을때 해결방안을 알아보자. The following modules are missing or built with a different engine version: 문제 상황 .uproject를 더블클릭하여 언리얼 엔진 에디터를 열려고 하면 아래와 같은 문구가 나오고 에디터가 켜지지 않는다. The following modules are missing or built with..
[UE] 언리얼 C++의 TArray, TSet, TMap 자료구조 라이브러리와 활용방법
[UE] 언리얼 C++의 TArray, TSet, TMap 자료구조 라이브러리와 활용방법
2024.04.20언리얼에서 제공하는 대표 컨테이너 라이브러리의 동작 원리와 활용 방법을 예제를 통해 살펴보자.언리얼 대표 컨테이너 라이브러리 TArray, TSet 의 내부 구조 이해각 컨테이너 라이브러리의 장단점을 파악하고, 알맞게 활용하는 방법의 학습 인프런 이득우님의 '언리얼 프로그래밍 Part1 - 언리얼 C++의 이해' 강의를 참고하였습니다. 😎 [이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해] 강의 들으러 가기! 목차 언리얼 컨테이너 라이브러리 언리얼 컨테이너 라이브러리 언리얼 컨테이너 라이브러리 (Unreal Container Library, UCL)언리얼 엔진이 자체 제작해 제공하는 자료구조 라이브러리.줄여서 UCL(Unreal Container Library)라고도 함..언..
[UE] FNetDeltaSerializeInfo 사용시 레퍼런스로 넘기는 배열 매개변수는 UPROERTY로 리플리케이트 해주기
[UE] FNetDeltaSerializeInfo 사용시 레퍼런스로 넘기는 배열 매개변수는 UPROERTY로 리플리케이트 해주기
2024.04.15FNetDeltaSerializeInfo 사용시 레퍼런스로 넘기는 배열 매개변수는 UPROERTY로 리플리케이트 해주기 문제상황 인텔리센스 오류는 나지 않지만 컴파일이 실패했다. FastArrayDeltaSerialize( 첫번째 인자, 두번째 인자, 세번째 매개변수); 위의 문구를 잘 읽어보면 error C2338: static_assert failed: 'Auto deduced FastArrayItemType is invalid or differs from the specified type. Make sure that the FastArraySerializer has a single replicated array property.' 레퍼런스로 넘겨주는 첫번째 매개변수 TArray는 repl..
[UE] GAS 사용 시 서버에서만 호출되고 클라이언트에서 리플리케이션되지 않는 문제 해결하기. OnRep_ActivateAbilities() 사용으로 해결
[UE] GAS 사용 시 서버에서만 호출되고 클라이언트에서 리플리케이션되지 않는 문제 해결하기. OnRep_ActivateAbilities() 사용으로 해결
2024.04.11OnRep_ActivateAbilities 문제 상황 Skill 아이콘을 만들고 AbilitySystemComponent가 변경되면 델리게이트 브로드캐스팅으로 알려주게 만들었다. Skill 아이콘이 AbilitySystemComponent 정보와 연결되게 만드는게 목표였다. 하지만 서버에서만 호출되고 클라이언트에는 변경사항이 호출되지 않았다. 문제을 분석해본 결과, 클라이언트에도 델리게이트 브로드캐스팅을 시켜주는 함수가 추가로 필요하다는 것을 알았다. AbilitySystemComponent에 정의된 OnRep_ActivateAbilities OnRep_ActivateAbilities 함수는 FGameplayAbilitySpecContainer ActivatableAbilies의 값이 변경될 때 마다 호..
[UE Net] 캐릭터 공격 구현
[UE Net] 캐릭터 공격 구현
2024.04.10네트웍 멀티플레이를 위한 캐릭터의 공격 구현과 체력 동기화 네트웍 멀티플레이 게임 제작을 위한 기본 구현 원칙의 학습 액터 컴포넌트를 리플리케이션하는 방법의 학습 인프런 이득우님의 '언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해' 강의를 참고하였습니다. 😎 [이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해] 강의 들으러 가기! 목차 캐릭터 공격 구현 학습 목표 네트웍 멀티플레이를 위한 캐릭터의 공격 구현과 체력 동기화 캐릭터의 공격 플로우 (Standalone) 액터와 애님 인스턴스간에 수행되는 캐릭터의 공격 플로우 네트웍 멀티플레이의 구현을 위한 4원칙 1. 클라이언트의 명령은 Server RPC를 사용한다. Server RPC는 클라이언트에서 서버로 패킷..
[UE] 언리얼 프로파일링 UE Profiling
[UE] 언리얼 프로파일링 UE Profiling
2024.04.08언리얼 엔진에서 프로파일링은 게임의 성능을 분석하고 최적화하는 과정이다. 이를 통해 CPU, GPU, 메모리 사용량 등을 모니터링하여 성능 병목 현상을 파악할 수 있다. 프로파일링 결과를 바탕으로 코드를 최적화하고, 애셋을 관리하여 게임 성능을 향상시키는게 중요하다. 목차 최적화 최적화를 위해 병목지점을 찾자! CPU AI, Physics, Blueprint, Tick, DrawCall GPU Shadow, OverDraw, UI, Opaque, Lighting I / O Sequence Play, Level loading, Texture loading 네트워크 대역폭(BandWidth), 전송 지연 메모리 GC, Out of Memory 스로틀링 (throttling) 발열로 인한 가속 ..
[UE] 언리얼 C++ 설계 3 - 델리게이트 Delegate
[UE] 언리얼 C++ 설계 3 - 델리게이트 Delegate
2024.04.05언리얼 델리게이트를 사용해 클래스 간의 느슨한 결합을 구현하기 느슨한 결합의 장점과 이를 편리하게 구현하도록 도와주는 델리게이트의 이해발행 구독 디자인 패턴의 이해발행 구독 디자인 패턴을 구현하면서, 언리얼 델리게이트를 활용한 느슨한 결합의 설계 방법을 학습 인프런 이득우님의 '언리얼 프로그래밍 Part1 - 언리얼 C++의 이해' 강의를 참고하였습니다. 😎 [이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해] 강의 들으러 가기! 목차 느슨한 결합 강한 결합(Tight Coupling) 과 느슨한 결합(Loose Coupling) 강한 결합 ( Tight Coupling ) 클래스들이 서로 의존성을 가지는 경우를 의미한다.아래 예시에서 Person 클래스는 Card 클래스를 가졌..
[UE] 언리얼 C++ 설계 2 - 컴포지션
[UE] 언리얼 C++ 설계 2 - 컴포지션
2024.04.05언리얼 C++만의 컴포지션 기법을 사용해 복잡한 언리얼 오브젝트를 효과적으로 생성하자언리얼 C++ 컴포지션 기법을 사용해 오브젝트의 포함 관계를 설계하는 방법의 학습언리얼 C++이 제공하는 확장 열거형 타입의 선언과 활용 방법의 학습 인프런 이득우님의 '언리얼 프로그래밍 Part1 - 언리얼 C++의 이해' 강의를 참고하였습니다. 😎 [이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해] 강의 들으러 가기! 목차 언리얼 오브젝트의 컴포지션 컴포지션 ( Composition ) 객체 지향 프로그래밍의 설계는 상속과 컴포지션으로 나눌 수 있다.상속이란 같은 성질을 가진 부모, 자식 객체 간의 Is-A 관계만 의존해서는 설계와 유지보수가 어려움.컴포지션은 객체 지향 설계에서 Has-A ..