- Transform
变换
Transform组件是Unity3D的重点之一,主要用于控制物体的旋转、移动、缩放。
API:application program interface 应用程序接口
1)成员变量
A、transform.position位置移动
transform.position = new Vector3(+10, 0, 0);
B、transform.rotation旋转角度
transform.rotation = Quaternion.Euler(0, 45, 0);
C、transform.localScale 自身缩放
transform.localScale=new Vector3(2,1,1);
- 成员方法
A、Translate (translation : Vector3, relativeTo : Space = Space.Self) : void
向某方向移动物体多少距离。
如果要操作脚本当前的gameObject,则可以省略不写要操作的gameObject。
例如:
transform.Translate(Vector3.up)
让游戏对象沿着vector3向量的垂直方向移动
向前移动
transform.Translate(Vector3.forwad);
transform.Translate(new Vector3(0,0,1));
transform.Translate(0,0,1);
B、Rotate (eulerAngles : Vector3, relativeTo : Space = Space.Self) : void
旋转
游戏对象围绕Y轴旋转
transform.Rotate(new Vector3(0,1,0));
C、RotateAround (point : Vector3, axis : Vector3, angle : float) : void
按照多少度在世界坐标的某位置轴旋转物体。
一个游戏对象围绕另一个游戏对象旋转
transform.RotateAround(sphere.position,Vector3.up,1)
transform.rotation和Rotate的区别:
Rotate()方法是:旋转多少度。在原有的基础上累加,即旋转了多少角度
rotation属性是:旋转到某个角度,就是是在update中每帧都执行。但每次旋转到的角度都是5,所以是旋转到5度。
比如你只想让他旋转到多少, 用rotation; 假如想让他一直转,可以用Rotate
rotation直接改变了数值, 以达到旋转效果
Rotate应用一个的旋转角度每秒1度慢慢的旋转物体
- Vector3
Unity3D_向量(Vector3)数学基础_bobo553443的博客-CSDN博客_vector3
向量(Vector3)
既有大小又有方向的量叫做向量。在空间中,向量用一段有方向的线段来表示。
可用于描述具有大小和方向两个属性的物理量,例如物体运动的速度、加速度、摄像机观察方向、刚体受到的力等都是向量。
如果v1和v2都表示一个向量的话,那么v3是一个从v1的尾部指向v2的头部的一个带有方向箭头的一条射线。
案例:立方体位置相加
public Transform a;
public Transform b;
public Transform c;
void Update ()
{
b.position = new Vector3(5, 0, 0);
c.position = new Vector3(-5, 0, 0);
a.position = b.position + c.position;
}
- GameObject
GameObject和gameObject的区别
GameObject是游戏对象类的基类
gameObject是脚本挂载的对象
案例1:脚本在摄像机上面挂载
public GameObject cube;
void Update ()
{
cube.transform.localScale += new Vector3(1, 0, 0);
}
案例2:脚本在自身上面挂载
void Update ()
{
//gameObject.transform.localScale+= new Vector3(1, 0, 0);
transform.localScale+= new Vector3(1, 0, 0);
}
- Time
Time.time:表示从游戏开始到现在的时间,会随着游戏的暂停而停止计算。
Time.deltaTime:表示从上一帧到当前帧的时间,以秒为单位。
Time.timeScale:时间缩放,默认值为1,若设置<1,表示时间减慢,若设置>1,表示时间加快,可以用来加速和减速游戏,非常有用。
案例1:用deltaTime控制对象移动
public GameObject cube;
float speed = 3f;
void Update ()
{
cube.transform.Translate(Vector3.forward * Time.deltaTime * speed);
}
案例2:用timeScale对游戏进行加速、减速或暂停等操作
int i = 0;
public void GoForward()
{
i++;
if (i % 2 != 0)
{
Time.timeScale = 1;
}
else
{
Time.timeScale = 0;
}
}
void Update ()
{
cube.transform.Translate(Vector3.forward * Time.deltaTime * speed);
}
- 克隆游戏对象
//在预设体的位置克隆游戏对象
GameObject go1=Instantiate(cube);
//在固定位置克隆游戏对象
//Quaternion.identity 游戏对象不旋转:Quaternion(0,0,0,0)
GameObject go2 =Instantiate(cube,new Vector3(0,0,5),Quaternion.identity);
- 销毁游戏对象
Destroy(go1); //直接销毁对象go1
Destroy(go2,3); //停3秒后销毁对象go2
- 查找游戏对象
通过名称来查找游戏对象
GameObject cube1=GameObject.Find("Player");
GameObject cube2=GameObject.FindWithTag("Player");
- 添加、获取组件
//1、把Move这个脚本加到cube这个游戏对象上
cube.AddComponent("Move");
//2、给游戏物体添加刚体
cube.AddComponent("Rigidbody");
//3、给游戏物体添加球体碰撞器
cube.AddComponent("BoxCollider");
//1、获取脚本组件Move
Move m=cube.GetComponent<Move>();
//2、获取刚体组件
Rigidbody r=cube.GetComponent<Rigidbody>();
- Random
float a=Random.value; //返回0.0(包括)到1.0(包括)之间的数。
int b=Random.Range(0,100) ; //包括最小但不包括最大
float c=Random.Range(0.0f,5.5f); //包括最大和最小
- Input
- 鼠标事件
GetMouseButton(0):按下鼠标左键不动,程序会一直运行,松开左键程序停止运行。
GetMouseButton(2):按下鼠标中键不动,程序会一直运行,松开中键程序停止运行。
GetMouseButton(1):按下鼠标右键不动,程序会一直运行,松开右键程序停止运行。
GetMouseButtonDown(0):按下鼠标左键时,程序运行一次
GetMouseButtonDown(1):按下鼠标右键时,程序运行一次
GetMouseButtonUp(2):按下鼠标中键时,程序不运行,松开中键时,程序运行一次。
if(Input.GetMouseButton(0)){
执行语句;
}
- 键盘事件
GetKey 当通过名称指定的按键被用户按住时返回true
GetKeyDown 当用户按下指定名称的按键时的那一帧返回true。
GetKeyUp 在用户释放给定名字的按键的那一帧返回true。
GetAxis("Horizontal")和GetAxis("Vertical") 水平轴和垂直轴
if(Input.GetKey("Down")){
执行语句;
}
案例:用方向键或WASD键来模拟物体移动
float speed = 3f;
void Update () {
//float h = Time.deltaTime * speed;
//按下WSAD键使游戏对象前后左右移动
/*if (Input.GetKey(KeyCode.A))
{
transform.Translate(new Vector3(-h, 0, 0));
}
if (Input.GetKey(KeyCode.D))
{
transform.Translate(new Vector3(h, 0, 0));
}
if (Input.GetKey(KeyCode.W))
{
transform.Translate(new Vector3(0, 0, h));
}
if (Input.GetKey(KeyCode.S))
{
transform.Translate(new Vector3(0, 0, -h));
}*/
//Horizontal
//Vertical
float h= Input.GetAxis("Horizontal")*Time.deltaTime*speed;
float v = Input.GetAxis("Vertical") * Time.deltaTime * speed;
//transform.Translate(h, 0, v);
transform.Translate(new Vector3(h, 0, v));
}
- 自定义按钮
GetButton 根据按钮名称返回true当对应的虚拟按钮被按住时。
GetButtonDown 在给定名称的虚拟按钮被按下的那一帧返回true。
GetButtonUp 在用户释放指定名称的虚拟按钮时返回true。
案例:点击鼠标左键,给物体加一个力
if (Input.GetButtonDown("Fire1"))
{
GameObject go = Instantiate(cube);
Rigidbody r = go.GetComponent<Rigidbody>();//从预设体身上获取刚体组件
r.AddForce(0,0,10000);//给预设体加力
}