Unity引擎中的一些常用方法
发射射线
从任意GameObject或者屏幕上鼠标位置发射。
void Update()
{
// 点击鼠标左键时发射射线
if (Input.GetMouseButtonDown(0))
{
// 从鼠标所在的位置发射
//Camera currentCamera = Camera.main;
//Vector2 screenPosition = Input.mousePosition;
//Ray ray = currentCamera.ScreenPointToRay(screenPosition);
// 从物体发射射线,替换成自己的GameObject的transform
Ray ray = new Ray(transform.position, transform.forward);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
print(hit.transform.name);
}
}
}
旋转Vector3
计算一个Vector3绕旋转中心旋转指定角度后所得到的向量:
/// <summary>
/// 计算一个Vector3绕旋转中心旋转指定角度后所得到的向量。
/// </summary>
/// <param name="source">旋转前的源Vector3</param>
/// <param name="axis">旋转轴</param>
/// <param name="angle">旋转角度</param>
/// <returns>旋转后得到的新Vector3</returns>
public Vector3 V3RotateAround(Vector3 source, Vector3 axis, float angle)
{
Quaternion q = Quaternion.AngleAxis(angle, axis);// 旋转系数
return q * source;// 返回目标点
}
旋转Quaternion
下面的方法可以获得GameObject绕指定轴旋转给定角度后的rotation,其返回值是一个四元数。注意该方法只计算原地旋转,即绕GameObject自身锚点旋转,不能设置其他旋转中心。
/// <summary>
/// 获得GameObject绕轴 axis 旋转 angle 角度后的rotation。
/// </summary>
/// <param name="obj">旋转对象</param>
/// <param name="axis">旋转轴</param>
/// <param name="angle">旋转角度</param>
/// <param name="apply">是否将旋转应用到GameObject</param>
/// <returns>旋转后的rotation</returns>
public Quaternion QRotateAround(Transform obj, Vector3 axis, float angle, bool apply = false)
{
Vector3 forward = Quaternion.AngleAxis(angle, axis) * obj.forward;
Vector3 up = Quaternion.AngleAxis(angle, axis) * obj.up;
Quaternion result = Quaternion.LookRotation(forward, up);
if (apply) obj.rotation = result;
return result;
}