Здравствуйте, ребята. Я новичок в кодинге под ue и пишу логику для гексагональной сетки. Разделил функции по разным классам : HexManager наследованный от UObject, содержит функции, которые переводят координаты из одной системы координат в другую, HexLevel содержит уровень с информацией о клетках и так далее. В HexBoard соединяется вся логика с помощью указателей и выглядит это вот так:
Код:
UCLASS()
class FIRSTDUNGEON_API AHexBoard : public APawn
{
GENERATED_BODY()
public:
// Sets default values for this pawn's properties
AHexBoard();
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Hex property")
EMapKind MapKind;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Hex property")
UHexManager* HexManager;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Hex property")
UHexLevelManager* HexLevelManager;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HexBoard")
int32 width=3;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HexBoard")
int32 height=3;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HexBoard")
TArray<FRowEncapsulate> HexField;
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
UPROPERTY(EditAnywhere, BlueprintReadWrite)
float HexSize=103.f;
UFUNCTION(BlueprintCallable)
void SetFieldSize();
UFUNCTION(BlueprintCallable, BlueprintPure)
TArray<FVector> GetHexPositions() const;
UFUNCTION(BlueprintCallable, BlueprintPure)
FVector GetHexPosition(int32 Q, int32 R) const;
// Called every frame
virtual void Tick(float DeltaTime) override;
// Called to bind functionality to input
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
};
Инициализация происходит следующим образом:
Код:
AHexBoard::AHexBoard()
{
PrimaryActorTick.bCanEverTick = true;
MapKind=EMapKind::Reactangle;
HexManager = NewObject<UHexManager>(UHexManager::StaticClass());
UE_LOG(LogTemp, Error, TEXT("%s is hexmanager name"), *HexManager->GetName());
HexLevelManager = NewObject<UHexLevelManager>();
}
Получаю указатель на HexBoard следующим образом и даже что-то нахожу.
Но когда пытаюсь воспользоваться HexManager'ом получаю Accessed None trying to read. Также, видно на скрине, что почему-то в указателе на HexManager ничего не содержится.
Что я делаю не так и ,если в ue так не принято, как лучше поступить с сохранением общей логики?