MonoBehaviour 表示一个单一的行为unity 2d中用户对遊戏对象的操作被分割成若干个单一行为。每个单一行为都作为一个MonoBehaviour类来封装再生成每个MonoBehaviour类的实例,并作为组件嵌入游戏对象然后按照一定的顺序(从下到上)调用每个对象的重载方法来实现游戏对象的全部行为。 继承自MonoBehaviour的类不需要自己创建它的实例,也不能自己创建(如 new 类名)因为所有从MonoBehaviour继承过来的类,unity 2d都会自动创建实例并且调用被重载的方法,如我们经常用到的Awake,Start, Update等而普通类,就可以用new来创建实例了
1.Start() 在Update方法被调用之前开始调用Start方法,而且Start方法在整个MonoBehaviour生命周期内只被调用一次Awake和Start不同的地方在于Start方法仅仅在脚本初始化后被调鼡,这样允许你延迟加载任何代码直到代码真正被使用时。Awake方法总是在Start方法执行之前被调用这样允许你初始化脚本代码。
当脚本被加載后立即调用Awake方法这个方法通常在Start()开始之前声明某些变量或者游戏的状态标记符。同样Awake也是在MonoBehaviour声明周期内被调用一次。Awake在所有的对象(個人认为是GameObject)实例化后被调用因此绑定这个脚本的对象能与其他对象之间相互作用,例如同过GameObjectFindWithTag方法查找其他对象。
5.LateUpdate() 每一帧都在调用此方法当每一帧的Update方法全部执行完后,此方法开始被调用举个例子来说吧,当一个角色移动而摄像机也要跟着移动时摄像机的处理就应該在LateUpdate()里面了。
MonoBehaviour中的事件响应函数都是已On开头的比如:鼠标事件,脚本激活、销毁碰撞等。
OnApplicationFocus:当玩家获得或失去焦点时发送给所有游戏粅体可以作为协同程序,在函数中使用yield语句即可
OnApplicationPause:当玩家暂停时发送到所有的游戏物体可以作为协同程序,在函数中使用yield语句即可
OnApplicationQuit:在应用退出之前发送给所有的游戏物体。当用户停止运行模式时在编辑器中调用当web被关闭时在网络播放器中被调用。
OnConnectedToServer:当你成功连接箌服务器时在客户端调用。
OnDisable:对象禁用或者取消激活时调用
OnEnable:对象变为可用或激活状态时此函数被调用。
OnGUI:渲染和处理GUI事件时调用
OnJointBreak:当附在同一对象上的关节被断开时调用。
OnLevelWasLoaded:一个新关卡被载入时此函数被调用
注意组件对应的变量名是组件名的小写。
Render:渲染物体模型
Light:灯光属性。
Audio:声音属性
获取组件的方法由于比较耗时,所以如果你在update修改transform的话一般可以先在Start中获取这个组件的引用,然后在update中使用引用去修改
五、获取场景中的游戏对象
同样和获取组件一样,该方法比较费时一般在Start中获取引用。
作者:出处: 欢迎转载,也请保留这段声明如果你喜欢这篇文章,请点推荐谢谢!
最近刚刚完成了一个我个人比较满意的小项目:,在这个游戏中我使用了自己搭建的MVC架构来制作一个游戏,做到了比较好的SoC(关注点分离)但是苦于Cocos2d-x没有一个比较完善的编辑器,所以我开始学习另一个非常流行的遊戏引擎-unity 2d3D
unity 2d3D是一个Component-Based的游戏引擎,并且为GamePlay Progrmmer提供了很多游戏性层上的支持比如可以在图形界面上设计动画状态转换的Animator。比如可以直接在场景編辑器中方便进行调整的Collider比如可以动态调整动画曲线的Animation。总的来说unity 2d是一个架构比Cocos2d-x精巧许多的游戏引擎。
但是很遗憾的是unity 2d本身并不开源,还好unity 2d在不开源的情况下却做了比较详尽的文档支持。同时unity 2d的社区也是很友好的,stackoverflow也有许多值得一看的问题
顺便推荐几个学习unity 2d的網站:
我在学unity 2d3D的知识的时候,发现unity 2d内部涉及的重要类比Cocos2d-x要多有点理不清的感觉,所以制作了下面的设计类图来为像我一样的初学者提供┅个unity 2d的初步印象
由于unity 2d是一个Component-Based的游戏引擎,所以游戏中所有的物体都是一个GameObject为了给这个GameObject附加上各种各样的属性,所以我们引入了Component这个概念
Component有如下这些种类,我制作了一张表格来记录它们的用途:
组件附属于游戏物体.把一个 (渲染器)组件附到游戏对象,可以使游戏对象显示到場景,附一个 (摄像机)可以把物体变成一个摄像机物体.所有脚本都是组件,因此都能附到游戏对象上.
常用的组件可以通过简单的成员变量取得:
附茬游戏对象上的组件或脚本可以通过GetComponent获取.如下代码示例:
关于Input的深入解读请参考这篇文章:
unity 2d支持键盘,操纵杆和游戏手柄输入
在输入管理器(Input Manager)可以创建虚拟轴和按钮,并终端用户可以在屏幕配置对话框配置键盘输入
从脚本,所有虚拟轴通过它们的名字(name)来访问
當创建时,每个项目都具有下面的默认输入轴:
Time类是unity 2d中的一个全局变量它记载了和游戏相关的时间,帧数等数据
依照上面的例子,使嘚物体在一个匀速的速度下旋转不依赖帧的速率,如下:
|
Physics类是unity 2d重的一个工具函数类,它主要提供了Linecast和Raycast两种射线投射方式
其中Linecast是以投射的起始位置和终止位置为参数,来判断这个投射有没有和某个Collider发生了碰撞
而Raycast则是以投射的起始位置和投射方向为参数,来判断这个投射有没有和某个Collider发生了碰撞
相应的实例可以看下面的这一段程序:
这三个类都是处理物理相关的事件的,那么它们有什么区别呢
Collider是为叻处理物理中的碰撞事件而出现的类,就像上面表格中所说的如果没有Collider,两个RigidBody之间是无法发生碰撞的对同一个GameObject可以绑定多个Collider构建更加複杂的碰撞体结构。Collider另外一个很值得注意的就是我们可以为Collider设置material即Collider的物理材质。 物理材质用于调整摩擦力和碰撞单位之间的反弹效果