




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第1页2.1 Unity脚本概述? Unity中的脚本分为不同的方法,不同的方法在特定的情况下被回调会实现特定的功能。 Start方法:这个方法在游戏场景加载时被调用,在该方法内可以写一些游戏场景初始化之类的代码。 Update方法:这个方法会在每一帧渲染之前被调用,大部分游戏代码在这里执行,除了物理部分的代码。 FixedUpdate方法:这个方法会在固定的物理时间步调调用一次。这里也是基本物理行为代码执行的地方。第2页2.2 Unity中C#脚本的注意事项 继承自MonoBehaviour类。 类名字必须匹配文件名。 Unity脚本中协同程序有不同的语法规则。 只有满足特定情况变量才能显示
2、在属性查看器中。 尽量避免使用构造函数第3页2.3 Unity脚本的基础语法 2.3.1 位移与旋转 位移与旋转:在Unity中对游戏对象的操作都是通过脚本来修改游戏对象的Transform(变换属性)与Rigidbody(刚体属性)参数来实现的。这些参数的修改是通过脚本编程来实现的。 具体开发流程如下。 (1)创建Cube对象。点击GameObject3D ObjectCube,创建一个Cube对象作为本案例案例对象,可以在左侧面板点击Cube查看其相关属性。 (2)编写脚本。在Assets面板点击CreateC# Script,创建一个C#脚本,并将其命名为BUNTrans,然后编写脚本。
3、 (3)挂载脚本。脚本开发完成后,将这个脚本挂载到游戏对象上 。 第4页2.3 Unity脚本的基础语法 2.3.1 位移与旋转 1using UnityEngine; 2using System.Collections;/引入系统包 3 public class BNUTransR : MonoBehaviour /声明类 4 void Update()/重写Update方法 5 this.transform.Rotate(2,0,0); /绕x轴每帧旋转2 6 1using UnityEngine; 2using System.Collections; /引入系统包 3public cla
4、ss BNUTransT : MonoBehaviour/声明类 4 void Update()/重写Update方法 5 this.transform.Translate(0, 0, 1); /物体每帧沿z轴移动1个单位长度 6第5页2.3 Unity脚本的基础语法 2.3.2 记录时间 记录时间需要用到Time类 ,Time类中比较重要的变量为deltaTime它指的是从最近一次调用Update或者FixedUpdate方法到现在的时间 具体开发流程如下。 (1)创建Cube对象。点击GameObject3DObjectCube (2)编写脚本。在Assets面板点击CreateC# Sc
5、ript。 (3)挂载脚本。脚本开发完成后,将这个脚本挂载到游戏对象上 。 第6页2.3 Unity脚本的基础语法 2.3.2 记录时间 1using UnityEngine; 2using System.Collections;/引入系统包 3public class BNUTime : MonoBehaviour/声明类 4 void Update()/重写Update方法 5 this.transform.Rotate(10 * Time.deltaTime, 0, 0);/绕x轴均匀旋转 6第7页2.3 Unity脚本的基础语法 2.3.3 访问游戏对象组件 在Unity中组件属于游戏
6、对象,组件(Component)其实是用来绑定到游戏对象(Game Object)上的一组相关属性。本质上每个组件是一个类的实例。常见的组件有:MeshFilter、MeshCollider、Renderer、Animation等等。组件名称变量名称组件名称变量名称TransformtransformRigidbodyrigidbodyRendererrendererCameraCamera(只在摄像机对象有效)LightLight(只在光源对象有效)AnimationanimationCollidercollider第8页2.3 Unity脚本的基础语法 2.3.3 访问游戏对象组件 1us
7、ing UnityEngine; 2using System.Collections; /引入系统包 3public class BNUComponent : MonoBehaviour /声明类 4 void Update()/重写Update方法 5 transform.Translate(1, 0, 0);/沿x轴移动一个单位 6 GetComponent().Translate(1, 0, 0); /沿x轴移动一个单位 7第9页2.3 Unity脚本的基础语法 2.3.4 访问其它游戏对象 1、通过属性查看器指定参数 2、确定对象的层次关系 3、通过名字或标签获取游戏对象 4、通过组件
8、名称获取游戏对象第10页2.3 Unity脚本的基础语法 2.3.5 向量 3D游戏开发中经常需要用到向量和向量的运算,比如上述介绍的物体的位移和旋转等,Unity中提供了完整的用来表示二维向量的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)第11页2.3 Unity脚本的基础语法 2.3.5 向量
9、方法作用Lerp两个向量之间的线性插值。Slerp在两个向量之间进行球形插值。OrthoNormalize使向量规范化并且彼此相互垂直。 MoveTowards从当前的位置移向目标。RotateTowards当前的向量转向目标。Scale两个矢量组件对应相乘。Cross两个向量的交叉乘积。Dot两个向量的点乘积。Reflect沿着法线反射向量。Distance返回两点之间的距离。Project投影一个向量到另一个向量。Angle返回两个向量的夹角。Min返回两个向量中长度较小的向量。 Max返回两个向量中长度较大的向量。operator +两个向量相加operator -两个向量相减opera
10、tor *两个向量相乘operator /两个向量相除operator =两个向量是否相等operator !=两个向量是否不相等ClampMagnitude返回向量的长度,最大不超过maxLength所指示的长度。SmoothDamp随着时间的推移,逐渐改变一个向量朝向预期的目标。第12页2.3 Unity脚本的基础语法 2.3.6 成员变量和全局变量 定义在方法体外的变量是成员变量,可以在属性查看器看到,读者可以随时在属性查看器中修改它的值。通过private创建的变量是私有变量,这些在属性查看器中就不会显示该变量 第13页2.3 Unity脚本的基础语法 2.3.6 成员变量和全局变量
11、1using UnityEngine; 2using System.Collections; /引入系统包 3public class BNUPubvar : MonoBehaviour/声明类 public Transform pubTrans;/声明一个公有Transform组件 5 private Transform priTrans;/声明一个私有Transform组件 6 void Start()/重新Start方法 7 priTrans = this.transform;/为priTrans赋值 8 9 void Update()/重写Update方法 10 if (Vector3
12、.Distance(pubTrans.position, priTrans.position) 10) /如果ren和transform的距离小于10 11 Debug.Log(pubTrans.position);/打印pubTrans的位置 12第14页2.3 Unity脚本的基础语法 2.3.7 实例化游戏对象 Unity中如果想创建游戏对象,可以通过创建游戏对象菜单在场景中进行,如果想创建很 多 相 同 的 物 体 ( 例 如 射 击 出 去 的 子 弹 , 保 龄 球 瓶 等 ) 时 , 可 以 通 过 实 例 化(Instantiate)快速实现 第15页2.3 Unity脚本的基
13、础语法 2.3.7 实例化游戏对象 1using UnityEngine; 2using System.Collections; /引入系统包 3public class BNUIns : MonoBehaviour/声明类 4 public Transform prefab;/定义公有的对象 5 public void Awake()/重写Awake方法 6 int i = 0;/定义计数标志位 7 while (i 5)/重复5次 8 Instantiate(prefab, new Vector3(i * 2.0F, 0, 0), Quaternion.identity); /实例化对象
14、9 i+;/标志位自加 10第16页2.3 Unity脚本的基础语法 2.3.8 协同程序和中断 协同程序,即在主程序运行时同时开启另一段逻辑处理,来协同当前程序的执行。但它与多线程程序不同,所有的协同程序都是在主线程中运行的,它还是一个单线程程序。在Unity中可以通过StartCoroutine方法来启动一个协同程序。 终止一个协同程序可以使用StopCoroutine(string methodName),而使用StopAllCoroutines()是用来终止所有可以终止的协同程序,但这两个方法都只能终止该MonoBehaviour中的协同程序。第17页2.3 Unity脚本的基础语法
15、2.3.8 协同程序和中断 1using UnityEngine; 2using System.Collections; /引入系统包 3public 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(
16、float someParameter)/声明DoSomething方法 9 while (true)/开始循环 10 print(DoSomething Loop);/打印提示信息 11 yield return null; 第18页2.3 Unity脚本的基础语法 2.3.9 一些重要的类 1. MonoBehaviour类 MonoBehaviour类是C#脚本的基类,其继承自Behaviour类。在C#脚本中,必须直接或间接的继承MonoBehaviour类 2. Transform类 场景中的每一个物体都有一个Transform组件,它就是Transform类实例化的对象。用于储存并
17、操控物体的位置、旋转和缩放。每一个Transform可以有一个父级,允许分层次应用位置、旋转和缩放。可以在Hierarchy面板查看层次关系。Transform类中包含了很多的成员变量 第19页2.3 Unity脚本的基础语法 2.3.9 一些重要的类 3. Rigidbody类 Rigidbody组件可以模拟物体在物理效果下的状态,它就是Rigidbody类实例化的对象。它可以让物体接受力和扭矩,让物体相对真实地移动。如果一个物体想被重力所约束,其必须含有Rigidbody组件。Rigidbody类中包含了很多的成员变量 4. CharacterController类 角色控制器是Chara
18、cterController类的实例化对象,用于第三人称或第一人称游戏角色控制。它可以根据碰撞检测判断是否能够移动,而不必添加刚体和碰撞器。而且角色控制器不会受到力的影响。CharacterController类包含了很多的成员变量 第20页2.3 Unity脚本的基础语法 2.3.10 性能优化 1. 缓存组件查询 当通过GetComponent获取一个组件时,Unity必须从游戏物体里查找目标组件,如果是在Update方法中进行查找,就会影响运行速度。此时可以设置一个私有变量去储存这个组件。 第21页2.3 Unity脚本的基础语法 2.3.10 性能优化 1using UnityEngi
19、ne; 2using System.Collections; /引入系统包 3public 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第22页2.3 Unity脚本的基础语法 2.3.10 性能优化 2. 使用内建数组 我们在开发的过程中不可避免的使用到数组,虽然ArrayList和Array使用起来容易并且方便,但是相比较内建数组而言,前者和后者的速度还是有很大的差异。内建数组直接嵌入struct数据类型存入第一缓冲区里,不需要其他类型信息或者其他资源,因此用作缓
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年浙江省杭州市钱塘区中考一模科学试卷
- 2025年甘肃省平凉市崆峒区中考物理模拟试卷二
- 中医特色护理刮痧
- 手术室护理工作规范与流程
- 电教馆工作总结模版
- 机电信息工程分院学生会外联部工作总结模版
- 驻村工作队疫情防控工作总结模版
- 湖南省湘一名校联盟2024-2025学年高一下学期期中考试历史试题(原卷版)
- 山东省济宁市2025年高考模拟考试语文试题及答案(济宁三模)
- 机械制图基础知识规范
- 大学体育与健康智慧树知到期末考试答案章节答案2024年齐鲁师范学院
- 产品全生命周期管理流程
- 2006用工合同范本
- 浙江省温州市乐清市2023-2024学年六年级下学期期末小升初科学试卷
- 小区消防移交物业协议书
- 2024年正式离婚协议电子版(三篇)
- 第8课《良师相伴 亦师亦友》第1框《良师相伴助力成长》-【中职专用】《心理健康与职业生涯》同步课堂课件
- 中餐餐中服务服务流程培训
- 中国食物成分表2018年(标准版)第6版
- 2024春期国开电大本科《现代汉语专题》在线形考(任务1至6)试题及答案
- 九三学社申请入社人员简历表
评论
0/150
提交评论