Как исправить эти ложные ошибки Intellisense при использовании Unreal Engine 4.24.2 с VS2019 или VSCode? - PullRequest
2 голосов
/ 22 февраля 2020

Я следую краткому руководству 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);
}
...