# Unity Vector3

namespace UnityEngine
{
public struct Vector3 : IEquatable<Vector3>
{
//这两个意义未知
public const float kEpsilon = 1E-05F;
public const float kEpsilonNormalSqrt = 1E-15F;

public float x;
public float y;
public float z;

public Vector3(float x, float y);
public Vector3(float x, float y, float z);

//下标[0][1][2]代表x,y,z    Vector3 v3 = new Vector3(0, 0, 0); v3[0] = 1;
public float this[int index] { get; set; }

public static Vector3 right { get; }
public static Vector3 left { get; }
public static Vector3 up { get; }
public static Vector3 down { get; }
public static Vector3 back { get; }
public static Vector3 forward { get; }
public static Vector3 one { get; }
public static Vector3 zero { get; }

//  Shorthand for writing Vector3(float.NegativeInfinity, float.NegativeInfinity,
//  float.NegativeInfinity).    负无穷  意义何在，用在什么地方？
public static Vector3 negativeInfinity { get; }

//  Shorthand for writing Vector3(float.PositiveInfinity, float.PositiveInfinity,
//  float.PositiveInfinity).    正无穷
public static Vector3 positiveInfinity { get; }

public float sqrMagnitude { get; }//向量长度平方
public Vector3 normalized { get; }//向量单位向量
public float magnitude { get; }//向量长度

//返回两个向量间的夹角（0-180）
public static float Angle(Vector3 from, Vector3 to);

//钳制求模  返回向量 vector 的副本，长度不超过 maxLength
public static Vector3 ClampMagnitude(Vector3 vector, float maxLength);

public static Vector3 Cross(Vector3 lhs, Vector3 rhs);

public static float Distance(Vector3 a, Vector3 b);

public static float Dot(Vector3 lhs, Vector3 rhs);

//钳制性的线性差值,返回值限定在a和b之间
public static Vector3 Lerp(Vector3 a, Vector3 b, float t);

//非钳制性的线性差值,返回值会超过a和b的范围
public static Vector3 LerpUnclamped(Vector3 a, Vector3 b, float t);

//某向量大小
public static float Magnitude(Vector3 vector);

//返回由两个向量的最大分量组成的向量。lhs(1, 2, 3),rhs(3, 5, 1),返回（3,5,3）
public static Vector3 Max(Vector3 lhs, Vector3 rhs);

public static Vector3 Min(Vector3 lhs, Vector3 rhs);

//计算当前和目标指定的点之间的位置，移动不超过 maxDistanceDelta 指定的距离。
//与Lerp（）的区别，第三个参数 Lerp（）指的是比例，MoveTowards（）指的是具体距离
//current(1, 0, 0),target(10, 0, 0),距离为9，那么maxDistanceDelta范围就是（-9，9）；
//大于9，取9，小于-9，取-9；若：取0，返回（1,0,0）；取1，返回（2,0,0）；取-1，返回（0,0,0）；移动不会超过目标,maxdistancedelta为负值时，可以用来从目标推开该向量
public static Vector3 MoveTowards(Vector3 current, Vector3 target, float maxDistanceDelta);

//某向量单位向量
public static Vector3 Normalize(Vector3 value);

//归一化 normal，归一化 tangent并且确保它垂直于 normal。
//归一化 binormal 并确保它到 normal和tangent两者之间相互垂直。
public static void OrthoNormalize(ref Vector3 normal, ref Vector3 tangent, ref Vector3 binormal);

//归一化 normal，归一化 tangent 并且确保它垂直于 normal
public static void OrthoNormalize(ref Vector3 normal, ref Vector3 tangent);

// vector 在 onNormal 上的投影
public static Vector3 Project(Vector3 vector, Vector3 onNormal);

//投影 vector 到以 planeNormal 为法向量的平面上
public static Vector3 ProjectOnPlane(Vector3 vector, Vector3 planeNormal);

//将一个向量反射出由法线定义的平面。
public static Vector3 Reflect(Vector3 inDirection, Vector3 inNormal);

//参考 MoveTowards（），最后一个参数还没理解
public static Vector3 RotateTowards(Vector3 current, Vector3 target, float maxRadiansDelta, float maxMagnitudeDelta);

//将两个向量按分量相乘。a(1, 2, 3),b(3, 5, 1),返回（3,10,3）
public static Vector3 Scale(Vector3 a, Vector3 b);

//带符号角度，暂未研究透
public static float SignedAngle(Vector3 from, Vector3 to, Vector3 axis);

//球面插值两个向量。     见图组1、图组2
public static Vector3 Slerp(Vector3 a, Vector3 b, float t);

//球面插值两个向量，不钳制。     见图组3
public static Vector3 SlerpUnclamped(Vector3 a, Vector3 b, float t);

//光滑阻尼    参数还没有完全理解
public static Vector3 SmoothDamp(Vector3 current, Vector3 target, ref Vector3 currentVelocity, float smoothTime, [DefaultValue("Mathf.Infinity")] float maxSpeed, [DefaultValue("Time.deltaTime")] float deltaTime);

public static Vector3 SmoothDamp(Vector3 current, Vector3 target, ref Vector3 currentVelocity, float smoothTime, float maxSpeed);

public static Vector3 SmoothDamp(Vector3 current, Vector3 target, ref Vector3 currentVelocity, float smoothTime);

public static float SqrMagnitude(Vector3 vector);

public bool Equals(Vector3 other);

public override bool Equals(object other);

//暂未知
public override int GetHashCode();

public void Normalize();

//将这个向量的每个分量 乘以 参数对应轴的分量。
public void Scale(Vector3 scale);

// Vector3 vector = Vector3.zero; vector.Set(0.1f, 0.2f, 0.3f);
public void Set(float newX, float newY, float newZ);

//为这个向量返回格式化良好的字符串。  transform.position.ToString("0.000")
public string ToString(string format);

public override string ToString();

public static Vector3 operator +(Vector3 a, Vector3 b);
public static Vector3 operator -(Vector3 a);
public static Vector3 operator -(Vector3 a, Vector3 b);
public static Vector3 operator *(Vector3 a, float d);
public static Vector3 operator *(float d, Vector3 a);
public static Vector3 operator /(Vector3 a, float d);
public static bool operator ==(Vector3 lhs, Vector3 rhs);
public static bool operator !=(Vector3 lhs, Vector3 rhs);
}
}

图组2

图组3

• 0
点赞
• 1
收藏 更改收藏夹
• 打赏
• 0
评论
08-02 2万+
01-19 9759
01-10 1150
07-23 787
02-25 1961
05-15 747
12-30 1317
07-03 2225
12-02 936
02-04 184
08-23 1636
10-25 149
06-11 1万+

### “相关推荐”对你有帮助么？

• 非常没帮助
• 没帮助
• 一般
• 有帮助
• 非常有帮助

wang123qian

¥2 ¥4 ¥6 ¥10 ¥20

1.余额是钱包充值的虚拟货币，按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载，可以购买VIP、C币套餐、付费专栏及课程。