- Home /
Entity system following an object
I have many object to follow a main object. Is there way to easily access position of entity or find the entity from code Here is my code:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Unity.Entities;
using Unity.Jobs;
using Unity.Mathematics;
using Unity.Physics;
using Unity.Transforms;
using Unity.Burst;
[BurstCompile]
[UpdateInGroup(typeof(FixedStepSimulationSystemGroup))]
public class BallFollowController : SystemBase
{
/*
protected override JobHandle OnUpdate(JobHandle inputDeps)
{
float deltaTime = Time.DeltaTime;
Entities.ForEach((ref Translation translation, in BallMainData data) => {
//translation.Value.z += data.speed * deltaTime;
temp = translation.Value;
}).Run();
var jobHandle = Entities.ForEach((ref PhysicsVelocity velocity,in Translation translation, in BallFollowData data) => {
velocity.Linear += (temp - translation.Value)*data.speed*deltaTime;
}).Schedule(inputDeps);
}
*/
protected override void OnUpdate()
{
float deltaTime = Time.DeltaTime;
Entities.ForEach((ref PhysicsVelocity velocity, in Translation translation, in BallFollowData data) => {
float3 temp = new float3();
Entities.ForEach((ref Translation translation, in BallMainData data) => {
//translation.Value.z += data.speed * deltaTime;
temp = translation.Value;
}).Run();
velocity.Linear += (temp - translation.Value) * data.speed * deltaTime;
}).Schedule();
}
}
'BallFollowController' is missing the class attribute 'ExtensionOfNativeClass'!
'BallFollowController' is missing the class attribute 'ExtensionOfNativeClass'!
This error is caused by misplaced [BurstCompile]
attribute, remove it.
[BurstCompile]
belongs to very specific struct
s not class
es.
Answer by andrew-lukasik · Aug 04, 2021 at 07:14 AM
using Unity.Entities;
using Unity.Jobs;
using Unity.Mathematics;
using Unity.Physics;
using Unity.Transforms;
using Unity.Collections;
[UpdateInGroup( typeof(FixedStepSimulationSystemGroup) )]
public class BallFollowerSystem : SystemBase
{
EntityQuery _query;
protected override void OnCreate ()
{
_query = EntityManager.CreateEntityQuery( typeof(Translation) , typeof(BallMainData) );
}
protected override void OnUpdate ()
{
float deltaTime = Time.DeltaTime;
var mainBallPositions = _query.ToComponentDataArray<Translation>( Allocator.TempJob );
Entities
.WithReadOnly( mainBallPositions ).WithDisposeOnCompletion( mainBallPositions )
.ForEach( ( ref PhysicsVelocity velocity , in Translation translation , in BallFollowData data ) =>
{
for( int i=mainBallPositions.Length-1 ; i!=-1 ; i-- )
{
float3 ballPos = mainBallPositions[i].Value;
float3 ballDir = math.normalize( ballPos - translation.Value );
velocity.Linear += ballDir * data.speed * deltaTime;
}
} )
.WithBurst()
.ScheduleParallel();
}
}
When I make them systembase, I dont need to attach them an object ? Are they running automaticly?
Basically, yes. Entities.ForEach
creates matching EntityQuery, behind the scenes, and this EnityQuery
thing is kind of a filter that selects matching entity data collections (chunks) for which for code will be executed.
This means that your Entities.ForEach
code will execute only when matching entities exists.
Thanks for helping... Can u look my new question? And Do u have any suggestion to learn this stuffs?
Your answer

Follow this Question
Related Questions
[ECS] Create Entities from Job ( IJobForEachWithEntity) using an EntityCommandBuffer 1 Answer
Best way to get data from a Monobheaviour in a JobComponentSystem? 2 Answers
[ECS] DefaultWorldInitialization.Initialize take 50MB 1 Answer
Unity (ECS & DOTS) Entity Sinking 0 Answers
How to make singleplayer/multiplayer game with DOTS 0 Answers