본문 바로가기

Unreal

(16)
캡슐화란 대체 뭘까.. 멍청일기 최근에 멍청 일기 정리. 언리얼의 UIAnimation 은 무겁고, 대응되는 에셋이 필요하니, 위젯의 위치 등을 코드로 제어하여 애니메이션을 재생할 수 있게 해달라는 일을 받았다. https://github.com/benui-dev/UE-BUITween/tree/master GitHub - benui-dev/UE-BUITween: Unreal 4 UMG UI tweening plugin in C++ Unreal 4 UMG UI tweening plugin in C++. Contribute to benui-dev/UE-BUITween development by creating an account on GitHub. github.com 이건 그것을 구현해둔 오픈소스 플러그인이다. 사용예제는 다음과 같았다. ..
언리얼의 모듈이란.. Build.cs Uproject Target.cs 1. 모듈이란 - 내가 느낌상 이해한 것 모듈 : dll 빌드하는 단위. ___ API 단위임 (같은 모듈이면 같은 API) 이 클래스의 코드는 ubt에 의해서 이 이름의 dll에 뽑힙니다~~ https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/ProgrammingWithCPP/Modules/ Unreal Engine Modules Modules are the building blocks of Unreal Engine's software architecture. You can organize your code into modules to create more efficient and maintainable projects. docs.unreale..
UE4) 모바일에서는 Hover이벤트 들어오지 않는다. 커서가 없는데 호버 들어오는것도 이상하긴 하지.... 호버 쓸 거면 Hold 중 2D영역 충돌체크 하라고..
데디에서 스폰 할 때 특정 클라에만 설정..? Spectactor Pawn을 데디에서 접속한 클라이언트 수 만큼 스폰했다. (스폰된 객체가 리플리케이트 된 이후에 NM_Client에서 불릴 )Spectactor Pawn 클래스의 BeginPlay에서 Initialize를 해주었고, 그걸 PlayerState에 등록을 해주었는데 리플리케이트 순서가 클라들간에 보장이 되지 않아서, 간헐적으로 Spectator Pawn의 인풋이 클라간에 거꾸로 들어가는 경우가 있었다. 1. SpawnActor할 때 Owner를 PlayerController로 설정해줘서 해결했다. 2. 혹은 Replicate 컨디션을 COND_OwnerOnly로 설정해도 된다.
Widget이 NativeTick() 돌지 않을 때 void UUserWidget::NativeConstruct() { Construct(); UpdateCanTick(); } void UUserWidget::UpdateCanTick() { TSharedPtr SafeGCWidget = MyGCWidget.Pin(); UWorld* World = GetWorld(); if(SafeGCWidget.IsValid() && World) { // Default to never tick, only recompute for auto bool bCanTick = false; if (TickFrequency == EWidgetTickFrequency::Auto) { // Note: WidgetBPClass can be NULL in a cooked build, if t..
Jam's Tip APlayerController* UUserWidget::GetOwningPlayer() const { return PlayerContext.IsValid() ? PlayerContext.GetPlayerController() : nullptr; } template TPlayerState* GetOwningPlayerState(bool bChecked = false) const { if (auto Controller = GetOwningPlayer()) { return !bChecked ? Cast(Controller->PlayerState) : CastChecked(Controller->PlayerState, ECastCheckedType::NullAllowed); } return nullptr; } ..
#pragma once(수정필요) 오늘 회사에서 #pragma once때문에 컴파일 에러로 난리가 났어서 정리하는 글 난리가 났던 이유 1. 파일 A는 #pragma once 전처리기와 함께 파일B를 include 하고 있었음 2. (추정) 파일A를 간접적으로 참조하는 파일 C에서도 파일B를 include 3. (추정) #pragma once가 파일A의 include B를 날려버림 4. 컴파일에러가 났지만 비주얼스튜디오는 파일A가 아닌 파일B의 변수D를 원인으로 지목함 (파일A 전혀 지목X) 한 시간 정도... svn 업뎃 받은 모두는 아무 일도 할 수 없었다. include를 전방선언으로 바꿔주니까 문제 해결! Pragma once docs.microsoft.com/en-us/cpp/preprocessor/once?view=msvc-1..
데디케이트 서버에서 스탯 관리(수정필요) 언리얼에서 제공하는 RPC나 리플리케이션 관련 함수들은 클라이언트에서 데디케이트서버로 직접 데이터를 전송한다. 하지만 그렇게 하면 Transient한 전송이기도 하고, 검증할 수 없기 때문에 스탯과 같은 유로컨텐츠는 신뢰할 수 있는 검증을 거쳐야 하기 때문에 "게임서버"를 반드시 거쳐야 한다. 대부분의 Receiver들은 CD 혹은 CG이지만 DedicatedReceiver에서는 GD 프로토콜을 관리하기 때문에 스탯, 아이템 관련 프로토콜은 해당 리시버에서 관리해줘야 한다.