Unity教学课件: 第02章 Unity脚本程序基础知识_第1页
Unity教学课件: 第02章 Unity脚本程序基础知识_第2页
Unity教学课件: 第02章 Unity脚本程序基础知识_第3页
Unity教学课件: 第02章 Unity脚本程序基础知识_第4页
Unity教学课件: 第02章 Unity脚本程序基础知识_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第1页 第2页 Unity中的脚本分为不同的方法,不同的方法在特定中的脚本分为不同的方法,不同的方法在特定 的情况下被回调会实现特定的功能。的情况下被回调会实现特定的功能。 Start方法:这个方法在游戏场景加载时被调用,在方法:这个方法在游戏场景加载时被调用,在 该方法内可以写一些游戏场景初始化之类的代码。该方法内可以写一些游戏场景初始化之类的代码。 Update方法:这个方法会在每一帧渲染之前被调用,方法:这个方法会在每一帧渲染之前被调用, 大部分游戏代码在这里执行,除了物理部分的代码。大部分游戏代码在这里执行,除了物理部分的代码。 FixedUpdate方法:这个方法会在固定的物理时间方

2、法:这个方法会在固定的物理时间 步调调用一次。这里也是基本物理行为代码执行的步调调用一次。这里也是基本物理行为代码执行的 地方。地方。 第3页 继承自继承自MonoBehaviour类。类。 类名字必须匹配文件名。类名字必须匹配文件名。 Unity脚本中协同程序有不同的语法规则。脚本中协同程序有不同的语法规则。 只有满足特定情况变量才能显示在属性查看器中。只有满足特定情况变量才能显示在属性查看器中。 尽量避免使用构造函数尽量避免使用构造函数 第4页 2.3.1 位移与旋转位移与旋转 位移与旋转:在位移与旋转:在Unity中对游戏对象的操作都是通过脚本来修中对游戏对象的操作都是通过脚本来修 改游

3、戏对象的改游戏对象的Transform(变换属性)与(变换属性)与Rigidbody(刚体(刚体 属性)参数来实现的。这些参数的修改是通过脚本编程来实属性)参数来实现的。这些参数的修改是通过脚本编程来实 现的。现的。 具体开发流程如下。具体开发流程如下。 (1)创建)创建Cube对象。点击对象。点击GameObject3D ObjectCube,创建一个,创建一个Cube对象作为本案例案例对象,对象作为本案例案例对象, 可以在左侧面板点击可以在左侧面板点击Cube查看其相关属性。查看其相关属性。 (2)编写脚本。在)编写脚本。在Assets面板点击面板点击CreateC# Script,创,创

4、 建一个建一个C#脚本,并将其命名为脚本,并将其命名为BUNTrans,然后编写脚本。,然后编写脚本。 (3)挂载脚本。脚本开发完成后,将这个脚本挂载到游戏)挂载脚本。脚本开发完成后,将这个脚本挂载到游戏 对象上对象上 。 第5页 2.3.1 位移与旋转位移与旋转 1 using UnityEngine; 2 using System.Collections;/引入系统包引入系统包 3 public class BNUTransR : MonoBehaviour /声明类声明类 4 void Update()/重写重写Update方法方法 5 this.transform.Rotate(2,0

5、,0);/绕绕x轴每帧旋转轴每帧旋转2 6 1 using UnityEngine; 2 using System.Collections; /引入系统包引入系统包 3 public class BNUTransT : MonoBehaviour/声明类声明类 4 void Update()/重写重写Update方法方法 5 this.transform.Translate(0, 0, 1); /物体每帧沿物体每帧沿z轴移动轴移动1个单位长度个单位长度 6 第6页 2.3.2 记录时间 记录时间需要用到记录时间需要用到Time类类 ,Time类中比较重要的变类中比较重要的变 量为量为delta

6、Time它指的是从最近一次调用它指的是从最近一次调用Update或者或者 FixedUpdate方法到现在的时间方法到现在的时间 具体开发流程如下。具体开发流程如下。 (1)创建)创建Cube对象。点击对象。点击 GameObject3DObjectCube (2)编写脚本。在)编写脚本。在Assets面板点击面板点击CreateC# Script。 (3)挂载脚本。脚本开发完成后,将这个脚本挂载)挂载脚本。脚本开发完成后,将这个脚本挂载 到游戏对象上到游戏对象上 。 第7页 2.3.2 记录时间 1 using UnityEngine; 2 using System.Collections;

7、/引入系统包引入系统包 3 public class BNUTime : MonoBehaviour/声明类声明类 4 void Update()/重写重写Update方法方法 5 this.transform.Rotate(10 * Time.deltaTime, 0, 0); /绕绕x轴均匀旋转轴均匀旋转 6 第8页 2.3.3 访问游戏对象组件 在在Unity中组件属于游戏对象,组件(中组件属于游戏对象,组件(Component)其实是用来绑定)其实是用来绑定 到游戏对象(到游戏对象(Game Object)上的一组相关属性。本质上每个组件是)上的一组相关属性。本质上每个组件是 一个类的

