inflearn logo
강의

講義

知識共有

Unreal Engine 4 入門 (C++ ベース)

キャラクター作成

생성자 ConstructorHelpers질문 있습니다.

514

starkshn

投稿した質問数 134

0

APerson::APerson()

{

PrimaryActorTick.bCanEverTick = true;

Body = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("BODY"));

RootComponent = Body;

static ConstructorHelpers::FObjectFinder<UStaticMesh> BODY(TEXT("StaticMesh'/경로 어쩌구'"));

if (BODY.Succeeded())

{

Body->SetStaticMesh(SM_BODY.Object);

}

}

 

이렇게 Person이라는 c++클래스의 생성자에서 FObjectFinder할 때 제일앞에 static을 붙이는데

이게 구글링을 해보니까

경로는 변경될일이 없기 때문에 게임에서 생성자 코드가 여러번 호출 될 때마다 지역변수를 생성하고 초기화 하는 것은 불필요한 작업이라서 static을 붙인다던데...

 

Person이라는 객체가 월드에 동적으로 배치가 된다면 어쨋든 생성자를 호출하기때문에 변경될일이 없더라도 지역변수를 호출하는거 아닌가요...??

static 키워드가 붙은 변수는 생성자에서 초기화를 못한다고 알고있습니다..

 

왜냐하면 같은 이름의 변수가 계속 데이터 영역에 올라가면 링킹 문제가 발생한다고 알고있어서...(정확하지는 않지만 그냥 같은 이름의 변수를 계속 데이터 영역에 올리면 안된다라는 느낌을 강하게 받습니다)

 

그런데 만약 Person이라는 c++객체를 동적으로 계속 월드에 배치를 한다면 생성자도 호출이 되는 것일텐데 그때마다 static이 붙은

 

static ConstructorHelpers::FObjectFinder<UStaticMesh> BODY(TEXT("StaticMesh'/경로 어쩌구'"));

이부분이 계속 호출 되면 에러가 나야 정상아닌가요..?? 잘 모르겠습니다..ㅠ

unreal blueprint

回答 1

1

Rookiss

static + local은 일반 지역 변수가 아닌 [정적 지역 변수]
~라서 최초에 한 번만 만들어집니다.
여러 객체들이 동일한 [정적 지역 변수]를 공유해서 사용하게 되는 것은 맞지만
여러 번 만들어지진 않기 때문에 말씀하신 링킹 문제 등은 일어나지 않습니다.

강사님 질문 있습니다.

1

430

0

언리얼엔진 크래시날때

1

1564

1

캐릭터를 추가적으로 스폰하고 싶습니다

0

535

1

언리얼에서 WSA 함수 사용이 가능한가요?

0

541

1

캐릭터 Blueprint 받아오기 실패

0

566

2

UE5 generated.h 파일 생성이 안돼요

0

1420

1

애니메이션 블루프린트 오류

0

840

1

24분쯤에 UE시리즈

0

366

1

Weak_ptr질문

0

248

0

13분 질문

0

326

1

UE_LOG에 빨간색 밑줄이 쳐집니다.

0

361

0

Mesh와 MESH

0

348

1

template UCLASS 관련 질문 드립니다.

0

1202

1

생포인터 사용

0

294

1

TWeakObjectPtr

0

522

1

LOG출력 컴파일은 되는데 플레이시 Error가 발생하며 튕깁니다.

0

489

1

postinitializecomponents

0

244

1

[스탯매니저] 공격하는 캐릭터 정보인지, 공격당하는 캐릭터 정보인지 헷갈려요.

0

326

1

ue4 -> ue5 코드 변경

1

1945

4

애니메이션 기초 강의 질문입니다.

0

250

1

OnAttacked(float DamageAmount) 함수 질문

0

233

1

소켓 실습 일부 오버랩으로 검이 주워지지 않습니다

0

382

2

인텔리젼스? 비츄얼어시스트? 질문입니다

1

272

2

RootComponent에 무언가 할당을 해줘야 하지 않나요?

0

389

1