




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1页,第2页,2.1Unity脚本概述?,Unity中的脚本分为不同的方法,不同的方法在特定的情况下被回调会实现特定的功能。Start方法:这个方法在游戏场景加载时被调用,在该方法内可以写一些游戏场景初始化之类的代码。Update方法:这个方法会在每一帧渲染之前被调用,大部分游戏代码在这里执行,除了物理部分的代码。FixedUpdate方法:这个方法会在固定的物理时间步调调用一次。这里也是基本物理行为代码执行的地方。,第3页,2.2Unity中C#脚本的注意事项,继承自MonoBehaviour类。类名字必须匹配文件名。Unity脚本中协同程序有不同的语法规则。只有满足特定情况变量才能显示在属性查看器中。尽量避免使用构造函数,第4页,2.3Unity脚本的基础语法,2.3.1位移与旋转位移与旋转:在Unity中对游戏对象的操作都是通过脚本来修改游戏对象的Transform(变换属性)与Rigidbody(刚体属性)参数来实现的。这些参数的修改是通过脚本编程来实现的。具体开发流程如下。(1)创建Cube对象。点击GameObject3DObjectCube,创建一个Cube对象作为本案例案例对象,可以在左侧面板点击Cube查看其相关属性。(2)编写脚本。在Assets面板点击CreateC#Script,创建一个C#脚本,并将其命名为BUNTrans,然后编写脚本。(3)挂载脚本。脚本开发完成后,将这个脚本挂载到游戏对象上。,第5页,2.3Unity脚本的基础语法,2.3.1位移与旋转1usingUnityEngine;2usingSystem.Collections;/引入系统包3publicclassBNUTransR:MonoBehaviour/声明类4voidUpdate()/重写Update方法5this.transform.Rotate(2,0,0);/绕x轴每帧旋转261usingUnityEngine;2usingSystem.Collections;/引入系统包3publicclassBNUTransT:MonoBehaviour/声明类4voidUpdate()/重写Update方法5this.transform.Translate(0,0,1);/物体每帧沿z轴移动1个单位长度6,第6页,2.3Unity脚本的基础语法,2.3.2记录时间记录时间需要用到Time类,Time类中比较重要的变量为deltaTime它指的是从最近一次调用Update或者FixedUpdate方法到现在的时间具体开发流程如下。(1)创建Cube对象。点击GameObject3DObjectCube(2)编写脚本。在Assets面板点击CreateC#Script。(3)挂载脚本。脚本开发完成后,将这个脚本挂载到游戏对象上。,第7页,2.3Unity脚本的基础语法,2.3.2记录时间1usingUnityEngine;2usingSystem.Collections;/引入系统包3publicclassBNUTime:MonoBehaviour/声明类4voidUpdate()/重写Update方法5this.transform.Rotate(10*Time.deltaTime,0,0);/绕x轴均匀旋转6,第8页,2.3Unity脚本的基础语法,2.3.3访问游戏对象组件在Unity中组件属于游戏对象,组件(Component)其实是用来绑定到游戏对象(GameObject)上的一组相关属性。本质上每个组件是一个类的实例。常见的组件有:MeshFilter、MeshCollider、Renderer、Animation等等。,第9页,2.3Unity脚本的基础语法,2.3.3访问游戏对象组件1usingUnityEngine;2usingSystem.Collections;/引入系统包3publicclassBNUComponent:MonoBehaviour/声明类4voidUpdate()/重写Update方法5transform.Translate(1,0,0);/沿x轴移动一个单位6GetComponent().Translate(1,0,0);/沿x轴移动一个单位7,第10页,2.3Unity脚本的基础语法,2.3.4访问其它游戏对象1、通过属性查看器指定参数2、确定对象的层次关系3、通过名字或标签获取游戏对象4、通过组件名称获取游戏对象,第11页,2.3Unity脚本的基础语法,2.3.5向量3D游戏开发中经常需要用到向量和向量的运算,比如上述介绍的物体的位移和旋转等,Unity中提供了完整的用来表示二维向量的Vector2类和表示三维向量的Vector3类。Vector3类中常量对应的值,第12页,2.3Unity脚本的基础语法,2.3.5向量,第13页,2.3Unity脚本的基础语法,2.3.6成员变量和全局变量定义在方法体外的变量是成员变量,可以在属性查看器看到,读者可以随时在属性查看器中修改它的值。通过private创建的变量是私有变量,这些在属性查看器中就不会显示该变量,第14页,2.3Unity脚本的基础语法,2.3.6成员变量和全局变量1usingUnityEngine;2usingSystem.Collections;/引入系统包3publicclassBNUPubvar:MonoBehaviour/声明类publicTransformpubTrans;/声明一个公有Transform组件5privateTransformpriTrans;/声明一个私有Transform组件6voidStart()/重新Start方法7priTrans=this.transform;/为priTrans赋值89voidUpdate()/重写Update方法10if(Vector3.Distance(pubTrans.position,priTrans.position)10)/如果ren和transform的距离小于1011Debug.Log(pubTrans.position);/打印pubTrans的位置12,第15页,2.3Unity脚本的基础语法,2.3.7实例化游戏对象Unity中如果想创建游戏对象,可以通过创建游戏对象菜单在场景中进行,如果想创建很多相同的物体(例如射击出去的子弹,保龄球瓶等)时,可以通过实例化(Instantiate)快速实现,第16页,2.3Unity脚本的基础语法,2.3.7实例化游戏对象1usingUnityEngine;2usingSystem.Collections;/引入系统包3publicclassBNUIns:MonoBehaviour/声明类4publicTransformprefab;/定义公有的对象5publicvoidAwake()/重写Awake方法6inti=0;/定义计数标志位7while(i5)/重复5次8Instantiate(prefab,newVector3(i*2.0F,0,0),Quaternion.identity);/实例化对象9i+;/标志位自加10,第17页,2.3Unity脚本的基础语法,2.3.8协同程序和中断协同程序,即在主程序运行时同时开启另一段逻辑处理,来协同当前程序的执行。但它与多线程程序不同,所有的协同程序都是在主线程中运行的,它还是一个单线程程序。在Unity中可以通过StartCoroutine方法来启动一个协同程序。终止一个协同程序可以使用StopCoroutine(stringmethodName),而使用StopAllCoroutines()是用来终止所有可以终止的协同程序,但这两个方法都只能终止该MonoBehaviour中的协同程序。,第18页,2.3Unity脚本的基础语法,2.3.8协同程序和中断1usingUnityEngine;2usingSystem.Collections;/引入系统包3publicclassBNUCoroutine:MonoBehaviour/声明类4IEnumeratorStart()/重写Start方法5StartCoroutine(DoSomething,2.0F);/开启协同程序6yieldreturnnewWaitForSeconds(1);/等待1s7StopCoroutine(DoSomething);/中断协同程序8IEnumeratorDoSomething(floatsomeParameter)/声明DoSomething方法9while(true)/开始循环10print(DoSomethingLoop);/打印提示信息11yieldreturnnull;,第19页,2.3Unity脚本的基础语法,2.3.9一些重要的类1.MonoBehaviour类MonoBehaviour类是C#脚本的基类,其继承自Behaviour类。在C#脚本中,必须直接或间接的继承MonoBehaviour类2.Transform类场景中的每一个物体都有一个Transform组件,它就是Transform类实例化的对象。用于储存并操控物体的位置、旋转和缩放。每一个Transform可以有一个父级,允许分层次应用位置、旋转和缩放。可以在Hierarchy面板查看层次关系。Transform类中包含了很多的成员变量,第20页,2.3Unity脚本的基础语法,2.3.9一些重要的类3.Rigidbody类Rigidbody组件可以模拟物体在物理效果下的状态,它就是Rigidbody类实例化的对象。它可以让物体接受力和扭矩,让物体相对真实地移动。如果一个物体想被重力所约束,其必须含有Rigidbody组件。Rigidbody类中包含了很多的成员变量4.CharacterController类角色控制器是CharacterController类的实例化对象,用于第三人称或第一人称游戏角色控制。它可以根据碰撞检测判断是否能够移动,而不必添加刚体和碰撞器。而且角色控制器不会受到力的影响。CharacterController类包含了很多的成员变量,第21页,2.3Unity脚本的基础语法,2.3.10性能优化1.缓存组件查询当通过GetComponent获取一个组件时,Unity必须从游戏物体里查找目标组件,如果是在Update方法中进行查找,就会影响运行速度。此时可以设置一个私有变量去储存这个组件。,第22页,2.3Unity脚本的基础语法,2.3.10性能优化1usingUnityEngine;2usingSystem.Collections;/引入系统包3publicclassBNUyh1:MonoBehaviour/声明类4privateTransformm_transform;/声明静态变量5voidStart()/重写Start方法6m_transform=this.transform;/为静态变量赋值78voidUpdate()/重写Update方法9m_transform.Translate(newVector3(1,0,0);/沿x轴每帧移动一米10,第23页,2.3Unity脚本的基础语法,2.3.10性能优化2.使用内建数组我们在开发的过程中不可避免的使用到数组,虽然ArrayList和Array使用起来容易并且方便,但是相比较内建数组而言,前者和后者的速度还是有很大的差异。内建数组直接嵌入struct数据类型存入第一缓冲区里,不需要其他类型信息或者其他资源,因此用作缓存遍历更加快捷。所以我们在开发的过程中应该尽量的使用内建数组。,第24页,2.3Unity脚本的基础语法,2.3.10性能优化3.尽量少调用函数干最少的工作实现最大的效益也是性能优化中非常重要的一点。上文中也提到了,Unity中Update函数每一帧都在运行,所以减少Update函数里面的工作量,可以简单有效地提高运行效率。这就需要开发者编程开发的技巧达成,比如在通过协调程序或者加入标志位实现。注意:在实际开发中,一般把标志位检查放在函数外面,这样就无需每一帧都检查标志位,减少了设备性能的消耗。,第25页,2.3Unity脚本的基础语法,2.3.11脚本编译脚本的具体编译需要以下4步。(1)所有在StandardAssets,ProStandardAssets,Plugins中的脚本被首先
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 304钢水箱施工方案
- 小学课本剧《巨人的花园》-剧本
- 教师安全知识培训课件
- 江苏省无锡市长泾片重点名校2025届中考生物猜题卷含解析
- 临时导游聘用合同范例
- 供配电安装合同范例
- 单位内部组织合同范例
- 供货订货合同范例
- 仓库财务成本控制方案计划
- 常规班级活动的周期性评估计划
- (高清版)JTGT 3650-01-2022 公路桥梁施工监控技术规程
- DZ∕T 0213-2020 矿产地质勘查规范 石灰岩、水泥配料类(正式版)
- MOOC 跨文化交际通识通论-扬州大学 中国大学慕课答案
- GB/T 28799.2-2020冷热水用耐热聚乙烯(PE-RT)管道系统第2部分:管材
- 2023-瑞幸咖啡vi手册
- 溶血性贫血护理
- 人教版九年级物理第十单元《能源与可持续发展-太阳能》PPT课件
- 首件检验作业流程控制卡
- 身份证号码转换工具
- 人教版八年级下册数学章末培优试题:第十八章《平行四边形》
- 口腔诊所器材清单
评论
0/150
提交评论