public BoundingBoxVoxelBounds3(Collider collider, IgnoreAxis ignoreAxis = IgnoreAxis.none) { if (collider is MeshCollider meshCollider) { Bounds meshBounds = meshCollider.sharedMesh.bounds; center = collider.transform.localToWorldMatrix.MultiplyPoint(meshBounds.center); scale = Vector3.Scale(collider.transform.lossyScale, meshBounds.size); rotation = collider.transform.rotation; } else if (collider is BoxCollider boxCollider) { center = collider.transform.localToWorldMatrix.MultiplyPoint(boxCollider.center); scale = Vector3.Scale(collider.transform.lossyScale, boxCollider.size); rotation = collider.transform.rotation; } else if (collider is SphereCollider sphereCollider) { center = collider.transform.localToWorldMatrix.MultiplyPoint(sphereCollider.center); scale = Vector3.Scale(collider.transform.lossyScale, Vector3.one * sphereCollider.radius * 2f); rotation = collider.transform.rotation; } else { center = collider.bounds.center; scale = collider.bounds.size; rotation = Quaternion.identity; } this.ignoreAxis = ignoreAxis; }
public BoundingBoxVoxelBounds3(Vector3 center, Vector3 scale, Quaternion rotation, IgnoreAxis ignoreAxis = IgnoreAxis.none) { this.center = center; this.scale = scale; this.rotation = rotation; this.ignoreAxis = ignoreAxis; }
/// <summary> /// Already calculates delta-time, no need to use in function call. /// </summary> public static Transform LookAtOverTime(this Transform transform, Transform target, float speed, IgnoreAxis ignoreAxi = IgnoreAxis.none) { Vector3 targetDirection = target.position - transform.position; switch (ignoreAxi) { case IgnoreAxis.x: targetDirection.x = 0; break; case IgnoreAxis.y: targetDirection.y = 0; break; case IgnoreAxis.z: targetDirection.z = 0; break; default: break; } var targetRotation = Quaternion.LookRotation(targetDirection); var deltaAngle = Quaternion.Angle(transform.rotation, targetRotation); if (deltaAngle != 0.00F) { transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, speed * Time.deltaTime / deltaAngle); } return(transform); }
public bool IsIgnoringAxis(IgnoreAxis axis) { return((axis & ignoreAxis) != IgnoreAxis.none); }