mirror of
https://github.com/celisej567/UnitySourceMovement.git
synced 2026-09-21 20:08:38 +03:00
Add files via upload
This commit is contained in:
15
Modified fragsurf/TraceUtil/Trace.cs
Normal file
15
Modified fragsurf/TraceUtil/Trace.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace Fragsurf.TraceUtil {
|
||||
public struct Trace {
|
||||
|
||||
public Vector3 startPos;
|
||||
public Vector3 endPos;
|
||||
public float fraction;
|
||||
public bool startSolid;
|
||||
public Collider hitCollider;
|
||||
public Vector3 hitPoint;
|
||||
public Vector3 planeNormal;
|
||||
|
||||
}
|
||||
}
|
||||
11
Modified fragsurf/TraceUtil/Trace.cs.meta
Normal file
11
Modified fragsurf/TraceUtil/Trace.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3d79906c8a32f894eac47445c9814b61
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
115
Modified fragsurf/TraceUtil/Tracer.cs
Normal file
115
Modified fragsurf/TraceUtil/Tracer.cs
Normal file
@@ -0,0 +1,115 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace Fragsurf.TraceUtil {
|
||||
public class Tracer {
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="collider"></param>
|
||||
/// <param name="origin"></param>
|
||||
/// <param name="end"></param>
|
||||
/// <param name="layerMask"></param>
|
||||
/// <returns></returns>
|
||||
public static Trace TraceCollider (Collider collider, Vector3 origin, Vector3 end, int layerMask) {
|
||||
|
||||
if (collider is BoxCollider) {
|
||||
|
||||
// Box collider trace
|
||||
return TraceBox (origin, end, collider.bounds.extents, collider.contactOffset, layerMask);
|
||||
|
||||
} else if (collider is CapsuleCollider) {
|
||||
|
||||
// Capsule collider trace
|
||||
var capc = (CapsuleCollider)collider;
|
||||
|
||||
Vector3 point1, point2;
|
||||
Movement.SurfPhysics.GetCapsulePoints (capc, origin, out point1, out point2);
|
||||
|
||||
return TraceCapsule (point1, point2, capc.radius, origin, end, capc.contactOffset, layerMask);
|
||||
|
||||
}
|
||||
|
||||
throw new System.NotImplementedException ("Trace missing for collider: " + collider.GetType ());
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static Trace TraceCapsule (Vector3 point1, Vector3 point2, float radius, Vector3 start, Vector3 destination, float contactOffset, int layerMask) {
|
||||
|
||||
var result = new Trace () {
|
||||
startPos = start,
|
||||
endPos = destination
|
||||
};
|
||||
|
||||
var longSide = Mathf.Sqrt (contactOffset * contactOffset + contactOffset * contactOffset);
|
||||
radius *= (1f - contactOffset);
|
||||
var direction = (destination - start).normalized;
|
||||
var maxDistance = Vector3.Distance (start, destination) + longSide;
|
||||
|
||||
RaycastHit hit;
|
||||
if (Physics.CapsuleCast (
|
||||
point1: point1,
|
||||
point2: point2,
|
||||
radius: radius,
|
||||
direction: direction,
|
||||
hitInfo: out hit,
|
||||
maxDistance: maxDistance,
|
||||
layerMask: layerMask,
|
||||
queryTriggerInteraction: QueryTriggerInteraction.Ignore)) {
|
||||
|
||||
result.fraction = hit.distance / maxDistance;
|
||||
result.hitCollider = hit.collider;
|
||||
result.hitPoint = hit.point;
|
||||
result.planeNormal = hit.normal;
|
||||
|
||||
} else
|
||||
result.fraction = 1;
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static Trace TraceBox (Vector3 start, Vector3 destination, Vector3 extents, float contactOffset, int layerMask) {
|
||||
|
||||
var result = new Trace () {
|
||||
startPos = start,
|
||||
endPos = destination
|
||||
};
|
||||
|
||||
var longSide = Mathf.Sqrt (contactOffset * contactOffset + contactOffset * contactOffset);
|
||||
var direction = (destination - start).normalized;
|
||||
var maxDistance = Vector3.Distance (start, destination) + longSide;
|
||||
extents *= (1f - contactOffset);
|
||||
|
||||
RaycastHit hit;
|
||||
if (Physics.BoxCast (center: start,
|
||||
halfExtents: extents,
|
||||
direction: direction,
|
||||
orientation: Quaternion.identity,
|
||||
maxDistance: maxDistance,
|
||||
hitInfo: out hit,
|
||||
layerMask: layerMask,
|
||||
queryTriggerInteraction: QueryTriggerInteraction.Ignore)) {
|
||||
|
||||
result.fraction = hit.distance / maxDistance;
|
||||
result.hitCollider = hit.collider;
|
||||
result.hitPoint = hit.point;
|
||||
result.planeNormal = hit.normal;
|
||||
|
||||
} else
|
||||
result.fraction = 1;
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
11
Modified fragsurf/TraceUtil/Tracer.cs.meta
Normal file
11
Modified fragsurf/TraceUtil/Tracer.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b42ff46330f0b0d4696f4b054b34550f
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user