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));