移除ECM2

This commit is contained in:
2025-05-11 21:42:51 +08:00
parent aadd564c38
commit a7bf033ca9
726 changed files with 0 additions and 138648 deletions

View File

@@ -1,171 +0,0 @@
using System;
using UnityEngine;
namespace ECM2
{
/// <summary>
/// General purpose collision detection functions.
/// Lets you filter results implementing the IColliderFilter interface.
/// </summary>
public static class CollisionDetection
{
#region CONSTANTS
private const int kMaxHits = 8;
#endregion
#region FIELDS
private static readonly RaycastHit[] HitsBuffer = new RaycastHit[kMaxHits];
#endregion
#region METHODS
public static int Raycast(Vector3 origin, Vector3 direction, float distance, int layerMask,
QueryTriggerInteraction queryTriggerInteraction, out RaycastHit closestHit, RaycastHit[] hits,
IColliderFilter colliderFilter)
{
closestHit = default;
int rawHitCount = Physics.RaycastNonAlloc(origin, direction, HitsBuffer, distance, layerMask,
queryTriggerInteraction);
if (rawHitCount == 0)
return 0;
int filteredHitCount = 0;
float closestDistance = Mathf.Infinity;
Array.Clear(hits, 0, hits.Length);
for (int i = 0; i < rawHitCount; i++)
{
if (HitsBuffer[i].distance <= 0.0f ||
colliderFilter != null && colliderFilter.Filter(HitsBuffer[i].collider))
continue;
if (HitsBuffer[i].distance < closestDistance)
{
closestHit = HitsBuffer[i];
closestDistance = closestHit.distance;
}
hits[filteredHitCount++] = HitsBuffer[i];
}
return filteredHitCount;
}
public static int SphereCast(Vector3 origin, float radius, Vector3 direction, float distance, int layerMask,
QueryTriggerInteraction queryTriggerInteraction, out RaycastHit closestHit, RaycastHit[] hits,
IColliderFilter colliderFilter, float backStepDistance)
{
closestHit = default;
Vector3 optOrigin = origin - direction * backStepDistance;
float optDistance = distance + backStepDistance;
int rawHitCount = Physics.SphereCastNonAlloc(optOrigin, radius, direction, HitsBuffer, optDistance,
layerMask, queryTriggerInteraction);
if (rawHitCount == 0)
return 0;
int filteredHitCount = 0;
float closestDistance = Mathf.Infinity;
Array.Clear(hits, 0, hits.Length);
for (int i = 0; i < rawHitCount; i++)
{
if (HitsBuffer[i].distance <= 0.0f ||
colliderFilter != null && colliderFilter.Filter(HitsBuffer[i].collider))
continue;
HitsBuffer[i].distance -= backStepDistance;
if (HitsBuffer[i].distance < closestDistance)
{
closestHit = HitsBuffer[i];
closestDistance = closestHit.distance;
}
hits[filteredHitCount++] = HitsBuffer[i];
}
return filteredHitCount;
}
public static int CapsuleCast(Vector3 point1, Vector3 point2, float radius, Vector3 direction, float distance,
int layerMask, QueryTriggerInteraction queryTriggerInteraction, out RaycastHit closestHit,
RaycastHit[] hits, IColliderFilter colliderFilter, float backStepDistance)
{
closestHit = default;
Vector3 optPoint1 = point1 - direction * backStepDistance;
Vector3 optPoint2 = point2 - direction * backStepDistance;
float optDistance = distance + backStepDistance;
int rawHitCount = Physics.CapsuleCastNonAlloc(optPoint1, optPoint2, radius, direction, HitsBuffer,
optDistance, layerMask, queryTriggerInteraction);
if (rawHitCount == 0)
return 0;
int filteredHitCount = 0;
float closestDistance = Mathf.Infinity;
Array.Clear(hits, 0, hits.Length);
for (int i = 0; i < rawHitCount; i++)
{
if (HitsBuffer[i].distance <= 0.0f ||
colliderFilter != null && colliderFilter.Filter(HitsBuffer[i].collider))
continue;
HitsBuffer[i].distance -= backStepDistance;
if (HitsBuffer[i].distance < closestDistance)
{
closestHit = HitsBuffer[i];
closestDistance = closestHit.distance;
}
hits[filteredHitCount++] = HitsBuffer[i];
}
return filteredHitCount;
}
public static int OverlapCapsule(Vector3 point1, Vector3 point2, float radius, int layerMask,
QueryTriggerInteraction queryTriggerInteraction, Collider[] results, IColliderFilter colliderFilter)
{
int rawOverlapCount =
Physics.OverlapCapsuleNonAlloc(point1, point2, radius, results, layerMask, queryTriggerInteraction);
if (rawOverlapCount == 0)
return 0;
int filteredOverlapCount = rawOverlapCount;
for (int i = 0; i < rawOverlapCount; i++)
{
Collider overlappedCollider = results[i];
if (colliderFilter != null && !colliderFilter.Filter(overlappedCollider))
continue;
if (i < --filteredOverlapCount)
results[i] = results[filteredOverlapCount];
}
return filteredOverlapCount;
}
#endregion
}
}

