작성
·
128
0
//CharacterBase.h
if (!IsLocallyControlled())
{
UE_LOG(LogTemp, Log, TEXT("LocallyControlled"));
InfoBar = CreateDefaultSubobject<UWidgetComponent>(TEXT("Widget"));
InfoBar->SetupAttachment(GetMesh());
InfoBar->SetRelativeLocation(FVector(0.0f, 0.0f, 210.0f));
static ConstructorHelpers::FClassFinder<UUserWidget> InfoBarWidgetRef(TEXT("/Script/UMGEditor.WidgetBlueprint'/Game/ProjectA/Blueprints/UI/WBP_InfoBar.WBP_InfoBar_C'"));
if (InfoBarWidgetRef.Class)
{
InfoBar->SetWidgetClass(InfoBarWidgetRef.Class);
InfoBar->SetWidgetSpace(EWidgetSpace::Screen);
InfoBar->SetDrawSize(FVector2D(300.0f, 75.0f));
InfoBar->SetCollisionEnabled(ECollisionEnabled::NoCollision);
}
}
안녕하세요 교수님, 리슨 서버로 동작 시킬 때 제가 만든 InfoBar 를 로컬의 캐릭터에는 부착하지 않고 로컬이 바라보는 프록시들에게만 부착을 하고 싶습니다. 그래서 제 생각에는 로컬로 컨트롤 되고 있다면 위젯을 생성하지 않는 방식으로 해결을 하려 했는데, 그럼에도 InfoBar 가 생성되어 부착됩니다.
어떻게 하면 제가 의도한 대로 로컬에서는 프록시의 InfoBar 만 보이게 설계 할 수 있을까요?
답변 1
0
음 보내주신 코드는 생성자 코드로 보여지는데, 파트1 강의에서 설명드렸지만 생성자 코드는 엔진이 초기화될 때 실행됩니다. 따라서 이 때 IsLocallyControlled 함수의 사용은 큰 의미가 없습니다.
해당 함수는 멀티플레이 설정이 완료된 이후의 런타임에서 실행해주시는 것이 좋습니다.
가장 간단히 생각하면 BeginPlay가 있겠지요.
런타임에서는 IsLocallyControlled 함수를 실행하고 부착된 위젯을 비활성화하는 형태로 옵션을 지정하면 되지 않을까 싶습니다
우선 공통적으로 atach 해 준 후 beginplay에서 destroycomponent 하니 잘 동작합니다
! 감사합니다 !