I made a very simple tree like this. And I found that the do while loop in
TraversalSystemGroup
is evaluating my SenseTarget system multiple times at a single frame and that is unnecessary and very much costly. So I just commented it out and I gained lots of performance improvement.
// do
// {
base.OnUpdate();
var determineEvaluationSystem = EntityManager.WorldUnmanaged.GetUnsafeSystemRef<DetermineEvaluationSystem>(m_DetermineEvaluationSystemHandle);
determineEvaluationSystem.Complete(EntityManager);
evaluate = determineEvaluationSystem.Evaluate;
var evaluationSystem = EntityManager.WorldUnmanaged.GetUnsafeSystemRef<EvaluationSystem>(m_EvaluationSystemHandle);
evaluationSystem.Complete(EntityManager);
#if UNITY_EDITOR
if (evaluate)
{
count++;
if (count == ushort.MaxValue / 10)
{
UnityEngine.Debug.LogWarning("An infinite loop would have been caused by the TraversalSystemGroup. Please email support@opsive.com with steps to reproduce this error.");
//break;
}
}
#endif
//} while (evaluate);

TraversalSystemGroup
is evaluating my SenseTarget system multiple times at a single frame and that is unnecessary and very much costly. So I just commented it out and I gained lots of performance improvement.
// do
// {
base.OnUpdate();
var determineEvaluationSystem = EntityManager.WorldUnmanaged.GetUnsafeSystemRef<DetermineEvaluationSystem>(m_DetermineEvaluationSystemHandle);
determineEvaluationSystem.Complete(EntityManager);
evaluate = determineEvaluationSystem.Evaluate;
var evaluationSystem = EntityManager.WorldUnmanaged.GetUnsafeSystemRef<EvaluationSystem>(m_EvaluationSystemHandle);
evaluationSystem.Complete(EntityManager);
#if UNITY_EDITOR
if (evaluate)
{
count++;
if (count == ushort.MaxValue / 10)
{
UnityEngine.Debug.LogWarning("An infinite loop would have been caused by the TraversalSystemGroup. Please email support@opsive.com with steps to reproduce this error.");
//break;
}
}
#endif
//} while (evaluate);

