第一种
transform.Rotate(new Vector3(90, 0, 0));
transform.Rotate(0,25*Time.deltaTime ,0,Space.Self );
第二种
transform.Rotate(Vector3.up ,90);
第三种
transform.rotation = Quaternion.Euler(45, 45, 45);
第四种
Quaternion targetRotation = Quaternion.Euler(45, 45, 45);
transform.rotation=Quaternion.Slerp(transform.rotation,targetRotation,Time.deltaTime *3);
第五种
transform.RotateAround(new Vector3(5, 5, 1), Vector3.up, 20*Time.deltaTime);
//绕着某个点,绕着哪个轴,每帧转多少度
第六种
transform.eulerAngles = new Vector3(90, 0, 0);
transform.localEulerAngles = new Vector3(90, 0, 0);
2),UNITY中向量的运用
在unity中是三维坐标,绿色代表Y轴,红色代表X轴,蓝色代表Z轴。
如果需要只在平面进行旋转,就将Z轴永远等于0,XY轴变换即可。
如图:
using UnityEngine;
using System.Collections;
public class arrow : MonoBehaviour {
void Update()
{
if (Input.GetMouseButton(0)) {
//获取鼠标的坐标,鼠标是屏幕坐标,Z轴为0,这里不做转换
Vector3 mouse = Input.mousePosition;
//获取物体坐标,物体坐标是世界坐标,将其转换成屏幕坐标,和鼠标一直
Vector3 obj=Camera.main.WorldToScreenPoint(transform.position);
//屏幕坐标向量相减,得到指向鼠标点的目标向量,即黄色线段
Vector3 direction = mouse - obj;
//将Z轴置0,保持在2D平面内
direction.z = 0f;
//将目标向量长度变成1,即单位向量,这里的目的是只使用向量的方向,不需要长度,所以变成1
direction = direction.normalized;
//当目标向量的Y轴大于等于0.4F时候,这里是用于限制角度,可以自己条件
if (direction.y >= 0.4f)
{
//物体自身的Y轴和目标向量保持一直,这个过程XY轴都会变化数值
transform.up = direction;
}
}
}
}
**
**
假设 物体1 obj1(x1,x2) 绕 物体二 obj2(x2,y2) 旋转
获取两个物体的距离 x1 = this.obj1.transform.getLocation().x;
y1 = this.obj1.transform.getLocation().y;
x2 = this.obj2.transform.getLocation().x;
y2 = this.obj2.transform.getLocation().y;
只需要设置一个角度angle变量 初始值为0 即 public float angle = 0;
1)把物体2拉到物体1得正上方(角度为0的地方) 在Awake函数里获取两个物体间的dis(距离),并认为是固定值保持不变
2)
/////////令 x2 = x1 * tan(angle)
/////public int dis = Vector3.dis() //3D距离得运算
public int dis = Math.Sqrt((x2-x1)(x2-x1) + (y2-y1)(y2-y1)) //2D向量 求出斜边的向量(包括大小和方向)
x2 = dis * cos(angle) // x2 = x1加上斜边在x轴上的分量
x2 = dis * sin(angle) // y2 = y1加上斜边在y轴上的分量