一、脚本在 Unity 的 Inspector 面板中显示
1、Inspector 窗口中有的脚本前面有勾选框,有的则没有。如下图所示。
当脚本中没有 Start(){} 、 Update(){} 、OnGUI(){} 等基本函数时,脚本前面就不显示勾选框。只要脚本中有这两个函数中的任意一个,就会显示勾选框。
2、在C#脚本中以 public 声明的变量,都会在 Inspector 窗口的相应脚本组件中显示出来。
如C#脚本中的:public float sensorHeight = 1.0f ; 在Inspector 窗口的相应脚本组件中显示如下:
3、 一个脚本就是一个类,调用一个脚本中的函数就相当于调用一个类的成员函数。
二、Unity中的脚本执行顺序
1、脚本中的事件常见执行顺序:
Awake ——> Start ——> Update ——> LateUpdate
//1、************************初始阶段:Awake、Start均用于初始化,注意其名称不能写错*********************
// 游戏对象创建时,立即执行Awake()一次,而此时该脚本前面的方框是否勾选(即脚本是否启用)都不影响其执行
private void Awake()
{
Debug.Log("Awake == " + Time.time + "---"+name);
}
// 游戏对象创建,且脚本启用,才执行一次
private void Start()
{
Debug.Log("Start ==" + Time.time + "---" + this.name);
}
//2、************************物理阶段:*********************
// 每隔固定时间执行一次,时间可以修改,默认是0.02s
//适用于对游戏对象做物理操作,如移动、旋转。不会受到渲染的影响
private void FixedUpdate()
{
Debug.Log("FixedUpdate ==" + Time.time);
}
//3、************************鼠标事件:*********************
//将该脚本挂载在某一物体上,运行时当鼠标点击该物体,触发该事件
//鼠标事件生效的前提是该物体上要有碰撞检测器:Collider
private void OnMouseDown()
{
Debug.Log("Click the mouse **");
}
//************************游戏逻辑:*********************
//渲染帧执行,执行间隔不固定。因为渲染时间不固定,会受到物体量和机器性能的影响
// 适用于处理游戏的逻辑
private void Update()
{
}
//实际是和Update在同一帧执行,但是它是在UPdate执行之后再执行
private void LateUpdate()
{
}
2、Unity脚本的事件函数执行流程:
- Reset() :———— 在用户点击检视面板的 Reset 按钮时才会被调用,其只在编辑模式下被调用。Reset最常用于在检视面板中给定一个默认值。
- Awake() :——— 所有的Unity脚本中最先执行的就是Awake(),游戏对象创建时,立即执行Awake
- OnEnable():—— 每当脚本对象启用时,调用。即启用脚本就调用
- Start():———— Awake()执行之后,接着就使执行Start(),对设备进行初始化。仅在Update函数第一次被调用前调用。Start在 behaviour的生命周期中只被调用一次。它和Awake的不同是Start只在脚本实例被启用时调用。Awake总是在Start之前执行。这允许你协调初始化顺序。在所有脚本实例中,Start函数总是在Awake函数之后调用。
- FixedUpdate():—— 固定帧更新,在Unity导航菜单栏中,点击“Edit”-->“Project Setting”-->“Time”菜单项后,右侧的Inspector视图将弹出时间管理器,其中“Fixed Timestep”选项用于设置FixedUpdate()的更新频率,更新频率默认为0.02s。
- OnTriggerXXX():——
- OnCollisionXXX()
- OnMouseXXX():—— 鼠标事件,将该脚本挂载到某一物体上后,运行时点击Game视窗中的该物体时,会触发相应的事件。前提是该物体上有碰撞检测器:Collider
- Update():—— 正常帧更新,用于更新逻辑。每一帧都执行一次
- LateUpdate():—— 在所有Update函数调用后被调用。例如:当物体在Update里移动时,跟随物体的相机可以在LateUpdate里实现。LateUpdate,在每帧Update执行完毕调用,他是在所有update结束后才调用,比较适合用于命令脚本的执行。官网上例子是摄像机的跟随,都是在所有update操作完才跟进摄像机,不然就有可能出现摄像机已经推进了,但是视角里还未有角色的空帧出现。
- OnGUI():—— 在渲染和处理GUI事件时调用
- OnDisable():—— 当物体被销毁时 OnDisable将被调用,并且可用于任意清理代码。脚本被卸载时,OnDisable将被调用,OnEnable在脚本被载入后调用。注意: OnDisable不能用于协同程序
- OnDestroy():—— 当MonoBehaviour将被销毁时,这个函数被调用
3、当有多个脚本时,最先绑定的脚本,最后执行。设置脚本的执行顺序方法如下:
4、在执行多个脚本时,先执行每个脚本中的 Reset 函数,将每个脚本中的Reset 函数执行完之后,再执行 每个脚本的 Awake 函数,类似的再依次执行 Start 函数,Update 函数,Late Update 函数。(Unity3D中脚本的执行顺序和编译顺序)
5、一个脚本可以同时挂载在多个物体上。