Engine 5.3.1
Engine 5.21
I am trying to follow the tutorial for using Mass Entity, but i am getting some errors which i cant seem to fix. Just adding a C++ file based on one Mass Entity class makes it fail.
By just following the tutorial get several errors linked to Mass Entity.
Error C3668 'UMassTestProcessor::Execute': method with override specifier 'override'
did not override any base class methods ProjectMass ...ProjectMass\Source\ProjectMass\MassTesting\MassTestProcessor.h
When i try to fix those errors, i get some other error pointing to a Microsoft.MakeFile.Targets(CMake). Which in not even in my Unreal solution.
Error MSB3073 The command ""E:\UE Engine\UE_5.2\Engine\Build\BatchFiles\Build.bat" ProjectMassEditor Win64 Development -Project="...Projekt\Unreal\ProjectMass\ProjectMass.uproject" -WaitMutex -FromMsBuild" exited with code 6. ProjectMass C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets
Code .Cpp file
#include "MassTestProcessor.h"
#include "MassCommonFragments.h"
#include "MassNavigationFragments.h"
#include "MassTestTrait.h"
UMassTestProcessor::UMassTestProcessor()
{
bAutoRegisterWithProcessingPhases = true;
ExecutionFlags = (int32)EProcessorExecutionFlags::All;
ExecutionOrder.ExecuteBefore.Add(UE::Mass::ProcessorGroupNames::Avoidance);
}
void UMassTestProcessor::ConfigureQueries()
{
EntityQuery.AddRequirement<FTransformFragment>(EMassFragmentAccess::ReadOnly);
EntityQuery.AddRequirement<FMassMoveTargetFragment>(EMassFragmentAccess::ReadWrite);
EntityQuery.AddTagRequirement<FMyTag>(EMassFragmentPresence::All);
}
void UMassTestProcessor::Execute(UMassEntitySubsystem& EntitySubsystem, FMassExecutionContext& Context)
{
EntityQuery.ForEachEntityChunk(EntitySubsystem, Context, ([this](FMassExecutionContext& Context)
{
const TArrayView<FTransformFragment> TransformsList = Context.GetMutableFragmentView<FTransformFragment>();
const TArrayView<FMassMoveTargetFragment> TargetList = Context.GetMutableFragmentView<FMassMoveTargetFragment>();
//const float WorldDeltaTime = Context.GetDeltaTimeSeconds();
for (int32 EntityIndex = 0; EntityIndex < Context.GetNumEntities(); EntityIndex++)
{
FTransform& Transform = TransformsList[EntityIndex].GetMutableTransform();
FMassMoveTargetFragment& Target = TargetList[EntityIndex];
Target.Center = FVector(1000.f, 100.f, 0.f);
Target.Forward = (Target.Center - Transform.GetLocation()).GetSafeNormal();
Transform.SetRotation(FQuat::FindBetweenVectors(FVector::ForwardVector,Target.Forward));
}
}));
}
Code .h file
#pragma once
#include "CoreMinimal.h"
#include "MassProcessor.h"
#include "MassEntitySubsystem.h"
#include "MassTestProcessor.generated.h"
UCLASS()
class PROJECTMASS_API UMassTestProcessor : public UMassProcessor
{
GENERATED_BODY()
public:
UMassTestProcessor();
protected:
virtual void ConfigureQueries() override;
virtual void Execute(UMassEntitySubsystem& EntitySubsystem, FMassExecutionContext& Context) override;
private:
FMassEntityQuery EntityQuery;
};
C# Build file
using UnrealBuildTool;
public class ProjectMass : ModuleRules
{
public ProjectMass(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay", "EnhancedInput" });
PrivateDependencyModuleNames.AddRange(new string[] {
"MassEntity",
"MassCommon",
"MassMovement",
"MassActors",
"MassNavigation",
/* <--- If uncomment this then i get CMake error
"MassProcessor",
"MassObserverProcessor",
*/
});
}
}
There is some more code and i will post it if needed.
I am a bit new to C++ but i have used C# in unity. But any help would be nice.