Unreal51 AttributeSet이 변경되면 자동 호출되는 함수들~ AttributeSet와 바인딩 되는 것은 위젯컨트롤러의 함수이다. 그리고 그 바인딩 된 위젯컨트롤러의 함수 안에서는 멤버로 가지고 있는 델리게이트들을 실행한다. 위젯은 멤버 변수로 가지고 있는 위젯컨트롤러을 참조하여 public인 델리게이트을 참조하여 자신의 UI상태을 갱신하는 함수와 바인딩 한다. 그래서 AttributeSet값이 변경되면 위젯컨트롤러의 바인딩 된 함수가 자동으로 호출될 것이고 이어서 그 함수안의 델리게이트가 호출되어 결국은 델리게이트에 바인딩 된 위젯의 UI상태 갱신 함수가 실행될 것이다. 이때 위젯컨트롤러는 위젯을 참조하고 있지 않다. 위젯컨트롤러가 참조하는 것은 AttributeSet일 뿐이다. 하지만 위젯은 위젯컨트롤러의 델리게이트을 사용하기 위해 위젯컨트롤러을 참조하고 있다. 2023. 12. 16. Widget와 WidgetController의 연동 Widget은 WidgetController의 참조을 가지고 있다. WidgetController는 Widget의 참조을 가지고 있지 않다. 대신 WidgetController은 PlayerController, PlayerState, AbilitySystemCompoment, AttributeSet의 참조을 가지고 있다. 그래서 AttributeSet의 속성 값들이 갱신 된다면 WidgetController의 브로드캐스트 함수 호출을 통해 WidgetController가 가지고 있는 델리게이트들을 실행시켜 주면 된다. 그리고 이 WidgetController의 델리게이트들에 바인딩 처리되는 로직은 Widget에 있다. WidgetController의 델리게이트 멤버들이 public이므로 Widget함수에.. 2023. 12. 15. 블루프린트에서 SafeDivide 노드은 분모가 0이면 값을 0으로 반환해 준다. 2023. 12. 14. Unreal에서 GPU LightMass 사용하기 참고 - https://docs.unrealengine.com/5.1/ko/gpu-lightmass-global-illumination-in-unreal-engine/ GPU 라이트매스 글로벌 일루미네이션 프리컴퓨티드 라이팅 데이터를 생성하는 GPU 기반 시스템을 살펴봅니다. docs.unrealengine.com 2023. 12. 13. Unreal에서 셰이더 컴파일 속도 높이기 참고 - https://blog.naver.com/PostView.naver?blogId=hyper1234&logNo=222941764559 2023. 12. 13. Unreal의 위젯 블루프린트에서 여러 위젯들을 겹쳐 쌓아서 출력하고 싶다면 먼저 오버레이(Overlay)을 추가해 주어야 한다. Unreal의 위젯 블루프린트에서 여러 위젯들을 겹쳐 쌓아서 출력하고 싶다면 먼저 오버레이(Overlay)을 추가해 주어야 한다. 그리고 그 오버레이의 자식으로 위젯들을 추가해 주면 된다. 2023. 12. 12. Unreal의 위젯 블루프린트에서 위젯의 모양을 수정하고 싶은 경우 Desired로 디자이너 창을 설정해 준다. Unreal의 위젯 블루프린트에서 위젯의 모양을 수정하고 싶은 경우 Desired로 디자이너 창을 설정해 준다. 그래야 우측 디테일 창에서 설정하는 값들이 컴포넌트에 적용이 되어 보여진다. 2023. 12. 12. ShowDebug 콘솔 명령으로 게임 어빌리티 시스템 디버깅 참고 - https://devjino.tistory.com/376 2023. 12. 11. Unreal에서 C++와 블루프린트간의 실행 순서 언리얼에서 C++이 블루프린트의 근간이지만 실제로 함수 호출은 블루프린트에서 먼저 이루어진다. 아래는 액터가 생성될 떄의 호출 순서이다. 보면 알겠지만 블루프린트의 노드가 먼저 호출되고 C++함수가 호출됨을 알 수 있다. 액터에서 C++, Blueprint 실행 순서 C++ 생성자 Blueprint의 BeginPlay C++ BeginPlay Blueprint의 EndPlay C++ EndPlay C++보다 블루프린트가 먼저 호출되었습니다. 액터, 퍼시스턴트 레벨, 서브 레벨 실행 순서 액터를 영구 레벨에 배치하면, 액터의 BeginPlay 퍼시스턴트 레벨 BeginPlay 서브 레벨 BeginPlay 서브 레벨 EndPlay 액터의 EndPlay 퍼시스턴트 레벨 EndPlay BeginPlay는 퍼시스.. 2023. 12. 8. Unreal에서 포스트 프로세싱 볼륨에 머터리얼 설정하기 2023. 12. 5. Unreal의 프로젝트에서 포스트 프로세싱을 위해 스텐실 버퍼에 읽고 쓰게 설정하기 2023. 12. 5. Unreal에서 추가한 PostProcessVolume이 레벨 전체에 적용되게 하기 디테일 창에서 "무한 규모(언바운드)"을 체크해 주면 해당 레벨 전체에 대해 포스트 프로세싱이 적용된다. 2023. 12. 5. UE5에서 PlayerStart 추가하기 2023. 12. 4. Unreal에서 로테이터(Ratator) 값으로 부터 Forward벡터와 Right벡터 얻기 1.해당 액터나 컨트롤러 로테이션의 Yaw값을 이용해 Yaw로테이터을 생성한다. const FRotator Rotation = GetControlRotation(); const FRotator YawRotation(0.f, Rotation.Yaw, 0.f); 2.Yaw 로테이터을 행렬 연산하여 Forward벡터와 Right벡터을 얻는다. const FVector FowardDir = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X); const FVector RightDir = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y); 2023. 12. 3. UE5에서 향상된 입력을 사용하려면 Build.cs에 "EnhancedInput"모듈을 추가해 주어야 한다. 2023. 12. 1. Unreal에서 참조할 변수을 검증된 노드로 변환하기 2023. 11. 30. 애니메이션 블루프린트도 베이스가 되는 블루프린트을 만들어 상속하여 사용할 수 있다. 그럴경우 템플릿으로 애니메이션 블루프린트을 생성해 주어야 한다. 1.애니메이션 블루프린트 템플릿 만들기 2.상속받아 새로운 블루프린트 생성 2023. 11. 30. Unreal 캐릭터 무브먼트의 속도 벡터로 부터 현재 속도 얻기 2023. 11. 30. Unreal C++에서 헤더 파일의 참조 경로 설정 만약 Character라는 하위 폴더가 있고 그 폴더 안에 MyCharacter.h파일이 있다면 아래와 같이 Build.cs파일에 폴더 이름을 추가해 준다. 그러면 MyCharacter.h을 선언시 Character 폴더 경로을 사용할 필요 없다. 헤더 파일명만 선언해 주면 된다. #include " MyCharacter.h " *.Build.cs에 아래와 같은 형식으로 추가해 주면 된다. PrivateIncludePaths.Add("Character"); PrivateIncludePaths.Add("Character/Enmey"); 참고 - https://devjino.tistory.com/212 2023. 10. 25. 패키징 한 실행 파일을 창 모드로 실행하기 패키징 한 후 Saved 폴더에서 GameUserSettings.ini파일을 찾아서 [/Script/Engine.GameUserSettings]섹션의 해상도 관련 설정들을 수정해 준다. 2023. 8. 28. 프리컴파일러 디렉티브 지시문 언리얼 엔진 C++코드에서 조건부 컴파일을 하고자 하거나 특정 동작을 수행하게 지시하고자 할 떄 아래와 같은 지시문을 사용한다. #pragma once - 같은 헤더 파일이 중복 사용되는 것을 방지 하기 위해 사용 #ifdef, #ifndef, #endif - 조건부 컴파잉을 하고자 할 때 사용 #define - 매크로을 정의 하거나 가독성을 높이기 위해 사용 2023. 8. 27. AsyncTask와 UnrealTaskGraph에 대해~ AsyncTask와 UnrealTaskGraph은 둘다 비동기 태스크 작업을 행하지만 작업의 성격에 따라 달리 사용해야 한다. - AsyncTask - 비동기 어셋 로딩 같은 단순한 비동기 작업에 적합하다. - UnrealTaskGraph (ParallelFor, ParallelAsync) - AI 병렬 처리, 물리학 계산, 복잡한 데이터 처리 같이 디테일한 스레드 제어가 필요한 비동기 작업에 적합하다. 2023. 8. 24. 언리얼에서 대량의 AI 캐릭터 처리 - 언리얼 엔진은 내부적으로 이미 멀티 쓰레드로 AI에 관련된 기능들을 처리하고 있기 때문에 프로그래머가 따로 저 수준의 작업을 할 필요는 없다고 한다. 2023. 8. 24. 언리얼 GPU 시각화 툴 - GPU 시간화 툴을 왜 사용하는가? GPU 시각화 툴은 GPU가 하는 작업들에 대해 얼만큼의 시간을 소모하는지 구체적으로 보여주기 때문에 어떤 렌더링 요소가 시간을 얼마나 잡아 먹는지 쉽게 파악할 수 있어 그래픽 적인 최적화에 유용하게 사용할 수 있다. 예를 들어 포인트 라이트가 다른 것들 보다 많은 처리 시간을 잡아 먹는다고 파악되면 해당 포인트 라이트을 아웃라이너에서 찾아서 설정이 어떻게 되어 있는지 파악하고 문제가 있을 시 수정하면 된다. GPU 시각화 툴은 GPU에서 하는 작업에 대한 프로파일링을 할 수 있다. - Ctrl + Shift + , 키을 누르면 실행된다. - Scene버튼을 클릭하면 상세 페이지를 볼 수 있다. - 하단의 탭에서 경과 시간(ms)을 클릭하여 시간 순으로 정렬하여 어.. 2023. 8. 24. 언리얼 빌드 환경 확인하기 참고 링크 - https://devjino.tistory.com/366 2023. 8. 23. 언리얼 인사이트01 (Unreal Insights) 참고1 - https://youtu.be/ssBKLh0fDzY 참고2 - https://youtu.be/af_M38Z325I 1.언리얼 인사이트 프로그램을 실행 시켜 놓는다. 2.게임을 실행한다. 3.언리얼 인사이트의 커넥션 탭에서 Connect 버튼을 클릭하여 게임에 연결한다. (보통은 인사이트가 실행된 상태에서 게임을 실행하면 자동으로 연결되어 추적하기 시작한다.) 4.Trace Store창에서 해당 게임이 추적되고 있는걸 확인할 수 있다. 아래는 에디터을 실행한 경우이다. 에디터을 실시간(Live)로 추적하고 있는 걸 볼 수 있다. 5.프로파일링 하고자 한다면 해당 항목을 선택하고 하단의 Open Trace버튼을 클릭한다. 6.그러면 이와같이 프로파일링 창이 뜬다. 7.추적을 중지시키고 싶다면 콘솔.. 2023. 8. 23. 언리얼 블루프린트 흐름제어 노드들 참고 링크 - https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/Blueprints/UserGuide/FlowControl/ 플립 플롤 (Flip Flop) - 실행할 때 마다 내부 boolean 변수가 토글되어 A와 B 핀이 순차적으로 실행된다. 첫 번째 실행은 A핀이 실행 두번째 실행은 B핀이 실행 그리고 세 번째 실행은 다시 A핀이 실행된다. 이렇게 노드을 호출할 때 마다 A와 B가 번갈아 실행된다. 기존에 토글되는 기능을 만들어야 할 경우 boolean변수을 따로 만들어 토글 기능을 구현해 주어야 했는데 이 노드는 자체적으로 토글 기능을 가지고 있다. 멀티 게이트(Multi Gate) - 노드을 호출할 때 마다 Out0핀에서 다음 순서의.. 2023. 8. 23. 언리얼 엔진 버전 단위로 DDC 경로 설정해 주기 언리얼 엔진 에디터의 개인설정 창에서 DDC 경로을 설정하면 다른 엔진 버전에도 동일하게 설정되는 문제가 있다. 따라서 엔진 버전 마다 DDC 경로을 따로 설정하려면 언리얼 엔진의 설치 폴더에서 \Engine\Config\BaseEngine.ini 파일을 열어서 직접 DDC 경로을 설정해 주면 된다. 1.먼저 [InstalledDerivedDataBackendGraph]라는 섹션을 찾는다. 2.Local의 Path에 원하는 폴더 경로을 설정해 준다. 아래의 예는 Unreal4와 Unreal5을 각각 따로 설정한 예이다. 물론 에디터의 개인설정 창에서는 DDC 경로을 모두 비워준다. 2023. 8. 22. 언리얼 최적화 01 아래 링크을 보고 공부하면서 정리한 내용입니다. https://devjino.tistory.com/m/373 큰 범위에서 작은 범위로 좁혀 가면서 분석하여 병목 지점을 찾아야 한다. 구체적으로 CPU에서 발생하는지 GPU에서 발생하는지 아니면 특정 쓰레드에서 병목 현상이 발생하는지 파악을 해야 한다. 따라서 가장 먼저 사용하는 기능은 'stat unit'라는 콘솔 명령이다. 실시간 그래프을 보고 싶다면 'stat unitgraph'라는 명령을 사용한다. 60프레임이 목표라면 프레임 간의 시간 간격은 16.66밀리 세컨드 보다 작아야 한다. 30프레임이 목표라면 프레임 간의 시간 간격은 33.33밀리 세컨드 보다 작아야 한다. 엔진 퀄리티 설정이 프렘이 큰 영향을 주기 때문에 하드웨어의 스펙에 따라 엔진 .. 2023. 8. 22. 언리얼에서 Sleep()함수을 사용해서 딜레이 주기 블루프린트에서는 Delay노드을 통해 설정한 값 만큼 시간을 지연 시킬 수 있다. C++에서는 아래와 같이 시간을 지연 시킬 수 있다. FPlatformProcess::Sleep(2.f); 2023. 8. 21. 이전 1 2 다음