欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

详解Unity入门之GameObject

程序员文章站 2022-03-26 15:46:04
gameobject和componentgameobject是游戏场景中真实存在的,而且有位置的一个物件component附属于gameobject,控制gameobject的各种属性gameobje...

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的资料请关注其它相关文章!

相关标签: Unity GameObject