今天有小伙伴来问我向量在Unity中的用法,在此记录一下。
需求:空间中有两点A(x1,y1,z1),B(x2,y2,z2),求点A向B移动m距离的点C的坐标。
如果不会向量的小伙伴们可能需要算出AB的距离,再乘以比例的方法来获得C点的坐标(小伙伴甚至想用三角函数算)。
无疑以上的方法都有点呆,效率也会比较低,再多其他的需求更加无法实现。
其实用向量很简单,直接获取AB的向量取单位向量再乘一下距离就行了。
using UnityEngine;
using UnityEngine.Events;
public class Main : MonoBehaviour
{
public Vector3 A;
public Vector3 B;
public float m;//移动距离
void Start()
{
Vector3 AB = B - A;//获得AB的向量
Vector3 normalized = AB.normalized;//直接获取单位向量
Vector3 C = normalized * m;
}
}
需求:空间中有两点A(x1,y1,z1),B(x2,y2,z2),求点A向以AB为轴顺时针90度方向(垂直于AB),移动m距离的点C的坐标。
可以看到这里多了一个角度的条件,其实官方也有API可以直接用:
using UnityEngine;
using UnityEngine.Events;
public class Main : MonoBehaviour
{
public Vector3 A;
public Vector3 B;
public float m;//移动距离
void Start()
{
Vector3 AB = B - A;//获得AB的向量
Vector3 normalized = AB.normalized;//直接获取单位向量
// Quaternion.AngleAxis第一个参数是角度,第二个是方向,最后乘以向量获得新的向量
Vector3 fixNormalized = Quaternion.AngleAxis(90, new Vector3(0, 90, 0)) * normalized;
Vector3 C = normalized * m;
}
}
这样就能很方便地算出位移了~
网友评论