Description
Thanks for sharing such an amazing plugin, I have used it well by Behaviour Tree. While when I try to use by C++, the following error came out. Please advise how to solve it. Thanks a lot.
UE4.24.3 + VS2019
Build success in VS.
But when clicking PLAY in the UE 4 Editor, the UE4 crashed with the following error.
_Unhandled Exception: EXCEPTION_ACCESS_VIOLATION reading address 0x000002f8
UE4Editor_FindPath_1636!ADebugPath::BeginPlay() [C:\Users\User\Documents\Unreal Projects\FindPath\Source\FindPath\Private\DebugPath.cpp:58]_
`#include "DebugPath.h"
#include "Engine/World.h"
#include "Engine/Engine.h"
#include <Runtime/Engine/Classes/Kismet/GameplayStatics.h>
#include <Runtime/Engine/Classes/Components/ActorComponent.h>
#include "UESVON/Public/SVONNavigationPath.h"
#include "UESVON/Public/SVONFindPathTask.h"
#include "UESVON/Public/SVONLink.h"
#include "UESVON/Public/SVONNavigationPath.h"
#include "UESVON/Public/SVONPathFinder.h"
#include "UESVON/Public/SVONVolume.h"
#include "UESVON/Public/SVONMediator.h"
// Sets default values
ADebugPath::ADebugPath()
{
// Set this pawn to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
if (FindVolume())
{
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, TEXT("my_SVONVolume sucess"));
}
}
// Called when the game starts or when spawned
void ADebugPath::BeginPlay()
{
Super::BeginPlay();
const ASVONVolume* my_SVONVolume = GetCurrentVolume();
SVONPathFinderSettings settings;
settings.myUseUnitCost = true;
settings.myUnitCost = 10;
settings.myEstimateWeight = 1;
settings.myNodeSizeCompensation = 1;
settings.myPathCostType = ESVONPathCostType::EUCLIDEAN;
settings.mySmoothingIterations = 0.0;
FSVONNavPathSharedPtr path;
UWorld* my_world = GetWorld();
SVONPathFinder svonPathFinder(my_world, *my_SVONVolume, settings);
const FVector start_position(-8310.0, 1020.0, 140.0);
const FVector target_position(-8580.0, 5020.0, 2518.0);
SVONLink start_link;
SVONLink target_link;
SVONMediator::GetLinkFromPosition(start_position, *my_SVONVolume, start_link);
/*
SVONMediator::GetLinkFromPosition(target_position, *my_SVONVolume, target_link);
svonPathFinder.FindPath(start_link, target_link, start_position, target_position, &path);
TArray<FSVONPathPoint> points = path->GetPathPoints();
for (FSVONPathPoint point : points)
{
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, point.myPosition.ToString());
}
*/
}
// Called every frame
void ADebugPath::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
// Called to bind functionality to input
void ADebugPath::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
}
bool ADebugPath::FindVolume()
{
TArray<AActor*> navVolumes;
UGameplayStatics::GetAllActorsOfClass(GetWorld(), ASVONVolume::StaticClass(), navVolumes);
for (AActor* actor : navVolumes)
{
ASVONVolume* volume = Cast<ASVONVolume>(actor);
if (volume)
{
aSVONVolumn = volume;
return true;
}
}
return false;
}
`
`// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Pawn.h"
#include "DebugPath.generated.h"
class ASVONVolume;
UCLASS()
class FINDPATH_API ADebugPath : public APawn
{
GENERATED_BODY()
public:
// Sets default values for this pawn's properties
ADebugPath();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
// Called to bind functionality to input
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
bool FindVolume();
const ASVONVolume* aSVONVolumn;
const ASVONVolume* GetCurrentVolume() const { return aSVONVolumn; }
};`