mirror of
https://gitee.com/jisol/jisol-game/
synced 2025-12-17 01:20:30 +00:00
提交GAS 打算做一个帧同步的GAS
This commit is contained in:
78
JEX_GAS/Assets/GAS/Runtime/Ability/AbilityAreaUtil.cs
Normal file
78
JEX_GAS/Assets/GAS/Runtime/Ability/AbilityAreaUtil.cs
Normal file
@@ -0,0 +1,78 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
namespace GAS.Runtime
|
||||
{
|
||||
public enum EffectCenterType
|
||||
{
|
||||
SelfOffset,
|
||||
WorldSpace,
|
||||
TargetOffset
|
||||
}
|
||||
|
||||
public static class AbilityAreaUtil
|
||||
{
|
||||
[Obsolete("请使用OverlapBox2DNonAlloc方法来避免产生垃圾收集(GC)。")]
|
||||
public static Collider2D[] OverlapBox2D(this AbilitySystemComponent asc, Vector2 offset, Vector2 size,
|
||||
float angle, int layerMask, Transform relativeTransform = null)
|
||||
{
|
||||
relativeTransform ??= asc.transform;
|
||||
var center = (Vector2)relativeTransform.position;
|
||||
offset.x *= relativeTransform.lossyScale.x > 0 ? 1 : -1;
|
||||
center += offset;
|
||||
angle += asc.transform.eulerAngles.z;
|
||||
|
||||
return Physics2D.OverlapBoxAll(center, size, angle, layerMask);
|
||||
}
|
||||
|
||||
public static int OverlapBox2DNonAlloc(this AbilitySystemComponent asc, Vector2 offset, Vector2 size,
|
||||
float angle, Collider2D[] results, int layerMask, Transform relativeTransform = null)
|
||||
{
|
||||
relativeTransform ??= asc.transform;
|
||||
var center = (Vector2)relativeTransform.position;
|
||||
offset.x *= relativeTransform.lossyScale.x > 0 ? 1 : -1;
|
||||
center += offset;
|
||||
angle += asc.transform.eulerAngles.z;
|
||||
|
||||
var count = Physics2D.OverlapBoxNonAlloc(center, size, angle, results, layerMask);
|
||||
return count;
|
||||
}
|
||||
|
||||
public static int TimelineAbilityOverlapBox2D(this TimelineAbilitySpec spec,
|
||||
Vector2 offset, Vector2 size, float angle, int layerMask, Collider2D[] results,
|
||||
EffectCenterType centerType, Transform relativeTransform = null)
|
||||
{
|
||||
return centerType switch
|
||||
{
|
||||
EffectCenterType.SelfOffset => spec.Owner.OverlapBox2DNonAlloc(offset, size, angle, results, layerMask, relativeTransform),
|
||||
EffectCenterType.WorldSpace => Physics2D.OverlapBoxNonAlloc(offset, size, angle, results, layerMask),
|
||||
EffectCenterType.TargetOffset => spec.Target.OverlapBox2DNonAlloc(offset, size, angle, results, layerMask, relativeTransform),
|
||||
_ => 0
|
||||
};
|
||||
}
|
||||
|
||||
[Obsolete("请使用OverlapCircle2DNonAlloc方法来避免产生垃圾收集(GC)。")]
|
||||
public static Collider2D[] OverlapCircle2D(this AbilitySystemComponent asc, Vector2 offset, float radius,
|
||||
int layerMask, Transform relativeTransform = null)
|
||||
{
|
||||
relativeTransform ??= asc.transform;
|
||||
var center = (Vector2)relativeTransform.position;
|
||||
offset.x *= relativeTransform.lossyScale.x > 0 ? 1 : -1;
|
||||
center += offset;
|
||||
|
||||
return Physics2D.OverlapCircleAll(center, radius, layerMask);
|
||||
}
|
||||
|
||||
public static int OverlapCircle2DNonAlloc(this AbilitySystemComponent asc, Vector2 offset, float radius,
|
||||
Collider2D[] results, int layerMask, Transform relativeTransform = null)
|
||||
{
|
||||
relativeTransform ??= asc.transform;
|
||||
var center = (Vector2)relativeTransform.position;
|
||||
offset.x *= relativeTransform.lossyScale.x > 0 ? 1 : -1;
|
||||
center += offset;
|
||||
|
||||
var count = Physics2D.OverlapCircleNonAlloc(center, radius, results, layerMask);
|
||||
return count;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user