Short cuts for Physics.Overlap in Unity by Night Train Code
- User-friendly
OverlapSettings
in inspector PerformOverlap
in one line of code
[SerializeField] private OverlapSettings _overlapSettings;
using NTC.OverlapSugar;
[SerializeField] private OverlapSettings _overlapSettings;
_overlapSettings.TryFind(out IDamageable damageable);
_overlapSettings.TryFindInChildren(out IDamageable damageable);
private readonly List<IDamageable> _detectedDamageables = new List<IDamageable>(32);
_overlapSettings.TryFind(_detectedDamageables);
private readonly List<IDamageable> _detectedDamageables = new List<IDamageable>(32);
_overlapSettings.TryFindInChildren(_detectedDamageables);
Example For Single Target:
using NTC.OverlapSugar;
using UnityEngine;
public class UnitMeleeAttack : UnitAttack
{
[SerializeField] private OverlapSettings _overlapSettings;
public void TryPerformAttack()
{
if (_overlapSettings.TryFind(out IDamageable damageable))
{
damageable.ApplyDamage(Damage);
}
}
}
Example For Many Targets:
using NTC.OverlapSugar;
using UnityEngine;
public class UnitMeleeAttack : UnitAttack
{
[SerializeField] private OverlapSettings _overlapSettings;
private readonly List<IDamageable> _detectedDamageables = new List<IDamageable>(32);
public void TryPerformAttack()
{
if (_overlapSettings.TryFind(_detectedDamageables))
{
_detectedDamageables.ForEach(ApplyDamage);
}
}
private void ApplyDamage(IDamageable damageable)
{
damageable.ApplyDamage(Damage);
}
}
Also you can draw gizmos of overlap zone:
public class UnitMeleeAttack : UnitAttack
{
[SerializeField] private OverlapSettings _overlapSettings;
#if UNITY_EDITOR
private void OnDrawGizmos()
{
_overlapSettings.TryDrawGizmos();
}
#endif
}
or
public class UnitMeleeAttack : UnitAttack
{
[SerializeField] private OverlapSettings _overlapSettings;
#if UNITY_EDITOR
private void OnDrawGizmosSelected()
{
_overlapSettings.TryDrawGizmos();
}
#endif
}
You can also use only PerformOverlap
without components auto-finding:
_overlapSettings.PerformOverlap();
Then you can find results here:
Collider[] results = _overlapSettings.OverlapResults;
Warning! Method
PerformOverlap
is called inTryFind
methods!
You can set the results collection size by Init
method:
int maxResultsSize = 32;
_overlapSettings.Init(maxResultsSize);