游戏开发实战教程(Unity+C#)-(9)自考成人专科本科课件.pptx
-
资源ID:77576690
资源大小:680.40KB
全文页数:32页
- 资源格式: PPTX
下载积分:9金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
游戏开发实战教程(Unity+C#)-(9)自考成人专科本科课件.pptx
第第九九章章C#脚本语言【学习目的】掌握创建 C#脚本的基本方法。掌握对象和相关脚本创建关联的方法。掌握 C#脚本的基本结构。熟练掌握在 C#脚本中实现移动、旋转等基本操作的方法。9.1 创建脚本9.1.1 什么是脚本语言 脚本语言是为了缩短传统的编写-编译-链接-运行(Edit-Compile-LinkRun)过程而创建的计算机编程语言。很多软件都支持脚本语言,如 3ds Max 支持类似 C 语言的脚本语言,Flash 也有脚本语言。这些软件主要通过编程 来改变模型、设计模型等。Unity 脚本语言是一种辅助游戏开发的编程语言。脚本语言三大特点:(1)成本低(学习成本、开发成本低,易于学习,易于维护)。(2)风险低(可控性好)。(3)效率高(很多功能都已封装好)。脚本的用法与组件用法相同,脚本必须绑定到相应的游戏对象上才有 效果。Unity 中内置的很多方法和资源包都可以被用户调用,大大提高了游 戏开发的工作效率。Unity 的脚本编辑器则内置了 MonoDevelop,它具有使 用简单、可跨平台使用的基本特性。开发 Unity 有以下 3 种脚本语言。(1)Boo 语言(已淘汰)。(2)JavaScript 脚本语言。(3)C#脚本语言(Unity 将来只能使用 C#脚本)。9.1.2 C#脚本语言与 C#语言的区别和联系 Unity 的 C#脚本语言和微软.NET 家族中的 C#是同一个语言,对于语言本身,二者是差不 多的,但也有不同。C#语言是微软推出的面向对象编程的语言,运行在.NET 平台上。它使得程序员可以快速 地编写各种基于.NET 平台的应用程序。C#脚本语言是基于开源的.NET 平台 Mono 的,运行在 Mono 平台上。Mono 提供了一个原 生代码生成器,使得用户的应用运行效率尽可能高。同时 Mono 提供了很多方便调用的原生代 码的接口。C#脚本语言的语法格式和 C#语言的基本上一样,但它们的“根”不是基于同一个平台做 出来的。在学习 C#语言的基础上学习 C#脚本语言,能够快速掌握 C#脚本语言并应用其开发游戏。9.1.3 C#脚本文件 (1)C#脚本文件是资源。在硬盘上能够找到 C#脚本文件,甚至可以把这个资源放到其他 组件中。(2)C#脚本文件是组件。(3)C#脚本文件是类,是面向对象编程的一个概念。脚本文件是以“.cs”类型保存到工程文件夹中的文件,因此,在每个工程中应该首先创建 一个 Scripts 文件夹,把该工程中的某个模块下的文件都放置到此文件夹中,以便于对该工程中 的所有脚本文件进行管理。C#脚本9.1.4 创建 C#脚本文件的方法 创建 C#脚本文件的方法是:在 Project 视窗中的 Scripts 文件夹中右击,在弹出的快捷菜单 中选择“Create”“C#Script”命令,在 Script 文件夹中创建一个默认名称为“NewBehaviorScript”的脚本文件,然后对此文件按照功能模式进行重命名,如“Move”。在脚本文件生成后,用户可以在 Project 视窗中根据脚本的图标来辨别 C#脚本文件。另外 在命名过程中需要注意以下几个问题。(1)所有的脚本文件最好都不使用默认脚本文件名称,而改成能代表某种功能的名称,使 仅通过名称就清晰地看出该脚本的功能。(2)在名称中不使用中文。(3)在名称中不能使用空格。如果名称中存在空格,会使系统在识别中出现错误,提示该 脚本不存在等问题。9.2 脚本编辑器 Unity 自带一个名为 MonoDeveloper 的工具,用来编辑脚本。如果在 PC 上安装 Unity 时安 装了微软的 Visual Studio 的 C#部分,可用它代替 MonoDeveloper 工具。只需要在 Unity 编辑器 200 游戏开发实战教程(Unity+C#)中完成如下设置即可完成代替:选择“Edit”“Preferences”打开设置窗口,在窗口中选择“External Tools”“External Script Editor”,并将外部脚本编辑器设为 Visual Studio 在生成 C#脚本文件之后,双击脚本文件会自动以默认编辑器打开脚本文件。在编辑器中会以不同的颜色显示不同的状态,如蓝色为关键字,绿色为注释,黑色为自定 义变量、方法名称、基本语句等。C#脚本界面9.3 常用的事件方法 9.3.1 默认的事件方法(1)Using:指包含了一些系统提供的命名空间。(2)两个默认方法:一个是 Start(),一个是 Update()。Start():开始事件,用于游戏对象或游戏场景的初始化,在场景加载时被调用,只执行 一次。Update():游戏运行时的循环调用方法,每一帧调用一次,一般用于表示游戏场景或者 状态的变化。9.3.2 其他常用的事件方法(1)Awake():唤醒方法,当脚本实例被创建时调用。常用于游戏对象的初始化,但是 Awake()的调用顺序应该在 Start()之前,即先激活再初始化。(2)FixedUpdate():类似 Update(),但是与 Update()又不完全一样,该方法在一个固定时间 间隔内被调用,一般场景的物理状态的变化会在此函数中实现。9.4 实验一 创建一个 Hello World 程序【实验目的】掌握运用 Unity 创建脚本程序的方法。【实验内容】运用 Unity 创建一个 Hello World 程序。【实验环境】Unity 2018.3.5f1。【实验步骤】参考9.4实验一实验步骤书9.5 常用组件 9.5.1 访问绑定对象的组件 Unity 中的脚本是用来定义或者控制游戏对象行为的一种特定的组件,因此需要经常访问 游戏对象和各种组件并设置相关的参数,例如,与位置有关的 Position,与旋转角度有关的 Rotation,与物体刚体有关的 Rigidbody 等物理属性。对于 Unity 系统内置的常用组件,Unity提供了快捷访问的方式,只需要在脚本中直接对游戏对象的组件或者组件的某一个属性进行访 问即可。1常用的组件(1)Transform:访问对象的位置、旋转或者缩放比例等。例如 Transform.Position.x 是访问 游戏对象位置上的 X 轴坐标。(2)Rigidbody:访问游戏对象的刚体组件。(3)Collider:用来设置碰撞体属性等。(4)Animation:用来设置游戏对象的动画属性。(5)Audio:用来设置游戏对象的声音属性。2访问方法 在访问组件时首先应该获取游戏对象的相应组件的引用,方法为:GetComponent().属性名字。例如:this.GetComponent().position=new Vector3(3,3,3);this 代表被绑定的对象,因此该语句用来 表示获取绑定对象的 Transform 组件的 Position 属性,并赋值为一个新的 Vector3 变量9.5.2 访问外部对象的组件 在 Unity 中,当需要在脚本中访问除了绑定对象之外的游戏对象的组件或者游戏对象的其 他属性时,有一种方便的方法,即通过访问权限为 Public 的变量,然后在绑定的对象脚本中指定所需要的其他资源。9.5.3 Transform 组件 Transform 组件是控制游戏对象在 Unity 中的位置、缩放比例和旋转角度的基本组件。每个 游戏对象都会包含一个相应的 Transform 组件,因此,要想控制游戏对象的物理属性就必须访 问对象的 Transform 组件。其相应的属性如下。Position:具体的位置,包括 X 轴坐标、Y 轴坐标和 Z 轴坐标。Rotation:旋转的角度。Right:右方向,即 X 轴上的正方向。Left:左方向,在 X 轴上的负方向。Up:上方向,即 Y 轴的正方向。Down:下方向,即 Y 轴的负方向。Forward:前进方向,即 Z 轴上的正方向。Back:后退方向,即 Z 轴上的负方向。Parent:父对象的 Transform 组件。Transform 中的一些常用方法如下。Translate:移动,按指定方向进行移动。Rotate:旋转,按照指定方向进行旋转。Find:查找,按照 Tag 或者 Name 等方式查找子对象。【例 9.1】利用 Transform 组件的属性和方法进行物体的移动和旋转。1物体的移动 步骤 1:新建一个游戏对象 Cube。步骤 2:创建脚本文件 Move.cs,编写代码步骤 3:把代码绑定到 Cube 上,单击播放按钮,Cube 会逐帧不停地向右侧移动。MoveSpeed 表示移动的方向和速度,值越大表示移动得越快,正数表示向右移动,负数表示向左移动。2物体的旋转步骤 1:新建一个游戏对象 Cube。步骤 2:创建脚本文件 Rotate.cs,编写代码.步骤 3:把代码绑定到 Cube 上,单击播放按钮,Cube 会沿着 Y 轴正方向做顺时针旋转。3对象绕某一个物体旋转 实现球体绕中心点的 Cube 旋转。步骤 1:在 Inspector 视窗,选择脚本选项右边的小齿轮,在下拉菜单中选择 Remove Component 去掉 Cube 上的 Move 和 Rotate 脚本,并且 Reset 到中心点(0,0,0)。步骤 2:创建一个 Sphere 对象,位置设置为(2,0,0)。步骤 3:创建一个 Empty 空对象,并 Reset 到中心点(0,0,0)。步骤 4:设置 Sphere 为 Empty 空对象的子对象。步骤 5:把 Rotate 脚本关联到空对象 Empty 上,即球体的父对象上。步骤 6:单击播放按钮,会发现球体绕着立方体旋转。其实质是 Empty 对象在 Cube 位置,而 Sphere 又是 Empty 对象的子对象,当 Empty 对象绕 着 Y 轴旋转时,Sphere 自然也会绕着 Y 轴即 Cube 转动。9.6 Time 类 Unity 中 Time 类可以获取和事件相关的信息,用来计算帧速率,调整事件流逝速度。Time 类包含一个重要的类变量 deltaTime,它表示距上一次调用所用的时间,成员变量如下所示。Time:游戏从开始到现在所经历的时间(单位为:s,只读)。timeSinceLevelLoad:从关卡加载完成开始计算的当前帧的开始时间(单位为:s,只读)。deltaTime:上一帧耗费的时间(单位为:s,只读)。fixedTime:最近 FixedUpdate 的时间。fixedDeltaTime:物理引擎和 FixedUpdate 的更新时间间隔。maximumDeltaTime:一帧的最大耗费时间。smoothDeltaTime:Time.deltaTime 的平滑淡出时间。timescale:时间流逝速度的比例。可以用来制作动作特效。frameCount:已渲染的帧的总数(只读)。realtimeSinceStartup:游戏从开始到现在所经历的真实时间(单位为:s),该时间不会 受 TimeScale 影响。captureFramerate:固定帧率设置。【例 9.2】按 P 键,输出 deltaTime 值。步骤 1:新建一个游戏对象 Cube。步骤 2:创建脚本 DeltaP.cs,编写代码步骤 3:保存代码,返回 Unity 运行。按 P 键(可多次 按),每次的 deltaTime 值不完全相同。Delta.cs代码运行结果【例 9.3】新建一游戏对象 Cube,使其绕 Y 轴按每秒 30 顺时针旋转。步骤 1:新建一个游戏对象 Cube。步骤 2:创建脚本 DeltaC.cs,编写代码。步骤 3:保存代码,返回 Unity 运行。Cube 以每秒 30顺时针旋转。DeltaC.cs代码9.7 协程 在游戏编写中,有的时候执行函数需要延迟执行,这个时候就需要用到协程。协程类似多 线程,但不是多线程,它能方便代码的编写。协程需要用关键字 Ienumerator 来定义,必须用 Yield 关键字返回。协程函数不能直接调用,需要使用 StartCoroutine()将协程函数作为参数传入。关闭协程时使用 StopCoroutine()或者使用 StopAllCoroutine()来关闭脚本中所有协程。yield break:表示中断协程。yield return null 或者 yield return 0(或者更大的数字):都是表示暂缓一帧,在下一帧接 着往下处理。【例 9.4】协程的开启与关闭。步骤 1:新建一个 C#脚本,命名为 Test1。步骤 2:添加一个协程,编写代码。步骤 3:在 Start()方法中添加开启协程的函数,开启协程的方法有如下两种。方法 1:直接使用字符串输入协程名称 方法 2:直接传入协程步骤 4:将 Test 脚本挂载到 Main Camera 上,然后 运行。在控制台里,开始等待显示 5s 之后再显示等待 结束。控制台结果步骤 5:关闭协程。可以使用 StopAllCoroutine()关闭脚本中所有协程,使用 StopCoroutine()关闭协程。关闭协程同样有两种方法,每种方法都要与开启协程 的方法一样。方法 1:使用字符串停止协程方法 2:直接传入协程运行结果将不会显示等待结束。9.8 实验二 用 C#脚本语言编写小游戏【实验目的】掌握在 Unity 中用 C#脚本语言编写游戏代码的基本方法,熟悉本章所学的内容。【实验内容】用 C#脚本语言编写一个分别用键盘上 A、D、W、X 键使立方体上、下、左、右旋转的小 游戏。【实验环境】Unity 2018.3.5f1。【实验步骤】参考9.8 实验二 实验步骤书本章小结 本章主要讲解了什么是脚本语言,C#脚本语言,脚本编辑器,常用组件、事件方法以及协 程,并用典型的实例和详细的步骤讲解了 Unity 中应用 C#脚本语言编写小游戏的方法。习题 一、简答题 1与高级语言相比,脚本语言有什么优势?2如何使用脚本语言获取一个 Cube 上的 Transform 组件上的 position 属性?3协程的定义关键字是什么?开启协程、关闭协程的关键字是什么?返回协程要用什么关 键字?二、编程题 创建一个名为 Test 的 C#脚本,将它挂载到 Main Camera 上,并且在里面创建一个协程,实现当启动协程时在控制台显示“协程已启动”。谢谢谢谢游戏开发实战教程(Unity+C#)