Я следую краткому руководству Unreal Programming
Я скопировал и вставил примеры кода внизу руководства. Я пытался использовать как VS2019, так и VSCode, и оба дают мне одинаковые ошибки:
UStaticMeshComponent *AFloatingActor::VisualMesh
pointer to incomplete class type is not allowed
static <error-type> UStaticMesh
name followed by '::' must be a class or namespace name
и еще пару ...
Когда я компилирую в Unreal Engine, он компилируется с 0 ошибками и работает как задумано.
Есть ли способ исправить эти ложные ошибки и продолжать использовать Intellisense / получить завершение кода?
Я действительно просто хочу видеть функциональные возможности и определения элементов для компонентов, которые я использую, поскольку я новичок в Unreal.
Это код из руководства, поскольку он у меня есть в мой источник для этого демонстрационного проекта:
FloatingActor.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "FloatingActor.generated.h"
UCLASS()
class CPPTUTORIAL_API AFloatingActor : public AActor
{
UPROPERTY(VisibleAnywhere)
UStaticMeshComponent* VisualMesh;
GENERATED_BODY()
public:
// Sets default values for this actor's properties
AFloatingActor();
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "FloatingActor")
float FloatHeight = 20.0f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "FloatingActor")
float RotationSpeed = 20.0f;
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
};
FloatingActor.cpp
#include "FloatingActor.h"
// Sets default values
AFloatingActor::AFloatingActor()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
VisualMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Mesh"));
VisualMesh->SetupAttachment(RootComponent);
static ConstructorHelpers::FObjectFinder<UStaticMesh> CubeVisualAsset(TEXT("/Game/StarterContent/Shapes/Shape_Cube.Shape_Cube"));
if (CubeVisualAsset.Succeeded())
{
VisualMesh->SetStaticMesh(CubeVisualAsset.Object);
VisualMesh->SetRelativeLocation(FVector(0.0f, 0.0f, 0.0f));
}
}
// Called when the game starts or when spawned
void AFloatingActor::BeginPlay()
{
Super::BeginPlay();
}
// Called every frame
void AFloatingActor::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
FVector NewLocation = GetActorLocation();
FRotator NewRotation = GetActorRotation();
float RunningTime = GetGameTimeSinceCreation();
float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime));
NewLocation.Z += DeltaHeight * FloatHeight; //Scale our height by a factor of 20
float DeltaRotation = DeltaTime * RotationSpeed; //Rotate by 20 degrees per second
NewRotation.Yaw += DeltaRotation;
SetActorLocationAndRotation(NewLocation, NewRotation);
}