Unity脚本基础和生命周期

Unity脚本语言

Unity是可视化的集成开发环境,项目开发工作可以通过可视化操作和相关属性的设置完成。
交互操作要通过脚本程序,将脚本挂载到特定的对象上,然后在合适的时机被调用执行。

Unity支持三种脚本:
1.Javascript for Unity(2017.2版本)
2.C# Script
3.Boo(2014年)

Unity脚本生命周期

1)Awake():在游戏开始之前,脚本实例化、场景加载时被调用,Awake用来创建游戏对象、初始化变量或游戏状态,只被调用一次;

(2)Start():游戏启动后渲染第一帧之前,被调用并只被调用一次,用于数据的初始化操作;

(3)Update():Start方法调用结束以后,Update方法被调用,并且以后每一帧都会被调用。

脚本
生命周期
案例:测试脚本中的各方法调用顺序和次数。

publicclass LifeCycle : MonoBehaviour {
  void Awake(){
      print ("Awake...");  }
  void OnEnable(){
      print ("OnEnable...");  }
  void Start(){
      print ("Start...");}
  void Update(){
      print ("Update...");  }
  void FixedUpdate(){
      print ("FixedUpdate...");  }
  void LateUpdate() {
      print ("LateUpdate...");  }
  void OnGUI(){
      print ("OnGUI...");  }
  void OnDisable(){
      print ("OnDisable...");  }
  void OnDestroy(){
      print ("OnDestroy...");  }

}
  1. MonoBehaviour类
    MonoBehaviour类是所有脚本的基类,当创建一个新的脚本时,该脚本都要继承MonoBehaviour类。
    在这里插入图片描述
  2. 向量类

(1)向量基本概念

既有大小又有方向的量叫做向量(亦称矢量)。3D游戏开发中经常用到向量和向量的运算,Unity中提供了完整的向量和向量操作方法。
Unity中向量就是类,包括平面空间的二维向量Vector2类和立体空间的三维向量Vector3类,另外还有Vector4类。

(2)Vector3

Vector3类表示三维空间的向量,包括x、y、z三个坐标。Vector3类可以在实例化时进行赋值,也可以实例化后分别给x、y、z三个分量赋值。

           Vector3 v1 = new Vector3();

            Vector3 v2 = new Vector3(1, 1, 1);

            v1.x= 2;

            v1.y= 2;

            v1.z= 2;

            print(v1);

            print(v2);

(3)Vector3类的常量
在这里插入图片描述

  1. Transform类

Transform是一个类,游戏对象上的Transform组件是Transform类的一个实例,用transform表示。
transform
4. Time类
Time类是获取时间信息的类。

实例:脚本控制游戏对象

本实例编写完成一个脚本,实现控制对象运动。

(1)创建Cube立方体和Plane平面对象,并分别赋予红色和绿色材质,将平面对象的Position的y轴值设置为-0.5,Scale的x、y、z值都设置为30。

(2)创建脚本trans_con.cs,挂载到立方体上。

(3)编写脚本代码。

(4)测试运行,分别按下W、S、A、D键,上、下、左、右箭头键,PageUp、PageDown键,观察立方体运行和变换效果。

(5)导入飞机模型,将airplane文件夹下的FBX模型文件airplane.FBX和贴图文件plane_texture.png拖动到Assets中。Unity会自动创建材质,将材质的主贴图设置为plane_texture.png纹理图片,材质会包裹住飞机模型。将飞机模型拖动到场景中,创建一个飞机对象airplane。

(6)将脚本trans_con.cs应用到飞机对象airplane上。

(7)设置摄像机的平滑跟随。导入资源包Scripts.unityPackage,为MainCamera添加SmoothFollow组件,将跟随目标参数Target设置为airplane(直接将airplane拖动到Target参数后面的文本框中)。

(8)运行效果如图所示。
实例图
1.创建一个Cube和Plane,添加颜色,创建一个脚本,使Cube可以上下左右移动和旋转

public int movespeed = 10;//移动初始值
public int respeed = 20;//旋转初始值
void Update () {
		//移动
		if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))
		{
			transform.Translate(0, 0, movespeed * Time.deltaTime);//延Z轴移动
		}
		else if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))
		{
			transform.Translate(0, 0, -movespeed * Time.deltaTime);
		}
		else if(Input.GetKey(KeyCode.A))
		{
			transform.Translate(-movespeed * Time.deltaTime,0, 0 );
		}
		else if (Input.GetKey(KeyCode.D) )
		{
			transform.Translate(movespeed * Time.deltaTime,0, 0);
		}
		//	旋转
		if (Input.GetKey(KeyCode.LeftArrow)){
			transform.Rotate(0,-respeed * Time.deltaTime,0);
		}else if (Input.GetKey(KeyCode.RightArrow))
		{
			transform.Rotate(0, respeed * Time.deltaTime, 0);
		}
	}
}
//缩放
		if (Input.GetKey(KeyCode.PageUp))
		{
			scale += 0.05f;
			transform.localScale = new Vector3(scale, scale, scale);
		}
		else if (Input.GetKey(KeyCode.PageDown))
		{
			scale -= 0.05f;
			transform.localScale = new Vector3(scale, scale, scale);
		}
	}
发布了24 篇原创文章 · 获赞 5 · 访问量 535

猜你喜欢

转载自blog.csdn.net/weixin_46178009/article/details/105005321