This repository has been archived on 2025-09-23. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
XericLibrary-OLD/Runtime/CollisionLOD/LodSphereCollider.cs
T
2023-11-28 09:20:50 +08:00

46 lines
1.0 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XericLibrary.Runtime.MacroLibrary;
namespace XericLibrary.Runtime.CollisionLOD
{
public class LodSphereCollider : LodColliderBase
{
#region 字段属性
/// <summary>
/// 半径
/// </summary>
private float radius;
#endregion
#region 碰撞检测
private static bool CheckCollision(LodSphereCollider sphere1, LodSphereCollider sphere2)
{
return Vector3.Distance(sphere1.BoundSize.center, sphere2.BoundSize.center)
< sphere1.radius + sphere2.radius;
}
private static bool CheckCollision(LodSphereCollider sphere, LodBoxCollider box)
{
/*
* 对于任意AABB和圆的最近点的计算:
* 获取圆心C与AABB中心B的偏移量D
* 用AABB的范围去限制这个偏移量
* 此时矢量总是位于AABB的边缘处
*/
return (sphere.BoundSize.center - box.BoundSize.center)
.Clamp(box.BoundSize.min, box.BoundSize.max)
.Add(box.BoundSize.center)
.Distance(sphere.BoundSize.center) <= sphere.radius;
}
#endregion
}
}