Short cuts for Physics.Overlap in Unity by Night Train Code
- User-friendly
OverlapSettingsin inspector PerformOverlapin 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
PerformOverlapis called inTryFindmethods!
You can set the results collection size by Init method:
int maxResultsSize = 32;
_overlapSettings.Init(maxResultsSize);