Unity 脚本程序基础
讲师:刘国柱
2
目录
Unity中选择不同脚本编辑器的方式
MonoDevelop 脚本编辑器介绍
Unity3D 的事件函数
程序创建游戏对象,克隆对象、销毁对象
脚本常用核心类
课堂练习: 地球围绕太阳旋转
MonoDevelop 脚本编辑器介绍
Unity3D 目前支持三种语言的脚本程序,包括C#、JavaScript、Boo,在一个游戏中开发者可以使用一种或者同时使用多种语言来实现脚本的控制。
三种不同的语言其实效率是相当的,最后都会编译成Unity3D 内
置的中间代码。 目前国内用C#的占大多数。
在Project中右击,新建C#脚本, 一般将所有脚本放到一个单独的文件夹中。JavaScript不是标准语法,叫UnityScript更合适。使用Mono实现C#跨平台,C#编辑工具也是MonoDevlop 。如果Unity
提示代码编译错误,则到MonoDevelop中Build一下就能看到是什么错误。脚本要取有意义的名字,脚本的名字要和类名一致。
直接将脚本文件拖到游戏对象上,运行时脚本就会应用。
MonoDevelop 脚本编辑器介绍
脚本在Project中的显示名称不要加cs,类名要和cs名称一致,所有类继承自MonoBehaviour。
项目工程分层设计。 _Scenes: 存放场景
_Scripts: 存放脚本
Resources: 资源包
Images: 贴图 Materials: 材质 (主要为 .mat 文件)
Audios: 声音 Models: 模型 (存放FBX 等文件)
初始化不要放到构造函数中,而是放到Start()方法中。
放到游戏对象中的脚本(实例化)可以在Inspector中修改属性,get/set写法属性不被识别,直接public字段就能当属性用,不写修饰符就是私有private
MonoDevelop 脚本编辑器介绍
项目运行过程中的修改不会保存。其实相当于调试时改代码立即生效的功能,只是调试结束一切调试期的修改都消失。
脚本是依附于游戏对象的,事件和操作的对象也是当前脚本所在的游戏对象。脚本只能依附于游戏对象或者由其他脚本调用才会运行,一个脚本可以放到多个游戏对象上,是多个实例。一个脚本的多个实例和其他脚本之间互不干扰。
脚本中文问题以及更改脚本模板
Unity\Editor\Data\Resources\ScriptTemplates\81-C# Script-NewBehaviourScript.cs
编码格式 Ansi --> UTF-8+BOM 格式
6
目录
Unity中选择不同脚本编辑器的方式
MonoDevelop 脚本编辑器介绍
Unity3D 的事件函数
程序创建游戏对象,克隆对象、销毁对象
脚本常用核心类
课堂练习: 地球围绕太阳旋转
Unity中选择不同脚本编辑器的方式
更改默认的开发工具,由MonoDevVS
具体更改步骤: Edit--> Preference--> Extennal Tools -->External Tools-->External script Editor.
8
目录
Unity中选择不同脚本编辑器的方式
MonoDevelop 脚本编辑器介绍
Unity3D 的事件函数
程序创建游戏对象,克隆对象、销毁对象
脚本常用核心类
课堂练习: 地球围绕太阳旋转
Unity3D 的事件函数
Unity3D 常用事件函数
Awake, Start, Update, FixUpdate, OnGUI Start、Update是系统预定义的一些方法,当相应事件发生的时候
系统就会调用脚本的相应方法,后续还有OnGUI、 FixUpdate 等。
“帧”的概念与初步理解。
10
目录
Unity中选择不同脚本编辑器的方式
MonoDevelop 脚本编辑器介绍
Unity3D 的事件函数
程序创建游戏对象,克隆对象、销毁对象
脚本常用核心类
课堂练习: 地球围绕太阳旋转
程序创建,克隆对象与销毁对象
程序(动态)创建游戏对象 eg:
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube); cube.name = "cube1";//设定名字
cube.renderer.material.color = Color.red;
程序(动态)克隆对象 程序(动态)销毁对象 eg:
GameObject obj = (GameObject)Instantiate(cube); Destroy(obj,1);
程序创建,克隆对象与销毁对象
动态创建出来的对象运行时在Hierarchy中可以看到。
克隆游戏对象产生复制对象的效率高,比如游戏中产生大量子弹。调用Instantiate来生成对象,Destroy(obj)是立即销毁游戏对象。
动态添加脚本的方法:
(只要把脚本名称传给AddComponent即可)
cube1.AddComponent("script1");//把script1这个脚本加到cube1
这个游戏对象上;
Destroy(cube1.GetComponent(“script1”))销毁cube1对象上附加的脚本组件实例
程序创建,克隆对象与销毁对象
【课堂演示与课堂练习】
14
目录
Unity中选择不同脚本编辑器的方式
MonoDevelop 脚本编辑器介绍
Unity3D 的事件函数
程序创建游戏对象,克隆对象、销毁对象
脚本常用核心类
课堂练习: 地球围绕太阳旋转
脚本常用核心类
常用核心类: MonoBehaviour , Transform ,GameObejct,Time 与对应常用核心方法。
MonoBehaviour 类 本类是所有脚本和类(内置类与自定义类)的基础类。 这个类主要提供了各种事件函数的静态方法。例如前面提到的 Awake 、Start,Update 等函数(方法),可重写函数都是由本类提供。 本类还包含重要的回调函数例如 Invoke()、InvokeRepeating() 函数(功能: 以某个自定义的函数名为参数并在特定的时机调用该自定义函数)。 本类还提供关于触发器的函数: 例如: OnTriggerEnter() 函数。 OnTriggerExit() 函数
OnTriggerStay() 函数等。
脚本常用核心类
Transform 类 定义了对象的位置、旋转、缩放属性的类。
由于该类继承了Component 类,所以也是一种组件。也就是说任何一个游戏对象都由于Transform 组件。
eg: //设置游戏对象的位置 transform.position=new Vector3(0,0,0); //绕X轴旋转30度 transform.eulerAngles=new Vector3(30,0,0);
//设置游戏对象缩放到3倍 transform.localScale =new Vector3(3,3,3);
脚本常用核心类
GameObject 类 本类是“游戏对象”类。场景中所有的游戏对象都是通过实例化该类来生成的。 当你把一个资源放入场景中后,Unity3D 就会(自动)通过GameObject 类来生成对应的游戏对象。 【本PPT上一节有代码演示】 本类包括了游戏对象所需要的属性和方法。
例如 属性:transform、renderer、 isStatic 等。 方法:Find()、FindWithTag()、FindGameObejctWithTag()、GetComponent()、AddComponent()方法等。 【课堂演示以上重要的属性与方法】
MonoBehaviour 与GameObject 类的继承“链”。 MonoBehavoer : Behaviour : Component :Object GameObejct: Object
脚本常用核心类
Time 类
属性: deltaTime
说明:
方法Update(): 受当前渲染效率的影响,有时快有时慢,帧率会变化,Update被调用的时间间隔就发生变化,Time. deltaTime获得自上次Update一来经历的时间,只应该在Update()中使用deltaTime ,OnGUI、FiexedUpdate等里面不要用。
19
目录
Unity中选择不同脚本编辑器的方式
MonoDevelop 脚本编辑器介绍
Unity3D 的事件函数
程序创建游戏对象,克隆对象、销毁对象
脚本常用核心类
课堂练习: 地球围绕太阳旋转
课堂练习: 地球围绕太阳旋转
通过以上学习的基本脚本知识点编写地球围绕太阳旋转的小练习。
演示给游戏对象添加贴图与材质等资源,丰富练习的表现感。
在以上基础之上,学生自己添加月亮围绕地球旋转的逻辑代码实现。【学生课堂作业】
实现提示细节:
创建地球和太阳,调整他们的位置。太阳比较大,所以设定它的三个Scale值都为3;给sun添加金黄色的材质effects-
>halo ;给地球加一个地球的贴图
增加一个Point Light点光源,让它的xy坐标和sun重合,这样就有太阳放光芒的效果了。为保证匀速所以写到FixedUpdate
中transform.RotateAround(sun.transform.position,Vector3.up,
1);