UnityAPI-Transform

  • Post author:
  • Post category:其他

1. 介绍
  1. Transform类用于对控件进行移动变换。
  2. Transform类通常会随着一个控件的实例化而出现,而不用于新建立一个Transform类。
  3. 在一个实例化的控件内,通常有Transform类名transform供变换使用。
2. 成员
  1. transform.position 在世界空间坐标控件的位置
  2. transform.localPosition 在相对于父组件控件的位置
  3. transform.eulerAngles 旋转角度
  4. transform.localEulerAngles 相对于父组件旋转角度
  5. transform.parent 父组件对象
  6. transform.childCount 子组件数量
  7. transform.localScale 相对于父组件缩放值
  8. transform.lossyScale 相对于世界缩放值(只读)
  9. transform.forward/right/up 自身z,x,y轴的正方向
  10. 虽然可以直接对transform进行操作来实现动画效果,但因为帧率未必为定值,并且有时还想确定变换进行的时间等,因此变换时通常使用函数进行变换。
  11. 变换函数通常和Time.deltaTime(帧刷新间隔)联用,相乘以保证移动时每秒固定变换入参的距离
  12. transform.Translate(Vector3, Space);将物体沿着入参的方向移动。Space有两个入参,Space.World或者Space.self,表示以什么作为坐标系参考。
3. 函数
  1. transform.Rotate(Vector3);将物体沿着入参的方向旋转。
  2. transform.RotateAround(Vector3, Vector3, float) 将物体以第一个Vector3为圆心,以第二个Vector3(向量)为旋转轴,旋转float度
  3. lookat
  4. transform.TransformPoint(Vector3) 得到以自身坐标系下的该点,在世界坐标下为何处。(考虑旋转角)
  5. transform.InverseTransformPoint(Vector3) 得到在世界坐标下的该点,以自身坐标系下为何处。(考虑旋转角)

RectTranform

RectTransformUtility.ScreenPointToLocalPointInRectangle(UGUICanvas, new Vector2(Input.mousePosition.x, Input.mousePosition.y), mainCamera, out mousePos);

鼠标位置转换为UI坐标

求物体XZ平面旋转夹角

float angle = Vector3.Angle (fromVector, toVector); //求出两向量之间的夹角
Vector3 normal = Vector3.Cross (fromVector,toVector);//叉乘求出法线向量
angle *= Mathf.Sign (Vector3.Dot(normal,upVector));  //求法线向量与物体上方向向量点乘,结果为1或-1,修正旋转方向
// 目标方向
Vector3 targetDir = new Vector3(h, 0, v).normalized;
// 求出向量角
Quaternion newRotation = Quaternion.LookRotation(targetDir, Vector3.up);
// 向目标向量角旋转
transform.rotation = Quaternion.Lerp(transform.rotation, newRotation, rotateSpeed * Time.deltaTime);

版权声明:本文为qq_50682713原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。