은 정적 하중은 도우미된다. UFUNCTION (...) 매크로로 해당 함수의 헤더를 표시하는 경우에만 C++ 함수를 호출 할 수 있습니다. this 링크를 참조하십시오.
그래서 함수를 만들 수 있으며 구현시 해당 도우미를 호출 할 수 있습니다. 예를 들면 :
// Helpers.h
static FORCEINLINE UTexture2D* GetTexture2DByName(const FName& name) {
return LoadObjFromPath<UTexture2D>(name);
}
UFUNCTION(BlueprintCallable, Category = TCF2Helpers)
static UTexture2D* GetTexture2DForBlock(UBuildableBlockInfo* blockInfo);
// Helpers.cpp
UTexture2D* UHelpers::GetTexture2DForBlock(UBuildableBlockInfo* blockInfo)
{
if (!blockInfo)
return nullptr;
const FString baseFolder = TEXT("Texture2D'/Game/Textures/HUD/%s");
if (blockInfo->IsEmptyHand)
return GetTexture2DByName(*FString::Printf(*baseFolder, TEXT("EmptyHand.EmptyHand'")));
// another lines of implementation
}
하지만 당신은 당신이 정말 하드가 필요하면, 자신을 요청해야.
if (wInGameMenu)
{
InGameMenu = CreateWidget<UObjectWidget>(this, wInGameMenu);
}
UObjectWidget이 UUserWidget의 후임 : 당신은 내가 가지고있는 기능있는 BeginPlay의 재정에 (이 즉석에서 위젯을 만들기 때문이다)
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Widgets")
TSubclassOf<class UObjectWidget> wInGameMenu;
UPROPERTY(BlueprintReadOnly, Category = "Widgets")
UObjectWidget* InGameMenu;
같은 것을 지정할 수 있습니다 와 위젯 (에디터에서 생성됨)은 그 위젯을 부수적 인 기초로 삼기 위해 부모가됩니다. 그것을 보유하고있는 내 객체의 archetype에 어떤 위젯을 만들어야하는지 정의합니다.
나는 그런 식으로 그것을 구현하는 것 : SceneComponent는 (그래서 당신이 연결할 수있는
- 만들기 ActorComponent로 무기을 WeaponManager 만들기 (사람이 나에게 더 나은 방법을 알려줍니다 경우이 변경 될 수 있습니다) 그것 해골 소켓)
- 모든 무기은 동일한 인터페이스를 기반으로 자체 구현을 갖습니다 (공통 조상에 정의 된 일부 기능을 무시할 수 있습니까?)
- 하위 무기 (에너지 무기, 총격 무기 등)가 여러 개있을 수 있으므로 올바른 상속을받을 수 있으며 같은 것을 여러 번 구현하지 않아도됩니다.
- 모든 무기은 메쉬와 속성을 정의합니다. 다시 말하면 메쉬 경로를 하드 코드 한 경우 (구현 이후로 괜찮습니다), 해당 목록의 끝에있는 코드를 사용할 수 있습니다. 또는 archetype에 설정할 수 있습니다 청사진에 코드를 작성하려는 경우 게임에서 열거 AF 모든 무기, 그래서 나는 TMAP에서 그것의 유형으로 정의 무기와 일치하고 간단하게 작업 할 수 있습니다 - 당신은 예를
TArray<TSubclassOf<UWeapon>>
- 에 대한 (모든 무기를 정의 WeaponManager 에
- 그리고 모든 무기 EWeaponType을 정의해야합니다 그것은 수요 (쇼, 변경, 무기 등을 숨길 수)에 그 유형은 무기의 모든 구현에 하드 코딩해야
로드 메쉬 생성자 :.
//TerminalObject.h
UCLASS()
class TAUCETIF2_API ATerminalObject : public AStaticMeshActor
{
GENERATED_UCLASS_BODY()
};
// TerminalObject.cpp
ATerminalObject::ATerminalObject(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
static ConstructorHelpers::FObjectFinder<UStaticMesh> mesh(TEXT("StaticMesh'/Game/BuildingObjects/Meshes/terminal.terminal'"));
checkf(mesh.Succeeded(), TEXT("Failed to find mesh"));
auto mc = GetStaticMeshComponent();
checkf(mc, TEXT("Failed to find mesh component"));
mc->SetStaticMesh(mesh.Object);
}
광범위한 내 맙소사. 이 대답을 내게 맡겨 주셔서 감사합니다. 고마워요! –