8、实例。常见的组件有:一个类的实例。常见的组件有:MeshFilter、MeshCollider、 Renderer、Animation等等。等等。 组件名称变量名称组件名称变量名称 TransformtransformRigidbodyrigidbody RendererrendererCameraCamera(只在摄像机对象有效) LightLight(只在光源 对象有效) Animationanimation Collidercollider 第9页 2.3.3 访问游戏对象组件 1 using UnityEngine; 2 using System.Collections; /引入系统包

9、引入系统包 3 public class BNUComponent : MonoBehaviour /声明类声明类 4 void Update()/重写重写Update方法方法 5 transform.Translate(1, 0, 0); /沿沿x轴移动一个单位轴移动一个单位 6 GetComponent().Translate(1, 0, 0); /沿沿x轴移动一个单位轴移动一个单位 7 第10页 2.3.4 访问其它游戏对象 1、通过属性查看器指定参数、通过属性查看器指定参数 2、确定对象的层次关系、确定对象的层次关系 3、通过名字或标签获取游戏对象、通过名字或标签获取游戏对象 4、通过

10、组件名称获取游戏对象、通过组件名称获取游戏对象 第11页 2.3.5 向量 3D游戏开发中经常需要用到向量和向量的运算,比如上述介绍游戏开发中经常需要用到向量和向量的运算,比如上述介绍 的物体的位移和旋转等,的物体的位移和旋转等,Unity中提供了完整的用来表示二维向中提供了完整的用来表示二维向 量的量的Vector2类和表示三维向量的类和表示三维向量的Vector3类。类。 Vector3类中常量对应的值类中常量对应的值 常量值常量值 Vector3.zeroVector(0,0,0)Vector3.oneVector(1,1,1) Vector3.forwardVector(0,0,1)V

11、ector3.upVector(0,1,0) Vector3.rigthVector(1,0,0) 第12页 2.3.5 向量 方法作用 Lerp两个向量之间的线性插值。Slerp在两个向量之间进行球形插值。 OrthoNormalize使向量规范化并且彼此相互垂直。MoveTowards从当前的位置移向目标。 RotateTowards当前的向量转向目标。Scale两个矢量组件对应相乘。 Cross两个向量的交叉乘积。Dot两个向量的点乘积。 Reflect沿着法线反射向量。Distance返回两点之间的距离。 Project投影一个向量到另一个向量。Angle返回两个向量的夹角。 Min返

12、回两个向量中长度较小的向量。Max返回两个向量中长度较大的向量。 operator +两个向量相加operator -两个向量相减 operator *两个向量相乘operator /两个向量相除 operator =两个向量是否相等operator !=两个向量是否不相等 ClampMagnitude返回向量的长度,最大不超过 maxLength所指示的长度。 SmoothDamp随着时间的推移,逐渐改变一个 向量朝向预期的目标。 第13页 2.3.6 成员变量和全局变量 定义在方法体外的变量是成员变量,可以在属性查看器看到,读者可定义在方法体外的变量是成员变量,可以在属性查看器看到,读者可

13、 以随时在属性查看器中修改它的值。通过以随时在属性查看器中修改它的值。通过private创建的变量是私有变创建的变量是私有变 量,这些在属性查看器中就不会显示该变量量,这些在属性查看器中就不会显示该变量 第14页 2.3.6 成员变量和全局变量 1 using UnityEngine; 2 using System.Collections; /引入系统包引入系统包 3 public class BNUPubvar : MonoBehaviour/声明类声明类 public Transform pubTrans;/声明一个公有声明一个公有Transform组件组件 5 private Trans

14、form priTrans;/声明一个私有声明一个私有Transform组件组件 6 void Start()/重新重新Start方法方法 7 priTrans = this.transform;/为为priTrans赋值赋值 8 9 void Update()/重写重写Update方法方法 10 if (Vector3.Distance(pubTrans.position, priTrans.position) 10) /如果如果ren和和transform的距离小于的距离小于10 11 Debug.Log(pubTrans.position);/打印打印pubTrans的位置的位置 12

15、第15页 2.3.7 实例化游戏对象 Unity中如果想创建游戏对象,可以通过创建游戏 对象菜单在场景中进行,如果想创建很多相同的 物体(例如射击出去的子弹,保龄球瓶等)时, 可以通过实例化(Instantiate)快速实现 第16页 2.3.7 实例化游戏对象 1 using UnityEngine; 2 using System.Collections; /引入系统包 3 public class BNUIns : MonoBehaviour/声明类 4 public Transform prefab;/定义公有的对象 5 public void Awake()/重写Awake方法 6 i

16、nt i = 0;/定义计数标志位 7 while (i 5)/重复5次 8 Instantiate(prefab, new Vector3(i * 2.0F, 0, 0), Quaternion.identity);/实例化对象 9 i+;/标志位自加 10 第17页 2.3.8 协同程序和中断 协同程序,即在主程序运行时同时开启另一段逻辑处协同程序,即在主程序运行时同时开启另一段逻辑处 理,来协同当前程序的执行。但它与多线程程序不同,理,来协同当前程序的执行。但它与多线程程序不同, 所有的协同程序都是在主线程中运行的,它还是一个所有的协同程序都是在主线程中运行的,它还是一个 单线程程序。在

