unity脚本的基本知识及脚本的生命周期
/*脚本是附加在游戏体上用于定义游戏对象行为的指令代码unity支持三种高级编程语言:c#,Javascript语法结构using 命名空间;public class 类名:MonoBehaviour{void 方法名(){}}文件名与类名必须一致写好的脚本必须附加到物体才能执行附加到游戏物体的脚本类必须从MonoBehaviour类继承*物体只是类的对象编译过程:源代码(CLS)->中间语
/*脚本是附加在游戏体上用于定义游戏对象行为的指令代码
- unity支持三种高级编程语言:c#,Javascript
- 语法结构
- using 命名空间;
- public class 类名:MonoBehaviour
- {
-
void 方法名()
-
{
-
}
- }
- 文件名与类名必须一致
- 写好的脚本必须附加到物体才能执行
- 附加到游戏物体的脚本类必须从MonoBehaviour类继承
*物体只是类的对象 - 编译过程:
- 源代码(CLS)->中间语言(unity中为dll文件)->(Mono Runtime)->机器码
- 开发工具
- MomoDevolop
- unity 自带脚本编译器,创建Mono应用程序,适用于Linux,Mac OS X和windows的集成开发环境,支持c#,BOO和Java script等
- 高级编程语言
- VS
- 微软公司的开发工具,包括了整个软件生命周期中需要的大部分工具
- 脚本的生命周期:unity脚本从唤醒到销毁的全过程
- 初始阶段
- Awake唤醒:
-
当物体载入时立即调用一次:常用于在游戏开始前进行初始化,可以判断当满足某种条件执行此脚本 this。enable=true;
- OnEnable当可用:
-
每当脚本对象启用时调用。
- Start开始:
-
物体载入且脚本对象启用时被调用有一次。常用于数据或游戏逻辑初始化,执行时机晚于 Awake。
- 物理阶段
- FixUpdate 固定更新:
-
脚本启用后,固定时间被调用,适用于对游戏对象做物理操作,例如移动等
-
设置更新频率;"Edit"-->"Project Setting"-->"Time"-->"FixUpdate"值,默认为0.02s
- Update更新:
-
脚本启用后,每帧渲染场景时调用,频率与设备性能和渲染量有关
- LateUpdate延迟更新:
-
在Upfate函数被调用后执行,适用于跟随逻辑
- 输入事件
- OnMouseEnter鼠标移入:
-
鼠标一道当前Collider时调用。
- OnMouseOver鼠标经过:
-
鼠标经过当前Collider时调用
- OnMouseExit鼠标移开:
-
鼠标离开当前Collider时调用
- OnMouseDown鼠标按下:
-
鼠标按下时被调用
- OnMouseUp鼠标抬起:
-
鼠标在当前Collider上抬起时调用
- 场景渲染
- OnBecameVisible当可见:
-
当Mesh Renderer在任何相机上可见时调用
- OnBecameInvisible当不可见:
-
当MeshRenderer在任何相机上都不可见时调用
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
///
///脚本生命周期
///
public class Lifecycle : MonoBehaviour
{
//脚本:.cs的文本文件 类文件
//附加到游戏物体中
//c#类:
//字段
//属性(一般脚本中不写,在面板中无法显示)
//构造函数
//方法
[SerializeField]//序列化字段,在编译器中显示私有变量
private int a=100;
[HideInInspector]//作用:在编译器中隐藏字段
public float b = 0;
//public Lifecycle()
//{//不要在脚本中写构造函数
// //不能在子线程中访问主线程成员
// float c = time.time;
//}
public Lifecycle()
{
Debug.Log(“构造函数”);
}
//初始阶段//
private void Awake()//执行时机:创建游戏对象(此时未必已启用脚本) 立即开始执行 只执行一次 作用:初始化
{
//Debug.Log(“Awake–” + Time.time+"–"+this.name);
}
private void Start()//后于Awake函数 执行时机:创建游戏对象–>脚本启用–>执行 只执行一次 作用:初始化
{
int a = 1;//调试过程中输入代码:
int b = 2;//右键–快速监视
int c = a + b;//查看“即时窗口”
Debug.Log(“start–” + Time.time+"–"+this.name);
}
//物理阶段*//
private void FixedUpdate()//每隔固定时间执行一次。(时间可修改)适用性:适合对游戏对象做物理操作(移动、旋转…)不会受到渲染时间影响
{ //渲染时间不固定(每帧渲染量不同,机器性能不同)
//Debug.Log(Time.time);
}
private void OnMouseDown()
{
Debug.Log(" OnMouseDown");
}
private void Update()//执行时机:渲染帧执行,执行间隔不固定 适用性:处理游戏逻辑
{
//单帧调试:启动调试 运行场景 暂停游戏 加断点 单帧运行 结束调试
}
}
更多推荐
所有评论(0)