首页 unityDUnity脚本程序基础知识

unityDUnity脚本程序基础知识

举报
开通vip

unityDUnity脚本程序基础知识第页2.1Unity脚本概述?Unity中的脚本分为不同的方法,不同的方法在特定的情况下被回调会实现特定的功能。Start方法:这个方法在游戏场景加载时被调用,在该方法内可以写一些游戏场景初始化之类的代码。Update方法:这个方法会在每一帧渲染之前被调用,大部分游戏代码在这里执行,除了物理部分的代码。FixedUpdate方法:这个方法会在固定的物理时间步调调用一次。这里也是基本物理行为代码执行的地方。第1页/共25页第页2.2Unity中C#脚本的注意事项继承自MonoBehaviour类。类名字必须匹配文件名...

unityDUnity脚本程序基础知识
第页2.1Unity脚本概述?Unity中的脚本分为不同的方法,不同的方法在特定的情况下被回调会实现特定的功能。Start方法:这个方法在游戏场景加载时被调用,在该方法内可以写一些游戏场景初始化之类的代码。Update方法:这个方法会在每一帧渲染之前被调用,大部分游戏代码在这里执行,除了物理部分的代码。FixedUpdate方法:这个方法会在固定的物理时间步调调用一次。这里也是基本物理行为代码执行的地方。第1页/共25页第页2.2Unity中C#脚本的注意事项继承自MonoBehaviour类。类名字必须匹配文件名。Unity脚本中协同程序有不同的语法规则。只有满足特定情况变量才能显示在属性查看器中。尽量避免使用构造函数第2页/共25页第页2.3Unity脚本的基础语法2.3.1位移与旋转位移与旋转:在Unity中对游戏对象的操作都是通过脚本来修改游戏对象的Transform(变换属性)与Rigidbody(刚体属性)参数来实现的。这些参数的修改是通过脚本编程来实现的。具体开发 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 如下。(1)创建Cube对象。点击GameObject→3DObject→Cube,创建一个Cube对象作为本案例案例对象,可以在左侧面板点击Cube查看其相关属性。(2)编写脚本。在Assets面板点击Create→C#Script,创建一个C#脚本,并将其命名为BUNTrans,然后编写脚本。(3)挂载脚本。脚本开发完成后,将这个脚本挂载到游戏对象上。第3页/共25页第页2.3Unity脚本的基础语法2.3.1位移与旋转1usingUnityEngine;2usingSystem.Collections;//引入系统包3publicclassBNUTransR:MonoBehaviour{//声明类4voidUpdate(){//重写Update方法5this.transform.Rotate(2,0,0);//绕x轴每帧旋转2°6}}1usingUnityEngine;2usingSystem.Collections;//引入系统包3publicclassBNUTransT:MonoBehaviour{//声明类4voidUpdate(){//重写Update方法5this.transform.Translate(0,0,1);//物体每帧沿z轴移动1个单位长度6}}第4页/共25页第页2.3Unity脚本的基础语法2.3.2记录时间记录时间需要用到Time类,Time类中比较重要的变量为deltaTime它指的是从最近一次调用Update或者FixedUpdate方法到现在的时间具体开发流程如下。(1)创建Cube对象。点击GameObject→3DObject→Cube(2)编写脚本。在Assets面板点击Create→C#Script。(3)挂载脚本。脚本开发完成后,将这个脚本挂载到游戏对象上。第5页/共25页第页2.3Unity脚本的基础语法2.3.2记录时间1usingUnityEngine;2usingSystem.Collections;//引入系统包3publicclassBNUTime:MonoBehaviour{//声明类4voidUpdate(){//重写Update方法5this.transform.Rotate(10*Time.deltaTime,0,0);//绕x轴均匀旋转6}}第6页/共25页第页2.3Unity脚本的基础语法2.3.3访问游戏对象组件在Unity中组件属于游戏对象,组件(Component)其实是用来绑定到游戏对象(GameObject)上的一组相关属性。本质上每个组件是一个类的实例。常见的组件有:MeshFilter、MeshCollider、Renderer、Animation等等。组件名称变量名称组件名称变量名称TransformtransformRigidbodyrigidbodyRendererrendererCameraCamera(只在摄像机对象有效)LightLight(只在光源对象有效)AnimationanimationCollidercollider第7页/共25页第页2.3Unity脚本的基础语法2.3.3访问游戏对象组件1usingUnityEngine;2usingSystem.Collections;//引入系统包3publicclassBNUComponent:MonoBehaviour{//声明类4voidUpdate(){//重写Update方法5transform.Translate(1,0,0);//沿x轴移动一个单位6GetComponent<Transform>().Translate(1,0,0);//沿x轴移动一个单位7}}第8页/共25页第页2.3Unity脚本的基础语法2.3.4访问其它游戏对象1、通过属性查看器指定参数2、确定对象的层次关系3、通过名字或标签获取游戏对象4、通过组件名称获取游戏对象第9页/共25页第页2.3Unity脚本的基础语法2.3.5向量3D游戏开发中经常需要用到向量和向量的运算,比如上述介绍的物体的位移和旋转等,Unity中提供了完整的用来 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示二维向量的Vector2类和表示三维向量的Vector3类。Vector3类中常量对应的值常量值常量值Vector3.zeroVector(0,0,0)Vector3.oneVector(1,1,1)Vector3.forwardVector(0,0,1)Vector3.upVector(0,1,0)Vector3.rigthVector(1,0,0)第10页/共25页第页2.3Unity脚本的基础语法2.3.5向量方法作用Lerp两个向量之间的线性插值。Slerp在两个向量之间进行球形插值。OrthoNormalize使向量 规范 编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载 化并且彼此相互垂直。MoveTowards从当前的位置移向目标。RotateTowards当前的向量转向目标。Scale两个矢量组件对应相乘。Cross两个向量的交叉乘积。Dot两个向量的点乘积。Reflect沿着法线反射向量。Distance返回两点之间的距离。Project投影一个向量到另一个向量。Angle返回两个向量的夹角。Min返回两个向量中长度较小的向量。Max返回两个向量中长度较大的向量。operator+两个向量相加operator-两个向量相减operator*两个向量相乘operator/两个向量相除operator==两个向量是否相等operator!=两个向量是否不相等ClampMagnitude返回向量的长度,最大不超过maxLength所指示的长度。SmoothDamp随着时间的推移,逐渐改变一个向量朝向预期的目标。第11页/共25页第页2.3Unity脚本的基础语法2.3.6成员变量和全局变量定义在方法体外的变量是成员变量,可以在属性查看器看到,读者可以随时在属性查看器中修改它的值。通过private创建的变量是私有变量,这些在属性查看器中就不会显示该变量第12页/共25页第页2.3Unity脚本的基础语法2.3.6成员变量和全局变量1usingUnityEngine;2usingSystem.Collections;//引入系统包3publicclassBNUPubvar:MonoBehaviour{//声明类publicTransformpubTrans;//声明一个公有Transform组件5privateTransformpriTrans;//声明一个私有Transform组件6voidStart(){//重新Start方法7priTrans=this.transform;//为priTrans赋值8}9voidUpdate(){//重写Update方法10if(Vector3.Distance(pubTrans.position,priTrans.position)<10){//如果ren和transform的距离小于1011Debug.Log(pubTrans.position);//打印pubTrans的位置12}}}第13页/共25页第页2.3Unity脚本的基础语法2.3.7实例化游戏对象Unity中如果想创建游戏对象,可以通过创建游戏对象菜单在场景中进行,如果想创建很多相同的物体(例如射击出去的子弹,保龄球瓶等)时,可以通过实例化(Instantiate)快速实现第14页/共25页第页2.3Unity脚本的基础语法2.3.7实例化游戏对象1usingUnityEngine;2usingSystem.Collections;//引入系统包3publicclassBNUIns:MonoBehaviour{//声明类4publicTransformprefab;//定义公有的对象5publicvoidAwake(){//重写Awake方法6inti=0;//定义计数标志位7while(i<5){//重复5次8Instantiate(prefab,newVector3(i*2.0F,0,0),Quaternion.identity);//实例化对象9i++;//标志位自加10}}}第15页/共25页第页2.3Unity脚本的基础语法2.3.8协同程序和中断协同程序,即在主程序运行时同时开启另一段逻辑处理,来协同当前程序的执行。但它与多线程程序不同,所有的协同程序都是在主线程中运行的,它还是一个单线程程序。在Unity中可以通过StartCoroutine方法来启动一个协同程序。终止一个协同程序可以使用StopCoroutine(stringmethodName),而使用StopAllCoroutines()是用来终止所有可以终止的协同程序,但这两个方法都只能终止该MonoBehaviour中的协同程序。第16页/共25页第页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;}}}第17页/共25页第页2.3Unity脚本的基础语法2.3.9一些重要的类1.MonoBehaviour类MonoBehaviour类是C#脚本的基类,其继承自Behaviour类。在C#脚本中,必须直接或间接的继承MonoBehaviour类2.Transform类场景中的每一个物体都有一个Transform组件,它就是Transform类实例化的对象。用于储存并操控物体的位置、旋转和缩放。每一个Transform可以有一个父级,允许分层次应用位置、旋转和缩放。可以在Hierarchy面板查看层次关系。Transform类中包含了很多的成员变量第18页/共25页第页2.3Unity脚本的基础语法2.3.9一些重要的类3.Rigidbody类Rigidbody组件可以模拟物体在物理效果下的状态,它就是Rigidbody类实例化的对象。它可以让物体接受力和扭矩,让物体相对真实地移动。如果一个物体想被重力所约束,其必须含有Rigidbody组件。Rigidbody类中包含了很多的成员变量4.CharacterController类角色控制器是CharacterController类的实例化对象,用于第三人称或第一人称游戏角色控制。它可以根据碰撞检测判断是否能够移动,而不必添加刚体和碰撞器。而且角色控制器不会受到力的影响。CharacterController类包含了很多的成员变量第19页/共25页第页2.3Unity脚本的基础语法2.3.10性能优化1.缓存组件查询当通过GetComponent获取一个组件时,Unity必须从游戏物体里查找目标组件,如果是在Update方法中进行查找,就会影响运行速度。此时可以设置一个私有变量去储存这个组件。第20页/共25页第页2.3Unity脚本的基础语法2.3.10性能优化1usingUnityEngine;2usingSystem.Collections;//引入系统包3publicclassBNUyh1:MonoBehaviour{//声明类4privateTransformm_transform;//声明静态变量5voidStart(){//重写Start方法6m_transform=this.transform;//为静态变量赋值7}8voidUpdate(){//重写Update方法9m_transform.Translate(newVector3(1,0,0));//沿x轴每帧移动一米10}}第21页/共25页第页2.3Unity脚本的基础语法2.3.10性能优化2.使用内建数组我们在开发的过程中不可避免的使用到数组,虽然ArrayList和Array使用起来容易并且方便,但是相比较内建数组而言,前者和后者的速度还是有很大的差异。内建数组直接嵌入struct数据类型存入第一缓冲区里,不需要其他类型信息或者其他资源,因此用作缓存遍历更加快捷。所以我们在开发的过程中应该尽量的使用内建数组。第22页/共25页第页2.3Unity脚本的基础语法2.3.10性能优化3.尽量少调用函数干最少的工作实现最大的效益也是性能优化中非常重要的一点。上文中也提到了,Unity中Update函数每一帧都在运行,所以减少Update函数里面的工作量,可以简单有效地提高运行效率。这就需要开发者编程开发的技巧达成,比如在通过协调程序或者加入标志位实现。注意:在实际开发中,一般把标志位检查放在函数外面,这样就无需每一帧都检查标志位,减少了设备性能的消耗。第23页/共25页第页2.3Unity脚本的基础语法2.3.11脚本编译脚本的具体编译需要以下4步。(1)所有在StandardAssets,ProStandardAssets,Plugins中的脚本被首先编译。在这些文件夹之内的脚本不能直接访问这些文件夹以外的脚本。不能直接引用类或它的变量,但是可以使用GameObject.SendMessage与他们通信。(2)所有在StandardAssets/Editor,ProStandardAssets/Editor,Plugins/Editor中的脚本接着被编译。如果你想要使用UnityEditor命名空间,你必须放置你的脚本到这些文件夹。(3)然后所有在Assets/Editor外面的,并且不在(1)、(2)中的脚本文件被编译。(4)所有在Assets/Editor中的脚本,最后被编译。第24页/共25页第页谢谢您的观看!第25页/共25页
本文档为【unityDUnity脚本程序基础知识】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
莉莉老师
暂无简介~
格式:ppt
大小:152KB
软件:PowerPoint
页数:25
分类:
上传时间:2021-11-27
浏览量:16