Net.Like.Xue.Tokyo/Assets/Plugins/Character Controller Pro/Utilities/Scripts/SphereColliderComponent2D.cs

63 lines
1.8 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
namespace Lightbug.Utilities
{
/// <summary>
/// This component represents a sphere collider in a 2D world (better known as a circle).
/// </summary>
public class SphereColliderComponent2D : ColliderComponent2D
{
CircleCollider2D circleCollider = null;
public override Vector3 Size
{
get => Vector2.one * 2f * circleCollider.radius;
set => circleCollider.radius = value.x / 2f;
}
public override Vector3 BoundsSize => circleCollider.bounds.size;
public override Vector3 Offset
{
get => circleCollider.offset;
set => circleCollider.offset = value;
}
protected override int InternalOverlapBody(Vector3 position, Quaternion rotation, Collider2D[] unfilteredResults, List<Collider2D> filteredResults, OverlapFilterDelegate2D filter)
{
var center = position + rotation * circleCollider.offset;
var qht = Physics2D.queriesHitTriggers;
Physics2D.queriesHitTriggers = false;
ContactFilter.layerMask = Physics2D.DefaultRaycastLayers;
var overlaps = Physics2D.OverlapCircle(
center,
circleCollider.radius,
ContactFilter,
unfilteredResults
);
Physics2D.queriesHitTriggers = qht;
return FilterValidOverlaps(overlaps, unfilteredResults, filteredResults, filter);
}
protected override void Awake()
{
circleCollider = gameObject.GetOrAddComponent<CircleCollider2D>(true);
collider = circleCollider;
base.Awake();
}
}
}