17、单线程程序。在Unity中可以通过中可以通过StartCoroutine方方 法来启动一个协同程序。法来启动一个协同程序。 终止一个协同程序可以使用终止一个协同程序可以使用StopCoroutine(string methodName),而使用,而使用StopAllCoroutines()是用来是用来 终止所有可以终止的协同程序,但这两个方法都只能终止所有可以终止的协同程序,但这两个方法都只能 终止该终止该MonoBehaviour中的协同程序。中的协同程序。 第18页 2.3.8 协同程序和中断 1 using UnityEngine; 2 using System.Collections;

18、 /引入系统包 3 public class BNUCoroutine : MonoBehaviour/声明类 4 IEnumerator Start() /重写Start方法 5 StartCoroutine(DoSomething, 2.0F); /开启协同程序 6 yield return new WaitForSeconds(1);/等待1s 7 StopCoroutine(DoSomething); /中断协同程序 8 IEnumerator DoSomething(float someParameter) /声明DoSomething方法 9 while (true)/开始循环 1

19、0 print(DoSomething Loop);/打印提示信息 11 yield return null; 第19页 2.3.9 一些重要的类 1. MonoBehaviour类类 MonoBehaviour类是类是C#脚本的基类,其继承自脚本的基类,其继承自 Behaviour类。在类。在C#脚本中,必须直接或间接的继承脚本中,必须直接或间接的继承 MonoBehaviour类类 2. Transform类类 场景中的每一个物体都有一个场景中的每一个物体都有一个Transform组件,它就组件,它就 是是Transform类实例化的对象。用于储存并操控物体类实例化的对象。用于储存并操控物

20、体 的位置、旋转和缩放。每一个的位置、旋转和缩放。每一个Transform可以有一个可以有一个 父级,允许分层次应用位置、旋转和缩放。可以在父级,允许分层次应用位置、旋转和缩放。可以在 Hierarchy面板查看层次关系。面板查看层次关系。Transform类中包含类中包含 了很多的成员变量了很多的成员变量 第20页 2.3.9 一些重要的类 3. Rigidbody类类 Rigidbody组件可以模拟物体在物理效果下的状态,它就是组件可以模拟物体在物理效果下的状态,它就是 Rigidbody类实例化的对象。它可以让物体接受力和扭矩,让类实例化的对象。它可以让物体接受力和扭矩,让 物体相对真实

21、地移动。如果一个物体想被重力所约束,其必须物体相对真实地移动。如果一个物体想被重力所约束,其必须 含有含有Rigidbody组件。组件。Rigidbody类中包含了很多的成员变量类中包含了很多的成员变量 4. CharacterController类类 角色控制器是角色控制器是CharacterController类的实例化对象,用于第类的实例化对象,用于第 三人称或第一人称游戏角色控制。它可以根据碰撞检测判断是三人称或第一人称游戏角色控制。它可以根据碰撞检测判断是 否能够移动,而不必添加刚体和碰撞器。而且角色控制器不会否能够移动,而不必添加刚体和碰撞器。而且角色控制器不会 受到力的影响。受到

22、力的影响。CharacterController类包含了很多的成员变类包含了很多的成员变 量量 第21页 2.3.10 性能优化 1. 缓存组件查询缓存组件查询 当通过当通过GetComponent获取一个组件时,获取一个组件时,Unity必须必须 从游戏物体里查找目标组件,如果是在从游戏物体里查找目标组件,如果是在Update方法方法 中进行查找,就会影响运行速度。此时可以设置一个中进行查找,就会影响运行速度。此时可以设置一个 私有变量去储存这个组件。私有变量去储存这个组件。 第22页 2.3.10 性能优化 1 using UnityEngine; 2 using System.Colle

23、ctions; /引入系统包引入系统包 3 public class BNUyh1 : MonoBehaviour /声明类声明类 4 private Transform m_transform;/声明静态变量声明静态变量 5 void Start () /重写重写Start方法方法 6 m_transform = this.transform;/为静态变量赋值为静态变量赋值 7 8 void Update () /重写重写Update方法方法 9 m_transform.Translate(new Vector3(1,0,0); /沿沿x轴每帧移动一米轴每帧移动一米 10 第23页 2.3.10 性能优化 2. 使用内建数组使用内建数组 我们在开发的过程中不可避免的使用到数组,虽然我们在开发的过程中不可避免的使用到数组,虽然 ArrayList和和Array使用起来容易并且方便,但是相比使用起来容易并且方便,但是相比 较内建数组而言,前者和后者的速度还是有很大的差较内建数组而言,前者和后者的速度还是有很大的差 异。内建数组直接嵌入异。内建数组直接嵌入struct数据类型存入第一缓冲数据类型存入第一缓冲 区里,不需要其他类型信息或者其他资源,因此用作区里,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论