public static UnityEngine.Vector3 AroundAxis(this IRandom rng, Vector3 axis)
        {
            var a = rng.Angle();

            if (VectorUtil.NearSameAxis(axis, Vector3.forward))
            {
                return(Quaternion.AngleAxis(a, axis) * VectorUtil.GetForwardTangent(Vector3.up, axis));
            }
            else
            {
                return(Quaternion.AngleAxis(a, axis) * VectorUtil.GetForwardTangent(Vector3.forward, axis));
            }
        }
        public static void DrawArrow(Vector3 start, Vector3 end, float headSize, int detail = 4)
        {
            Gizmos.DrawLine(start, end);

            var n  = Vector3.Normalize(start - end) * headSize;
            var da = 360f / (float)detail;

            for (int i = 0; i < detail; i++)
            {
                var v = (VectorUtil.NearSameAxis(n, Vector3.up)) ? Vector3.Cross(n, Vector3.up) : Vector3.Cross(n, Vector3.right);

                var q = Quaternion.AngleAxis(da * i, n) * Quaternion.FromToRotation(n, n + v * 0.25f);
                Gizmos.DrawLine(end, end + q * n);
            }
        }