详解Unity入门之GameObject
gameobject和component
gameobject是游戏场景中真实存在的,而且有位置的一个物件
component附属于gameobject,控制gameobject的各种属性
gameobject是由component组合成的,component的生命周期和gameobject息息相关。调用此gameobject的destroy方法,它的子对象和对应的所有component都会被销毁,但也可以一次只销毁一个component
常见的component:
component | 作用 |
---|---|
rigidbody 刚体 | 使物体能在物理控制下运动 |
collider 碰撞器 | 和rigidbody刚体一起使碰撞发生,没有collider,两个碰撞的刚体会相互穿透 |
renderer 渲染器 | 使物体显示在屏幕上 |
audiosource 音频源 | 使物体在scence场景播放音频 |
animation 动画 | |
animator 动画控制器 |
同时所有脚本都是组件,因此都能附到游戏对象上
常用的组件可以通过简单的成员变量获取
附在游戏对象上的组件或脚本可以通过getcomponent获取
using unityengine; using system.collections; public class example : monobehaviour { void awake() { transform.translate(0, 1, 0); getcomponent<transform>().translate(0, 1, 0); } }
input和inputmanager
在inputmanager可以创建虚拟轴和按钮,并终端用户可以在屏幕配置对话框配置键盘输入。
如果想添加新的虚拟轴,选择菜单edit->project settings->input menu。这里可以改变每个轴的设置。即可进入input manager的配置界面。
在脚本中,所有虚拟轴通过它们的名字(name)来访问
每个项目创建后,都有下面的默认输入轴:
- horizontal and vertical are mapped to w, a, s, d and the arrow keys.水平和垂直被映射到w, a, s, d键和方向键
- fire1, fire2, fire3 are mapped to control, option (alt), and command, respectively.fire1, fire2, fire3被分别映射到ctrl,option(alt)和command键
- mouse x and mouse y are mapped to the delta of mouse movement.mouse x 和 mouse y被映射到鼠标移动增量
- window shake x and window shake y is mapped to the movement of the window.window shake x 和 window shake y 被映射到窗口的移动
time
time类是unity中的一个全局变量,它记载了和游戏相关的时间,帧数等数据
time类包含一个非常重要的变量叫deltatime.这个变量包含从上次调用update 或fixedupdate到现在的时间(根据你是放在update函数还是fixedupdate函数中)(update每帧调用一次)
例:使物体在一个匀速的速度下旋转,不依赖帧的速率
using unityengine; using system.collections; public class example : monobehaviour { void update() { transform.rotate(0, 5 * time.deltatime, 0); } }
physics和transform
physics类是一个工具函数类,它主要提供了linecast和raycast两种射线投射方式。
- linecast是以投射的起始位置和终止位置为参数
- raycast则是以投射的起始位置和投射方向为参数
来判断这个投射有没有和某个collider发生了碰撞。
using unityengine; using system.collections; public class example : monobehaviour { void update() { // 使用raycast vector3 fwd = transform.transformdirection(vector3.forward); if (physics.raycast(transform.position, fwd, 10)) print("there is something in front of the object!"); // 使用linecast transform target; if (!physics.linecast(transform.position, target.position)) processdata.anddosomecalculations(); } }
在physics这个模块包含三个最重要的component:rigidbody,collision,joint
- rgidbody作为一个受力物体存在,所以可以向一个rigidbody施加force(力),drag(阻力)。同时rigidbody还有 velocity (速度),mass(质量),position(位置),旋转(rotation)等属性
- collider是为了处理物理中的碰撞事件而出现的类,如果没有collider,两个rigidbody之间无法发生碰撞。同一个gameobject可以绑定多个collider构建更加复杂的碰撞体结构。collider也可以设置material,即collider的物理材质。 用于调整摩擦力和碰撞单位之间的反弹效果。(当发生碰撞时,会触发销毁函数oncollisionenter,oncollisionstay,oncollisionexit等等
- joint用于连接两个rigidbody,当joint断掉的时候会触发onjointbreak的回调函数。
monobehaviour
gameobject是游戏场景中真实存在的,而且有位置的一个物件
而控制gameobject则需要脚本组件
monobehaviour 是 unity 中所有脚本的基类
monobehaviour is the base class from which every unity script derives.
monobehaviour生命周期
在游戏里经常出现需要检测敌人和我方距离的问题,这时如果要寻找所有的敌人,显然要消耗的运算量太大了,所以最好的办法是将攻击范围使用collider表示,然后将collider的istrigger设置为true。最后使用ontriggerenter来做攻击范围内的距离检测,这样会极大提升程序性能。
脚本的基本结构
using system.collections; using system.collections.generic; using unityengine; using mygame; //3引用命名空间 public class player : monobehaviour { // use this for initialization void start () { gamedata data; //4才可以使用 } // update is called once per frame void update () { } } namespace mygame { //1定义命名空间 class gamedata { //2属于mygame下的类 } }
总结
time,input,physics都是unity中的全局变量
gameobject是游戏中的基本物件,是由component组合而成的,gameobject本身必须有transform的component
gameobject是游戏场景中真实存在,而且有位置的一个物件
以上就是详解unity入门之gameobject的详细内容,更多关于unity入门之gameobject的资料请关注其它相关文章!