🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

리슨 서버 시 위젯 부착 관련

24.05.24 13:51 작성 조회수 67

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 함수를 실행하고 부착된 위젯을 비활성화하는 형태로 옵션을 지정하면 되지 않을까 싶습니다

차태관님의 프로필

차태관

질문자

2024.05.24

우선 공통적으로 atach 해 준 후 beginplay에서 destroycomponent 하니 잘 동작합니다
! 감사합니다 !


채널톡 아이콘