欢迎加入Unity业内qq交流群:956187480
qq扫描二维码加群
基本上用不到,但是有时候很简单的计算却需要用到,每次使用总是生疏,总结一下,以后就可以随时来看
public Vector3 pointA;
public Vector3 pointB;
public Vector3 pointC;
void Start()
{
pointA = new Vector3(0, 0, 0);
pointB = new Vector3(0, 1, 0);
pointC = new Vector3(0, 0, 1);
//向量的运算(求两点的方向)
Vector3 aTob = pointB - pointA;
//-------------------------------------------------向量模
//计算ab两点之间的距离/向量模的三种方法
//方法一,求三维向量的平方和的平方根
float m01 = Mathf.Sqrt(Mathf.Pow(aTob.x, 2) + Mathf.Pow(aTob.y, 2) + Mathf.Pow(aTob.z, 2));
//方法二,magnitude, Returns the length of this vector
float m02 = aTob.magnitude;
//方法三,Vector3.Distance
float m03 = Vector3.Distance(pointA, pointB);
//-------------------------------------------------向量归一化
//方法一
Vector3 n01 = aTob / aTob.magnitude;
//方法二
Vector3 n02 = aTob.normalized;
//-------------------------------------------------向量的运算
//点ab也就是向量pointA,pointB之间的夹角,度数
float degree = Vector3.Angle(pointA, pointB);
//向量点乘
float resultOfDot = Vector3.Dot(pointA, pointB);
//由点乘结果求两向量的夹角时,必须先对两向量归一化处理,或者最后除以两向量模长的乘积再求反余弦
float resultOfDot01 = Vector3.Dot(pointA.normalized, pointB.normalized);
float angle01 = Mathf.Acos(resultOfDot01) * Mathf.Rad2Deg;
//向量叉乘
Vector3.Cross(pointA, pointB);
//当叉乘大于0时,两向量的夹角小于180度; 当叉乘小于0时,两向量的夹角大于180度。
Vector3 resultOfCross01 = Vector3.Cross(pointA.normalized, pointB.normalized);
float angle02 = Mathf.Asin(resultOfCross01.magnitude) * Mathf.Rad2Deg;
}
二:反弹处理
private Vector2 startSpeed = new Vector2(5, 5);//初速度。大小方向
private void Update()
{
transform.Translate(startSpeed * Time.deltaTime);
}
public void OnCollisionEnter2D(Collision2D collision)
{
//碰撞点法线
ContactPoint2D contactPoint = collision.contacts[0];
//根据入射角和法线 计算反射角
Vector2 newDir = Vector2.Reflect(startSpeed, contactPoint.normal);
startSpeed = newDir;
}