Unity3d 统一性:如何找到指定轴上向量3的值?

Unity3d 统一性:如何找到指定轴上向量3的值?,unity3d,vector,Unity3d,Vector,例如,您可以使用以下内容: public Vector3 Inertia = new Vector3(); void Update() { Inertia += transform.TransformDirection(Vector3.forward) * Input.GetAxis("Thrust") ; transform.Translate(Inertia * Time.deltaTime); } 如果你想在三维空间中驾驶宇宙飞船,拥有所有的自由度。惯性跟踪世

例如,您可以使用以下内容:

 public Vector3 Inertia = new Vector3();
 void Update()
 {
     Inertia += transform.TransformDirection(Vector3.forward) * Input.GetAxis("Thrust") ;
     transform.Translate(Inertia * Time.deltaTime);
 }
如果你想在三维空间中驾驶宇宙飞船,拥有所有的自由度。惯性跟踪世界空间中的动量,同时控件沿玩家方向的轴添加动量


但是,现在我想检查球员在当前“前进”轴上的速度。如何沿任意轴从矢量3中提取值?

如果有任意轴(称之为
)和任意矢量(称之为
矢量
),并且希望在
方向上找到
矢量
的矢量分量,则只需点积即可。(见附件)

标量投影
轴方向上的
向量的分量为:

float component = Vector3.Dot(vector, axis.normalized);
例如:如果轴是
z
轴,这将是向量的
z
分量。
分量的绝对值是投影向量的大小

矢量投影
向量
轴上的投影为:

Vector3 proj = axis.normalized * component;
我想检查一下球员当前的“前进”速度

首先

Inertia += transform.TransformDirection(Vector3.forward) * Input.GetAxis("Thrust") ;
transform.Translate(Inertia * Time.deltaTime);
可以简单地写为

Inertia += transform.forward * Input.GetAxis("Thrust");
transform.position += Inertia * Time.deltaTime;
然后,您可以将总
惯性
向量添加到
变换.前进
向量上

将一个向量投影到另一个向量上

要理解向量投影,请假设
onNormal
位于指向其方向的直线上。沿着这条线的某个地方将是距离向量尖端最近的点。投影只是在正常情况下重新缩放,使其到达直线上的该点

然后拿它的

返回此向量的长度(只读)

向量的长度是(
x*x+y*y+z*z
)的平方根

然后你可以把它乘以

对于规范化向量,如果它们指向完全相同的方向,则Dot返回1;如果它们指向完全相反的方向,则返回1;如果向量垂直,则返回0


您的解决方案总是返回一个正值。
var forwardSpeed = Vector3.Project(Inertia, transform.forward).magnitude * Vector3.Dot(Interia.normalized, transform.forward));