View File

@@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: 3ea13ecaa42445519734922e43f938f2
timeCreated: 1700619165

View File

@@ -1,99 +0,0 @@
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering;
namespace ECM2
{
public static class MeshUtility
{
private const int kMaxVertices = 1024;
private const int kMaxTriangles = kMaxVertices * 3;
private static readonly List<Vector3> _vertices = new List<Vector3>(kMaxVertices);
private static readonly List<ushort> _triangles16 = new List<ushort>(kMaxTriangles);
private static readonly List<int> _triangles32 = new List<int>();
private static readonly List<ushort> _scratchBuffer16 = new List<ushort>(kMaxTriangles);
private static readonly List<int> _scratchBuffer32 = new List<int>();
public static Vector3 FindMeshOpposingNormal(Mesh sharedMesh, ref RaycastHit inHit)
{
Vector3 v0, v1, v2;
if (sharedMesh.indexFormat == IndexFormat.UInt16)
{
_triangles16.Clear();
int subMeshCount = sharedMesh.subMeshCount;
if (subMeshCount == 1)
sharedMesh.GetTriangles(_triangles16, 0);
else
{
for (int i = 0; i < subMeshCount; i++)
{
sharedMesh.GetTriangles(_scratchBuffer16, i);
_triangles16.AddRange(_scratchBuffer16);
}
}
sharedMesh.GetVertices(_vertices);
v0 = _vertices[_triangles16[inHit.triangleIndex * 3 + 0]];
v1 = _vertices[_triangles16[inHit.triangleIndex * 3 + 1]];
v2 = _vertices[_triangles16[inHit.triangleIndex * 3 + 2]];
}
else
{
_triangles32.Clear();
int subMeshCount = sharedMesh.subMeshCount;
if (subMeshCount == 1)
sharedMesh.GetTriangles(_triangles32, 0);
else
{
for (int i = 0; i < subMeshCount; i++)
{
sharedMesh.GetTriangles(_scratchBuffer32, i);
_triangles32.AddRange(_scratchBuffer32);
}
}
sharedMesh.GetVertices(_vertices);
v0 = _vertices[_triangles32[inHit.triangleIndex * 3 + 0]];
v1 = _vertices[_triangles32[inHit.triangleIndex * 3 + 1]];
v2 = _vertices[_triangles32[inHit.triangleIndex * 3 + 2]];
}
Matrix4x4 mtx = inHit.transform.localToWorldMatrix;
Vector3 p0 = mtx.MultiplyPoint3x4(v0);
Vector3 p1 = mtx.MultiplyPoint3x4(v1);
Vector3 p2 = mtx.MultiplyPoint3x4(v2);
Vector3 u = p1 - p0;
Vector3 v = p2 - p0;
Vector3 worldNormal = Vector3.Cross(u, v).normalized;
if (Vector3.Dot(worldNormal, inHit.normal) < 0.0f)
worldNormal = Vector3.Cross(v, u).normalized;
return worldNormal;
}
public static void FlushBuffers()
{
_vertices.Clear();
_scratchBuffer16.Clear();
_scratchBuffer32.Clear();
_triangles16.Clear();
_triangles32.Clear();
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 740062629b0d7924ca2d9b9f8ff3318c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: