Unity 任何要绑定在 GameObject 上的脚本都必须继承自 MonoBehaviour。MonoBehaviour是Unity中所有自定义脚本类的基类,当我们创建一个类时Unity会默认继承自MonoBehaviour,许多常用的类都属于组件, 如 Transform,Camera,Light 和 Animation 等。所有的 GameObject 上都绑定了一个 Transform 组件, 且该组件无法被删除.
这些类我们不能够通过new的方法创建类实例,只有Unity在内部觉得能够创建实例的时候才会创建当前类的实例,在需要销毁的时候由Unity内部销毁。
可以将Unity中的脚本常用类分为四个大类:
1.宏观控制类
主要是 针对Unity程序中的某一方面进行宏观控制。
包括:
Application -- 应用程序类
Input -- 输入类
Physics -- 物理引擎类
Resources -- 资源类
Time -- 时间类
等等
2.游戏对象(GameObject)类
由于Unity是面向组件开发的,可以说追根溯源组件起到了根本性的作用,因此对于GameObject类没有太多的方法,更多的是将内容交给了组件类。
3.组件(Component)类
脚本开发中的组件类,跟图形界面的检视面板正好是对应起来的,这个在前面我们也提到过。每个游戏对象的细节设置与操控都需要借助组件类来完成。
在常用组件类中,有两个继承关系需要特别说明:
(1)角色控制器类(CharacterController)类继承于碰撞器(Collider)类
(2)有一组类并不直接继承于组件类,而是通过继承Behavior类间接的继承,包括我们熟知的MonoBehaviour类
4.资源类
资源一般都是通过界面导入进来后直接使用。通过脚本创建或者修改资源的情况也存在,所以随之产生的有资源类的一些方法操作。
下面来介绍一些重要的常用的类:
一、GameObject
1.1 变量
active 是否活动
isStatic 是否静态
//使游戏物体不活动.
gameObject.active = false;
gameObject.isStatic = false;
1.2 函数
AddComponent
GetComponent
Find
FindWithTag
FindGameObjectWithTag
SetActive
gameObject.AddComponent ("SomeOneScripe");
curTransform = gameObject.GetComponent(Transform);
//直接查找一个名字是Dog的物体
GameObject obj = GameObject.Find("Dog");
//间接通过物体标签来找名字是Dog的物体
GameObject obj = GameObject.FindWithTag("Dog");
//通过标签找到对应的多个物体
GameObject obj = GameObject.FindGameObjectWithTag("Dog");
//设置当前物体不显示,实际上是存在的
obj.SetActive(false);
二、Transform
Transform组件控制游戏对象在Unity场景中的位置、旋转和缩放,每个游戏对象都包含一个Transform组件。在游戏中如果想更新玩家位置,设置相机观察角度都免不了要和Transform组件打交道。包括定位父子关系也需要用到。
2.1 变量
2.2 成员函数
三、Time
Time时间类为开发者提供了一些在程序运行时时间上的处理函数,在Unity中可以通过Time类获取和事件相关的信息,可以用来计算帧速率,调整事件流逝速度等功能。我们可以非常方便的使用。
3.1 Time类成员变量
其中有一个属性较为特殊,Time.timeScale,用于控制当前运动效果。当timeScale传递时间为1.0时表示正常;当timeScale传递时间0.5时比实时时间慢一半,当timeScale传递时间为0时游戏基本上暂停了。
3.2 示例
//记录上一帧所消耗的时间,会受时间缩放的影响
public static float deltaTime { get; }
//记录从程序运行到现在的时间会受时间缩放的影响
static float time { get; }
//设置游戏里面的时间与现实世界里的时间缩放,即现实世界的时间 X 缩放比例
static float timeScale { get; set; }
//从游戏运行到现在的真实事件
static float realtimeSinceStartup { get; }
四、Random
Random类可以用来生成随机数。
4.1 变量
4.2函数示例
//返回一个在min和max之间的整数
static int Range(int min, int max);
//生成一个随机浮点数
static float Range(float min, float max);
五、Mathf类
Unity中封装了数学类Mathf,使用它可以轻松地解决复杂的数学公式。Mathf类定义了我们常需要的数学计算方式。
5.1变量
5.2函数
六、Input
在Unity3D中将输入控制分为3种状态,分别是按下、一直处于按下状态、抬起状态,Unity提供输入函数的类为 Input类。
6.1 键盘的三种状态
//KeyCode类定义了我们键盘上常用的按键
//当按键一直处于按下状态时重复调用这个函数
static bool GetKey(KeyCode key);
//当按键刚按下时调用一次这个函数
static bool GetKeyDown(KeyCode key);
//当按键被按下后抬起时调用一次这个函数
static bool GetKeyUp(KeyCode key);
6.2鼠标的三种状态
//鼠标的三种状态和键盘的按键的三种状态相同
public static bool GetMouseButton(int button);
public static bool GetMouseButtonDown(int button);
public static bool GetMouseButtonUp(int button);
/*上述三种状态的参数我们看到是int整型,那么为什么鼠标的输入是整型呢,首先鼠标上一般有三个按钮,那么表示这三个按钮输入需要一个标志,于是有:
0:代表鼠标的左键
1:代表鼠标的右键
2:代表鼠标的中键
*/