gpt4 book ai didi

c++ - Unreal c++ 使用 Line Trace 从 Actor 调用 void

转载 作者:搜寻专家 更新时间:2023-10-31 02:04:07 24 4
gpt4 key购买 nike

我是 c++ 的新手(用于 c#),并试图在 Actor 被光线转换击中时在 Actor 上调用 void 并将其发送给绳索。这是我试图调用“EditMesh”的脚本头(靠近底部)

 #pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "ProceduralMeshComponent.h"
//#include "Core.h"
#include "Chunk.generated.h"




UCLASS()
class VOXELWARS_API AChunk : public AActor
{

GENERATED_BODY()

public:
// Sets default values for this actor's properties
AChunk();

protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;


public:
// Called every frame
//virtual void Tick(float DeltaTime) override;

//UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Default)
// UMaterialInterface* TheMaterial;
UPROPERTY(EditAnywhere)
AChunk* ChunkRef;

UPROPERTY(EditAnywhere)
class UMaterialInterface* OnMaterial;

UPROPERTY(VisibleAnywhere)
UProceduralMeshComponent * mesh;
UPROPERTY(VisibleAnywhere)
int faceCount = 0;
TArray<FVector> vertices;
UPROPERTY(VisibleAnywhere)
TArray<int32> Triangles;
TArray<FVector> normals;
TArray<FVector2D> UV0;
TArray<FProcMeshTangent> tangents;
TArray<FLinearColor> vertexColors;
TArray<FVector2D> blocks;

int worldData[16][16][16] = { {} };
float tUnit = 0.0625;


public:void CubeTop(int x = 0, int y = 0, int z = 0, int block = 0);
public:void CubeNorth(int x = 0, int y = 0, int z = 0, int block = 0);
public:void CubeEast(int x = 0, int y = 0, int z = 0, int block = 0);
public:void CubeSouth(int x = 0, int y = 0, int z = 0, int block = 0);
public:void CubeWest(int x = 0, int y = 0, int z = 0, int block = 0);
public:void CubeBot(int x = 0, int y = 0, int z = 0, int block = 0);
public:void Cube(FVector2D texturePos);
public:void UpdateMesh();
public:void ClearMeshData();
public:void GenMesh();
public:void EditMesh(int x = 0, int y = 0, int z = 0, int block = 0); //here

public:int Chk(int x = 0, int y = 0, int z = 0);
// int* mBlock(int x = 0, int y = 0, int z = 0);
};

这是我想调用 EditMesh() 的另一个脚本的 cpp 的一部分

        #include "Chunk.h"
#include "VoxelWarsCharacter.h"
#include "VoxelWarsProjectile.h"
#include "Animation/AnimInstance.h"
#include "Camera/CameraComponent.h"
#include "Components/CapsuleComponent.h"
#include "Components/InputComponent.h"
#include "GameFramework/InputSettings.h"
#include "HeadMountedDisplayFunctionLibrary.h"
#include "Kismet/GameplayStatics.h"
#include "MotionControllerComponent.h"
#include "XRMotionControllerBase.h" // for

void AVoxelWarsCharacter::OnFire()
{
FVector StartLocation = GetActorLocation(); //your location
StartLocation.Z += 15;
FVector EndLocation = StartLocation + (FirstPersonCameraComponent->GetForwardVector() * 4000.f); //get forward dir
FHitResult Hit;
FCollisionQueryParams ColParms; //ignor stuff
ColParms.AddIgnoredActor(this);//ignor hitting self

GetWorld()->LineTraceSingleByChannel(Hit, StartLocation, EndLocation, ECC_Visibility, ColParms);//ECC_WorldDynamic will only hit Actors, ECC_Visibility is everything

if (Hit.GetActor()) {
//Hit.GetActor()->AChunk::EditMesh(0, 0, 0, 1);
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor(255,255,255), "Hit a actor");
UKismetSystemLibrary::DrawDebugLine(GetWorld(), StartLocation, Hit.Location, FColor(255, 255, 0), 5, 1);//FColor::Red

Hit.GetActor()->FindComponentByClass<AChunk>()->EditMesh((int)Hit.Location.X, (int)Hit.Location.Y, (int)Hit.Location.Z, 0);
//How do I do this?????????
}
}

我得到的错误

CompilerResultsLog:错误:D:\ProgramFiles\Epic Games\4.19\UE_4.19\Engine\Source\Runtime\Engine\Classes\GameFramework/Actor.h(2640):错误 C2338:“T”模板参数到 FindComponentByClass必须派生自 UActorComponent CompilerResultsLog:

错误:C:\Users\nolan\Desktop\VoxelWarsUR\Project\VoxelWars\Source\VoxelWars\VoxelWarsCharacter.cpp(160) :注意:请参阅函数模板实例化 'T*AActor::FindComponentByClass(void) const' 正在编译

最佳答案

parameter to FindComponentByClass must be derived from UActorComponent

VoxelWarsCharacter.cpp 的 160 行:

FindComponentByClass<AChunk>

AChunk 不是组件。组件以 U 开头。

关于c++ - Unreal c++ 使用 Line Trace 从 Actor 调用 void,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54175000/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com