工程与应用程序
project开始包含4个文件夹
开发框架
工程(project),场景(scene),游戏对象(GameObject)和 组件(Component)的关系图
组件(Component)
脚本
创建脚本:Project => Asset中创建 => 右键 Create => C# Script
绑定脚本:将脚本拖拽到游戏物体上。
双击Script 文件 就会自动打开 默认的编译器 ,会自动创建一个与Script命名相同的一个类 ,以及会自动继承MonoBehavior;
脚本分为四类:
宏观控制类:主要作⽤用是真对Unity程序中的某⼀一⽅方⾯面进⾏行宏观控制。包括应⽤用程序类(Application)、输⼊入类(Input)、图形输出类(GUI)、物理引擎类(Physics)、资源类(Resources)、时间类(Time)等。
游戏对象(GameObject)类:表⽰示当前脚本挂在的游戏对象
组件(Component)类:脚本开发中的组件类往往可以和图形界⾯面中的检视⾯面板对应起来。每⼀一个游戏对象的细节设置与操控都需要借助组件类来完成。
资源类(Resource):对于刚⼊入⻔门的初学者来说,资源⼀一般都是在图形界⾯面导⼊入进来之后直接使⽤用。精通资源类是⾛走出初学阶段很重要的⼀一步,也是代码开发摆脱素材限制的⼀一种重要⼿手段
脚本的生命周期
MonoBehavior类的常用方法
初始阶段
Awake()唤醒:当物体载入时立即调用1次,常用于在游戏开始前进行初始化,可以判断当满足某种条件执行此脚本this.enable=true。
OnEnable()当可用:每当脚本对象启用时调用。
Start()开始:物体载入且脚本对象启用时被调用1次。常用于数据或游戏逻辑初始化,执行时机晚于Awake。
物理阶段
FixedUpdate()固定更新:脚本启用后,固定时间被调用,适用于对游戏对象做物理操作,例如移动等。
设置更新频率:”Edit”—>”Project Setting”—>”Time”—>”Fixed Timestep”值,默认为0.02s。
游戏逻辑
Update()更新:脚本启用后,每次渲染场景时调用,频率与设备性能及渲染量有关。
LateUpdate()延迟更新:在Update函数被调用后执行,适用于跟随逻辑。
场景渲染
OnGUI()渲染:渲染和处理GUI事件时调用
OnBecameVisible()当可见:当Mesh Renderer在任何相机上可见时调用。
OnBecameInvisible当不可见:当Mesh Renderer在任何相机上不可见时调用。
结束阶段
OnDisable()当不可用:对象变为不可用和附属游戏对象非激活状态时此函数被调用。
OnDestroy()当销毁:当脚本销毁或附属的游戏对象被销毁时调用。
OnApplicationQuit当程序结束:应用程序退出时被调用。
调试方法
方法一:在可能出错的行添加断点
方法二:选择打印消息的方式
常用打印消息的方式:一种是print,一种是Debug.Log。
print方法:它是MonoBehaviour 类的成员。
Debug方法:则是一个独立的、密闭的类。
因此,当一个脚本继承MonoBehaviour时,才可以使用print方法,而Debug任何地方都可以,故建议使用Debug.Log()方法。
常用类
API(Application Programming Interface)应⽤用程序编程接口,是⼀一些预先定义的函数。Untiy引擎提供了丰富的组件和类库,为开发者提供了⾮非常⼤大的便利,熟练掌握和使⽤用这些API对于游戏开发效率提⾼高很重要。上面的这些都属于API
Component类
Gameobject类
脚本中得到游戏对象的两种方法
//通过tag来得到游戏物体
static GameObject FindWithTag(string tag)
GameObject.FindWithTag(“Player”);
//通过name得到游戏物体
static GameObject Find(string name)
GameObject.Find("something");
Transform类
主要负责:
1,对象的基础变换(position,rotation,scaling);
2,维持父子关系
绑定父子与解绑父子
Transform A;//父对象
transform.parent = A;//绑定
<or>transform.SetParent(null);//绑定
transform.parent = null;//解绑
移动
旋转
围绕
缩放
描线
Debug.DrawLine (Vector3.zero, parent.position, Color.green);
Debug.DrawLine (Vector3.zero, transform.position, Color.green);
参数列表:起始点,终点,颜色,存在时间
时间
float starTime = 0;
float timer = 0;
四元数与V3
相互转化
V3
封装了向量运算相关变量和方法的结构体
四元数
坐标类型
世界坐标 position
本地坐标 localposition
世界坐标 转 屏幕坐标 worldToScreenPoint()
屏幕坐标 转 世界坐标 ScreenToWorldPoint()
视口坐标 (0,1)屏幕左下角为(0,0)
Time
预设体
instantiate创建物体
static Object Instantiate(Object original,Vector3 position, Quaternion rotation);
参数列表:预设体,位置,旋转