互联网第一工具箱,让工作变得更为简单!
  • 1233阅读
  • 0回复

[易语言开发] unity 角度的偏转和相对位置的偏移


会员


发帖
46
楼主  发表于:2020/9/18 10:23
using UnityEngine;

using System.Collections;


public class JarodMathTools : MonoBehaviour {


public static JarodMathTools Static;


// Use this for initialization


private Transform transformOffset;


void Start () {

Static = this;


transformOffset = transform.GetChild (0);

}

// Update is called once per frame

void Update () {

}


//根据起点和终点,得到方向单位向量

public Vector3 getVector3(Vector3 beginPosition,Vector3 targetPosition)

{

return (beginPosition - targetPosition).normalized;

}


//根据起点和终点,得到欧拉角

public Vector3 getEulerAngle(Vector3 beginPosition,Vector3 targetPosition)

{

Quaternion q4 = Quaternion.LookRotation (beginPosition - targetPosition);

return q4.eulerAngles;

}


//根据向量,得到欧拉角

public Vector3 getEulerAngle(Vector3 dir)

{

Quaternion q4 = Quaternion.LookRotation (dir);

return q4.eulerAngles;

}


//根据起点和终点,得到四元数

public Quaternion getQuaternion(Vector3 beginPosition,Vector3 targetPosition)

{

return Quaternion.LookRotation(beginPosition - targetPosition);

}


//根据向量返回四元数

public Quaternion getQuaternion(Vector3 dir)

{

return Quaternion.LookRotation (dir);

}


//根据四元数,返回单位方向向量

public Vector3 getVector3(Quaternion q4)

{

transform.rotation = q4;

return transform.forward;

}


//根据欧拉角度,返回单位向量

public Vector3 getVector3(float xP,float yP,float zP)

{

Quaternion q4 = Quaternion.Euler(new Vector3(xP,yP,zP));

transform.rotation = q4;

return transform.forward;

}


//根据欧拉角度,返回单位向量

public Vector3 getVector3(Vector3 eulerAngle)

{

transform.rotation = Quaternion.Euler (eulerAngle);

return transform.forward;

}


//得到X轴的角度

public float getEulerAngleX(Transform trans)

{

return trans.rotation.x;

}

//得到Y轴的角度

public float getEulerAngleY(Transform trans)

{

return trans.rotation.y;

}


//得到Z轴的角度

public float getEulerAngleZ(Transform trans)

{

return trans.rotation.z;

}


//求单位向量

public Vector3 getUnitVector3(Vector3 vec)

{

return vec.normalized;

}


//获取单位速度

public Vector3 getVector3(Vector3 vec,float moveSpeed)

{


return vec * moveSpeed;

}


//得到反方向的向量

public Vector3 getOppositeVector3(Vector3 vec)

{

return Vector3.zero - vec;

}


//得到偏移X轴后,新的向量

public Vector3 getVector3OffsetX(Vector3 dir,float xP)

{

Quaternion q4 = Quaternion.LookRotation (dir);

Vector3 eulerAngle = q4.eulerAngles;

eulerAngle.x += xP;

transform.rotation = Quaternion.Euler (eulerAngle);

return transform.forward;


}

//得到偏移Y轴后,新的向量

public Vector3 getVector3OffsetY(Vector3 dir,float yP)

{

Quaternion q4 = Quaternion.LookRotation (dir);

Vector3 eulerAngle = q4.eulerAngles;

eulerAngle.y += yP;

transform.rotation = Quaternion.Euler (eulerAngle);

return transform.forward;

}

//得到偏移Z轴后,新的向量

public Vector3 getVector3OffsetZ(Vector3 dir,float zP)

{

Quaternion q4 = Quaternion.LookRotation (dir);

Vector3 eulerAngle = q4.eulerAngles;

eulerAngle.z += zP;

transform.rotation = Quaternion.Euler (eulerAngle);

return transform.forward;

}


//得到模型相对 (0,0,0)点的 位置,在模型旋转后,原本的位置,新的位置

public Vector3 getPositionOffset(Vector3 position,float xAngle,float yAngle,float zAngle)

{

transformOffset.localPosition = position;

transform.rotation = Quaternion.Euler(new Vector3(xAngle,yAngle,zAngle));

return transformOffset.position;

}


//得到某一点,旋转后的位置

public Vector3 getPositionOffset(Vector3 position,Quaternion q4)

{

transformOffset.localPosition = position;

transform.rotation = q4;

return transformOffset.position;

}


}



快速回复