Я новичок в c ++ (используйте для c #) и пытаюсь вызвать void на Actor, когда его ударили с помощью raycast, и отправил ему шнуры.
Вот заголовок скрипта, который я пытаюсь вызвать "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);
};
А вот часть cpp другого скрипта, которую я хочу вызвать EditMesh () с
#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 'компилируется