【文档说明】Unity-3D增强现实开发-第6章-脚本语言开发基础课件.ppt,共(20)页,787.000 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-7183.html
以下为本文档部分文字说明:
知识目标能力目标任务引入第6章脚本语言开发基础•第1页知识目标了解Unity脚本的生命周期了解Unity脚本与游戏对象和组件的交互方法了解Unity中的常用类•第2页能力目标掌握基本的脚本编程方法掌握游戏对
象操作和相关类应用掌握Time类应用•第3页任务引入脚本也是Unity3D的一种组件;脚本编程可以控制模型对象的生命周期循环;脚本开发是增强现实应用开发的核心部分之一。•第4页6.1认识脚本开发脚本是一个游戏的灵魂,有了脚本
程序,游戏才变得有可玩性;脚本的任务有处理输入、操作各个GameObject、维护状态和管理逻辑等;在Unity3D中,有两种编程语言,分别是C#和JavaScript,C#在Unity3D开发的游戏中的使用比例超过了
80%。•第5页选中Scripts文件夹,在其中右键,选择Create->C#Script。图6-1创建一个Scripts文件夹并在其中新建一个C#脚本•第6页双击脚本,默认打开Unity的MonoDevelop编辑器。可以看到有一个继承自MonoBehaviour类的NewBe
huaviourScript类,这个类名和脚本的名字是一样的。文件名和类名必须保持一致,所以如果修改了脚本的文件名就要同步修改类名。Start函数中的内容将会在一开始就被执行,所以一些需要初始化的变量都可以写在Start函数内;Update函数,在运行的每一帧都会调用,可
以理解为这个函数无时无刻不在调用。•第7页6.2Unity脚本的生命周期Start和Update函数都叫做生命周期函数。脚本的生命周期分为多个阶段,在各个阶段中有各自的事件函数。(1)阶段一:编辑Reset:当脚本第一次依附在GameObject上或使用了Re
set命令时调用,用来初始化脚本的属性。(2)阶段二:第一场景加载Awake:在任何Start函数之前调用,也是在prefab被实例化之后调用的。OnEnable:此对象启用后才调用此函数。OnLevelWasLoaded:执行该功能以
通知游戏已经加载了一个新的级别。•第8页Unity脚本的生命周期(3)阶段三:在第1帧更新之前Start:仅在脚本实例启用后才在第1帧更新前调用启动。(4)阶段四:帧之间OnApplicationPause:在正常的帧更新之间检测到暂停的帧的末尾被调用。(5
)阶段五:更新FixedUpdate:FixedUpdate通常比Update更频繁地被调用。Update:每帧调用一次更新。它是帧更新的主要功能。LateUpdate:Update更新完成后,每帧调用Late
Update一次。•第9页Unity脚本的生命周期(6)阶段六:渲染OnPreCull:在相机剔除场景之前调用,剔除哪些对象对于相机是可见的。OnBecameVisible/OnBecameInvisible:当对象对于任何相机变为可见/不可见时
调用。OnWillRenderObject:如果对象可见,则为每个摄像机调用一次。OnPreRender:在相机开始呈现场景之前调用。OnRenderObject:在所有常规场景渲染完成后调用。OnPostRender:在相机完成渲染场景后调用。OnRenderImage:场
景渲染完成后允许屏幕图像后期处理调用。OnGUI:每帧调用多次以响应GUI事件。首先处理布局和重绘事件,然后处理每个输入事件的布局和键盘/鼠标事件。OnDrawGizmos:用于在场景视图中绘制Gizmos以进行可视化。•第10页Unity脚本的生命周期(7)阶段七:协同程
序yield:在下一帧调用所有更新功能后,协调程序继续。yieldWaitForSeconds:在指定的时间延迟之后,在为帧调用所有更新功能之后继续。yieldWaitForFixedUpdate:在所有脚本上调用了所有FixedUpdate之后继续。yieldWWW
:在一个WWW下载完成后继续。yieldStartCoroutine:链接协同程序,并等待MyFunc协同程序首先完成。(8)阶段八:对象毁灭OnDestroy:在对象存在的最后一帧的所有帧更新之后调用此函数。(9)阶段九:退出OnApplicatio
nQuit:在应用程序退出之前,所有游戏对象都调用此函数。在编辑器中,当用户停止播放模式时被调用。OnDisable:当该行为被禁用或不活动时,调用此函数。•第11页6.3访问游戏对象和组件脚本需要挂载在GameObjec
t上运行,例如在Update函数中添加以下代码。这两行代码用来检测鼠标左键是否按下,如果鼠标左键按下就会在控制台输出“Pressedleftclick”。代码编辑完成以后按下Ctrl+S保存代码,将窗口切换回Unity3D编辑器,可以看到窗口右下角有一个“风火轮”在旋转
,这个图标代表代码正在进行编译,需要等待代码编译完才能开始播放模式。•第12页打开Console(控制台)面板来调试代码。代码编译完之后如果控制台没有提示错误就可以单击播放按钮开始调试。新建一个Cube,并且把脚本拖动至Cube
的Inspector上。图6-2将编辑好的脚本挂载在一个对象上•第13页再次进入播放模式,鼠标左键单击Game视图的任意位置,控制台就会输出信息。单击Console视图中的Clear按钮可以清空控制台消息。图6-3控制台的输出•第14页脚
本一个重要的功能就是操作GameObject,操作GameObject需要先获取到要操作的GameObject。获取游戏对象的第一种方法就是使用gameObject对象。GameObject与gameObje
ct不同,前者表示游戏对象类,后者表示当前脚本所挂载的游戏对象,如在一个Cube下挂载以下代码。这行代码执行以后,给Cube添加了一个球形碰撞器。图6-4通过脚本添加一个球形碰撞器•第15页如果想要获取其他对象而不是脚本挂载的对象,可以通过GameObject.
Find方法来获取。输出结果如下图。图6-5控制台输出和这个方法类似的还有GameObject.FindWithTagGameObject.FindGameObjectWithTag,GameObject.FindGameObjectsWithTag方法,
这些方法都是根据tag来寻找对象的。•第16页要查看对象/类所有的成员变量和方法,可以通过ScriptingReference(脚本手册)查看,位于Help->ScriptingReference。图6-6使用ScriptingReference
获取编程帮助•第17页还有一种通过声明共有变量的方法来获取内容,如:可以看到在Inspector面板中有声明的变量,数组可以自定义长度。在Inspector面板中拖入值,脚本中的变量就能访问对应的变量。图6-7脚本中定义的Public变量可以在属性面板中编辑•第18页6.4Time类简介Ti
me类是获取Unity内时间信息的接口;Time.DeltaTime表示完成上一帧所需要的时间;Time.time代表从游戏开始到当前所经过的时间;Time.timeSinceLevelLoad表示从当前场景加载完成到目前为止的时间;Time类有近20个变量,详细内容可以查看Scri
ptingReference(脚本手册)。•第19页本章小结•第20页