版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
10.1脚本介绍在Unity中,脚本可以理解为附加在游戏对象上的用于定义游戏对象行为的指令代码,脚本与组件的用法相同,必须绑定在游戏对象上才能开始它的生命周期。在Unity中允许使用C#、JavaScript语言来编写脚本,早期的Unity版本还支持Boo语言,在Unity5.0后的版本移除了。下一页返回10.1脚本介绍
开发者可以选择自己熟悉或喜爱的语言来实现游戏的脚本,但还是建议使用C#,因为大量的游戏均使用C#语言来编写脚本,而且C#是面向对象的编程语言,编程思想上更为接近Unity引擎。Unity里集成了脚本编辑器MonoDevelop,有很多开发者习惯了使用微软的VisualStudio工具做开发,Unity也是支持的。上一页返回10.2Unity脚本语言Unity5.0只支持两种脚本语言,即JavaScript和C#,用户可以使用其中一种或同时使用两种语言来进行游戏脚本的开发,这两种脚本语言都会被编译成Unity内置的中间代码,因此运行速度都很快。JavaScript相对而言语法较为简单,比较容易入门。C#本身有很强大的语言特性,比JavaScript更适合进行深入开发,大多数的Unity第三方插件都是用C#编写的。返回10.3创建并运行脚本10.3.1创建脚本学习每种语言的第一个案例都是HelloWorld,所以这里也将通过创建HelloWorld程序来开启脚本编程之旅,在Unity中新建脚本文件的方法如下。(1)依次选择菜单栏中的Assets→Create→C#Script(或者Javascript)命令,如图10.1所示;也可以直接在Hierarchy窗口单击鼠标右键,选择快捷菜单中的Create→C#Scrip(t或者javascript)命令。下一页返回10.3创建并运行脚本
(2)新建的脚本文件会出现在Project视图中,默认命名为NewBehaviourScript,可为脚本输入新的名词,将脚本命名为HelloWorld。注意脚本的名字一定要和脚本里面的类名一致;否则会报错。10.3.2VisualStudio2013编辑器在Project视图中双击脚本文件HelloWorld,Unity会自动启动VisualStudio集成开发环境来编辑脚本。如果你的电脑没有安装VisualStudio,会打开Unity自带的MonoDevelop脚本编辑器,两种编辑器都可以用。上一页下一页返回10.3创建并运行脚本
如果安装了VisualStudio,且默认还是打开MonoDevelop,就可以在Unity中设置,选择菜单栏中的Edit→Preferences→ExternalTools命令,在ExternalScriptEditor下拉列表框中选择VisualStudio2013选项。上一页返回10.4C#基本语法1.变量C#定义变量的一般格式如下:数据类型变量名;变量前面可以添加的访问控制符包括public、protected、private等,不添加控制符则默认为private。C#支持15种数据类型,包括值类型和引用类型。值类型包括整数类型、字符类型、浮点类型、布尔类型、结构和枚举类型等。引用类型包括类、接口、数组、字符串等。下一页返回10.4C#基本语法
2.数组在C#中只能使用内建数组。新建C#脚本CSArray,代码如图10.5所示。将CSArray脚本绑定到游戏对象,运行后结果如图10.6所示。虽然不能使用Array数组,但可以使用ArrayList、List等容器来达到同样的目的。新建C#脚本CSArray2,代码如图10.7所示。将CSArray2脚本绑定到游戏对象,运行后结果如图10.8所示。3.运算符运算符是数据间进行运算的符号。按运算类型可分为算术运算符、逻辑运算符、关系运算符、条件运算符等。上一页下一页返回10.4C#基本语法
C#中的算术运算符就是用来处理四则运算的符号。逻辑运算符用于逻辑运算,运算对象都是布尔型。关系运算符用于比较两个操作数的大小,运算结为布尔型。条件运算符有3个操作数。语法格式如下:<表达式1>?<表达式2>:<表达式3>上一页下一页返回10.4C#基本语法
4.语句1)if语句根据条件判断应该执行哪个选择,可以提供一种、两种或多种选择,但每次只会执行一个选择。语法格式如下:if(条件1){语句序列1}elseif(条件2){语句序列2}……else{语句序列n}2)switch语句通过匹配特定表达式的值,决定程序执行哪一段序列。语法格式如下:上一页下一页返回10.4C#基本语法
switch(表达式){case值1:…break;case值2:…break;case值3:…break;...default:…break;}上一页下一页返回10.4C#基本语法
3)while语句反复进行条件判断,只要条件成立,就会执行循环体,直到条件不成立,循环结束。语法格式如下:while(条件){//循环体语句}4)do...while语句do...while循环中条件即使为假,也至少执行一次该循环体中的语句。语法格式如下:上一页下一页返回10.4C#基本语法
do{//循环体语句}while(条件);5)for语句只有在对特定条件进行判断后才允许执行循环,用于将某个语句或语句块重复执行预定次数的情形。语法格式如下:for(初始值;条件;增/减)上一页下一页返回10.4C#基本语法
{//循环体语句}6)foreach语句用于遍历整个集合或数组。语法格式如下:foreach(数据类型元素in集合/数组){//循环体语句}上一页下一页返回10.4C#基本语法
5.函数函数语法格式如下:访问控制符返回值类型函数名(参数列表){//函数体,即函数中处理数据的实现过程;//如果需要还可以有返回值;}上一页下一页返回10.4C#基本语法
6.C#脚本在使用C#编写脚本时还需要注意以下几个规则。(1)凡是需要添加到游戏对象的C#脚本类,都需要直接或间接地从MonoBehaviour类继承。对于在Unity编辑器中新建的C#脚本,Unity会自动帮助开发者完成继承的相关代码。如果是在别的地方创建的C#脚本,就需要把继承关系添加上;否则C#脚本是不能添加到游戏对象上的。上一页下一页返回10.4C#基本语法
(2)使用Start或者Awake函数来初始化,避免使用构造函数。不使用构造函数的原因是在Unity里无法确定构造函数何时被调用。(3)类名要与脚本文件名相同;否则在添加脚本到游戏对象时会提示错误。这里要求与文件名同名的类指的是从MonoBehaviour继承的行为类,普通的C#类可以随意命名。上一页返回10.5访问游戏对象和组件10.5.1MonoBehaviour类Unity中的脚本都是继承自MonoBehaviour,它定义了基本的脚本行为和声明周期。MonoBehaviour还定义了对各种特定事件(如模型碰撞、脚本激活等)的响应函数,这些函数名称均以On开头。表10.4罗列出部分常用的事件响应函数。10.5.2访问游戏对象在Unity场景中出现的所有物体都属于游戏对象(GameObject),游戏对象和脚本是紧密联系的,游戏对象间的交互通常是通过脚本来实现的。在Unity中,用户可以通过以下几种方式来访问游戏对象。下一页返回10.5访问游戏对象和组件
1.通过名称来查找使用函数GameObject.Find,如果场景中存在指定名称的游戏对象,那么返回该对象的引用;否则返回空值null。如果存在多个重名的对象,那么返回第一个对象的引用。示例代码片段如下:GameObjectmyobject;voidStart(){myobject=GameObject.Find("MainCharacter");}上一页下一页返回10.5访问游戏对象和组件
2.通过标签来查找GameObject.FindWithTag,场景中的每个对象都可以设置标签,如果场景中存在指定标签的游戏对象,那么返回该对象的引用;否则返回空值null。如果多个游戏对象使用同一标签,那么返回第一个对象的引用。如果想获取场景中使用相同标签的游戏对象,可以通过GameObject.FindGameObjectsWithTag()方法获取游戏对象数组。示例代码片段如下:上一页下一页返回10.5访问游戏对象和组件
GameObjectmyobject;GameObject[]myobjects;voidStart(){myobject=GameObject.FindWithTag("MainCharacter");myobjects=GameObject.FindGameObjectsWithTag("MainCharacters");}上一页下一页返回10.5访问游戏对象和组件
同样地,上述几个函数比较耗时,应避免在Update中调用这些获取组件的函数,而应该在初始化时(Awake方法或者Start方法)把组件的引用保存在变量中。10.5.3访问组件脚本可以认为是开发者自定义的组件,并且可以添加到游戏对象上来控制游戏对象的行为。一个游戏对象可能由若干组件构成。例如,依次选择菜单栏中的GameObject→3DObject→Cube命令,在场景中新建一个立方体Cube后,在Inspector视图中可以看到一个简单的立方体默认包含了4个组件。Transform组件,用于定义对象在场景中的位置、角度、缩放参数。上一页下一页返回10.5访问游戏对象和组件
MeshFilter组件,用来从资源文件中读取模型。BoxCollider组件,用来为立方体添加碰撞效果。MeshRenderer组件,用来在场景中渲染立方体模型。也正是因为这4个组件,最终才能在画面中看到立方体的图像。既然编写脚本的目的是用来定义游戏对象的行为,因此会经常需要访问游戏对象的各种组件,并设置组件参数。对于系统内置的常用组件,Unity提供了非常便利的访问方式,只需要在脚本里直接访问组件对应的成员变量即可,这些成员变量定义在MonoBehaviour中并被脚本继承下来。如果游戏对象上不存在某组件,则该组件对应变量的值将为空值null。常用的组件及。上一页下一页返回10.5访问游戏对象和组件
如果要访问的组件不属于表10.5中的常用组件,或者访问的是游戏对象上的脚本,可以通过表10.6中的函数来得到组件的引用。下面给大家介绍Unity编辑器中另一种非常简单的访问组件或游戏对象的方法。通过声明访问权限为public的变量,然后将要访问的组件或对象赋值给该变量,就可以在脚本中通过变量来访问组件或对象了。具体做法如下。假设在场景中有Player、Cube、Sphere这3个游戏对象,Player对象上已经添加了脚本Player.cs,现在需要在脚本中访问Cube游戏对象以及Sphere对象的Transform组件。上一页返回下一页10.5访问游戏对象和组件(1)在Palyer.cs脚本中添加两个成员变量,访问权限设置为public。usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassPlayer:MonoBehaviour{//声明GameObject类型的成员变量cpublicGameObjectc;//声明Transform类型的成员变量s上一页下一页返回10.5访问游戏对象和组件publicTransforms;voidStart(){}voidUpdate(){}}(2)保存脚本,查看Player游戏对象的Inspector视图,可以看到Player脚本的视图参数增加了两项刚才添加的成员变量且没有赋值,如图10.10所示。上一页下一页返回10.5访问游戏对象和组件(3)单击图10.10中C成员右侧的图标按钮,在打开的对话框中选择Cube。单击图10.10中S成员右侧的图标按钮,在打开的对话框中选择Sphere,即完成对两个成员变量的赋值。赋值后Inspector视图如图10.11所示。这样在脚本中就可以直接通过访问两个成员变量来达到访问两个游戏对象的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 妊娠期多器官功能衰竭的基因保护策略
- 车辆工程力学试题及答案
- 女性职业性呼吸系统疾病的影像表现差异
- 头颈鳞癌免疫治疗的多组学整合策略
- 大数据在职业尘肺病早期筛查中的应用模型
- 大数据分析龋病危险因素与预防策略
- 调酒考试题及答案
- 多部门协作的社区慢病环境干预实践
- 多组学整合的肿瘤代谢异质性分析
- 2025年中职(建筑工程施工)施工技术阶段测试题及答案
- 2025年教师师德师风自查问题清单及整改措施范文
- 2026年广东农垦火星农场有限公司公开招聘作业区管理人员备考题库及参考答案详解
- 肿瘤化疗导致的中性粒细胞减少诊治中国专家共识解读
- 2025年查对制度考核考试题库(答案+解析)
- 云南省2025年普通高中学业水平合格性考试历史试题
- 养老护理服务的法律监管与执法
- 四川省2025年高职单招职业技能综合测试(中职类)汽车类试卷(含答案解析)
- 隧道施工清包合同(3篇)
- 消化系统肿瘤多学科协作(MDT)诊疗方案
- 围手术期疼痛的动物模型与转化研究
- 安泰科技招聘笔试题库2025
评论
0/150
提交评论