public OBBBoxCollider(Vector3 center, Vector3 size, Quaternion rotation, ColliderChoice colliderChoice, Transform appendTransform = null, CollideFunc collideFunc = CollideFunc.OutsideLimit) { colliderRead.isOpen = true; this.appendTransform = appendTransform; colliderRead.staticRotation = appendTransform ? appendTransform.rotation * rotation:rotation; colliderRead.positionOffset = appendTransform ? appendTransform.InverseTransformPoint(center) : center; colliderRead.boxSize = new Vector3(Mathf.Abs(size.x), Mathf.Abs(size.y), Mathf.Abs(size.z)); colliderRead.colliderType = ColliderType.OBB; colliderRead.collideFunc = collideFunc; colliderRead.colliderChoice = colliderChoice; }
public void CheckValue() { radius = radius < 0 ? 0 : radius; length = length < 0 ? 0 : length; boxSize = boxSize.normalized * boxSize.magnitude; staticDirection = staticDirection == Vector3.zero ? Vector3.up : staticDirection; staticRotation = Quaternion.FromToRotation(Vector3.up, staticDirection); if (((int)colliderChoice) == 0) { colliderChoice = ColliderChoice.Other; } }
public OBBBox(Vector3 center, Vector3 range, Vector3 direction, ColliderChoice colliderChoice, Transform appendTransform = null, CollideFunc collideFunc = CollideFunc.Outside) { OBBposition = appendTransform ? appendTransform.InverseTransformPoint(center) : center; OBBRotation = appendTransform ? appendTransform.rotation * Quaternion.FromToRotation(Vector3.up, direction) : Quaternion.FromToRotation(Vector3.up, direction); this.appendTransform = appendTransform; colliderRead.staticNormal = OBBRotation; colliderRead.positionOffset = OBBposition; colliderRead.boxSize = range * 0.5f; colliderRead.colliderType = ColliderType.OBB; colliderRead.collideFunc = CollideFunc.Outside; colliderRead.colliderChoice = colliderChoice; }
public OBBBoxCollider(Vector3 center, Vector3 range, Vector3 direction, ColliderChoice colliderChoice, Transform appendTransform = null, CollideFunc collideFunc = CollideFunc.OutsideLimit) { colliderRead.isOpen = true; OBBposition = appendTransform ? appendTransform.InverseTransformPoint(center) : center; OBBRotation = appendTransform ? appendTransform.rotation * Quaternion.FromToRotation(Vector3.up, direction) : Quaternion.FromToRotation(Vector3.up, direction); this.appendTransform = appendTransform; colliderRead.staticRotation = OBBRotation; colliderRead.positionOffset = OBBposition; colliderRead.boxSize = new Vector3(Mathf.Abs(range.x * 0.5f), Mathf.Abs(range.y * 0.5f), Mathf.Abs(range.z * 0.5f)); colliderRead.colliderType = ColliderType.OBB; colliderRead.collideFunc = CollideFunc.OutsideLimit; colliderRead.colliderChoice = colliderChoice; }
public void CheckValue() { radius = radius < 0 ? 0 : radius; length = length < 0 ? 0 : length; if (length == 0 && colliderType == ColliderType.Capsule) { colliderType = ColliderType.Sphere; } boxSize = boxSize.normalized * boxSize.magnitude;//OYM:我当初为啥要写这一段啊... staticDirection = staticDirection == Vector3.zero ? Vector3.up : staticDirection; staticRotation = Quaternion.FromToRotation(Vector3.up, staticDirection); if (((int)colliderChoice) == 0) { colliderChoice = ColliderChoice.Other; } }
public SphereCollider(float radius, Vector3 positionOffset, ColliderChoice colliderChoice, Transform appendTransform = null, CollideFunc collideFunc = CollideFunc.Outside) { colliderRead.radius = radius; colliderRead.colliderType = ColliderType.Sphere; colliderRead.collideFunc = CollideFunc.Outside; colliderRead.colliderChoice = colliderChoice; if (appendTransform != null) { this.appendTransform = appendTransform; colliderRead.positionOffset = Quaternion.Inverse(appendTransform.rotation) * positionOffset; } else { colliderRead.positionOffset = positionOffset; } }
public SphereCollider(float radius, Vector3 positionOffset, ColliderChoice colliderChoice, Transform appendTransform = null, CollideFunc collideFunc = CollideFunc.OutsideLimit) { colliderRead.isOpen = true; colliderRead.radius = radius; colliderRead.colliderType = ColliderType.Sphere; colliderRead.collideFunc = CollideFunc.OutsideLimit; colliderRead.colliderChoice = colliderChoice; if (appendTransform != null) { this.appendTransform = appendTransform; colliderRead.positionOffset = positionOffset; } else { colliderRead.positionOffset = positionOffset; } }
public void CheckValue() { radius = radius < 0 ? 0 : radius; length = length < 0 ? 0 : length; if (Application.isPlaying) { if (length == 0 && colliderType == ColliderType.Capsule) { colliderType = ColliderType.Sphere; } } staticDirection = math.all(staticDirection == float3.zero) ? new float3(0, 1, 0) : math.normalize(staticDirection); //OYM:float3.up staticRotation = Quaternion.FromToRotation(Vector3.up, staticDirection); if (((int)colliderChoice) == 0) { colliderChoice = ColliderChoice.Other; } }
public CapsuleCollider(float radius, Vector3 pointHead, Vector3 pointTail, ColliderChoice colliderChoice, Transform appendTransform = null, CollideFunc collideFunc = CollideFunc.Outside) { colliderRead.colliderType = ColliderType.Capsule; colliderRead.collideFunc = collideFunc; colliderRead.colliderChoice = colliderChoice; colliderRead.radius = radius; colliderRead.length = (pointHead - pointTail).magnitude; if (appendTransform != null) { this.appendTransform = appendTransform; colliderRead.staticDirection = Quaternion.Inverse(appendTransform.rotation) * (pointTail - pointHead); colliderRead.positionOffset = appendTransform.InverseTransformPoint(pointHead); } else { colliderRead.positionOffset = pointHead; colliderRead.staticDirection = pointTail - pointHead; } }
public CapsuleCollider(float radius, float length, Vector3 positionOffset, Vector3 direction, ColliderChoice colliderChoice, Transform appendTransform = null, CollideFunc collideFunc = CollideFunc.OutsideLimit) { colliderRead.isOpen = true; colliderRead.colliderType = ColliderType.Capsule; colliderRead.collideFunc = collideFunc; colliderRead.colliderChoice = colliderChoice; colliderRead.radius = radius; colliderRead.length = length; if (appendTransform != null) { this.appendTransform = appendTransform; colliderRead.staticDirection = Quaternion.Inverse(appendTransform.rotation) * (direction == Vector3.zero ? Vector3.up : direction); colliderRead.positionOffset = Quaternion.Inverse(appendTransform.rotation) * positionOffset; } else { colliderRead.positionOffset = positionOffset; colliderRead.staticDirection = direction == Vector3.zero?Vector3.up:direction; } }
public static float CheckNearstPointToSegment(float MaxLength, Vector3 position, Vector3 direction, ColliderChoice choice, List <ADBRuntimePoint> pointTrans) { if (pointTrans == null || pointTrans.Count == 0) { return(MaxLength); } for (int i = 0; i < pointTrans.Count; i++) { if ((pointTrans[i].pointRead.colliderChoice & choice) == 0) { continue; } if (direction == Vector3.zero) { MaxLength = Mathf.Min(MaxLength, (position - pointTrans[i].trans.position).magnitude); } else { Vector3 nearstPoint = position + direction * Mathf.Clamp01(Vector3.Dot(pointTrans[i].trans.position - position, direction) / direction.sqrMagnitude); MaxLength = Mathf.Min(MaxLength, (nearstPoint - pointTrans[i].trans.position).magnitude - 0.001f); } } return(MaxLength); }