> 技术文档 > Unity入门----Unity的工作原理_unity原理

Unity入门----Unity的工作原理_unity原理

今天,我们学习Unity的工作原理,它分为四个部分,分别是反射机制、游戏场景、预设体、资源包的导入导出。

一、反射机制

首先我们来了解什么是反射。

反射:一个运行的程序查看本身或者其他程序元数据的行为就叫做反射。在程序运行时,通过反射可以得到其他程序集或者自己程序集中代码的各种信息比如类、函数、变量、对象等等,我们可以实例化他们、执行他们、操作他们。

Unity开发的本质就是在Unity引擎基础上利用反射和引擎提供的各种功能进行的拓展开发。

反射机制的表现:我们可以为GameObject这个物体关联组件(以后我们写的c#脚本),让他按照我们写的脚本处理事情,这个过程就是在利用反射new一个脚本对象和GameObject进行关联让其按照我们的命令做事。

看到这里大家可能会有点懵,接下来我会举两个例子来帮助大家理解。

①.修改Inspector面板中Transform的内容

当我们在Inspector面板中修改Transform组件中的值,该物体也会随之而变化。这个看似简单的操作其实就用到了反射。Transform组件实际上是一个类,这个类挂在物体上,提供反射可以为该对象设置变量值。

②.新建一个脚本后,添加给一个指定的GameObject对象。

在Project窗口中我们新建一个c#脚本test,Scripts文件夹是我自己创建的,这个脚本用来存放我们自己创建的脚本,便于我们管理。

双击进入脚本,我们发现它实际上是一个类,我们在类中给他添加两个公共变量age和name。写完后记得保存。

回到Unity,我们用鼠标拖拽这个脚本到一个GameObject物体上,此时我们就可以在这个面板上看到在类中声明的两个变量。这个过程也是利用反射,通过类名就可以获取所有的公共成员,就可以在Inspector面板上创建各公共字段信息。

二、游戏场景

这一点我们主要了解游戏场景的本质是什么。

我们进行以下操作,找到文件

我们发现文件后缀都是.unity,我们用记事本打开,发现全是一些配置文件。

我们往下找,可以看到有GameObject和Transform

这里显示的是摄像机的物体

这些显示的就是摄像机的位置、旋转、缩放等相关信息。

因此,游戏场景的本质就是一个配置文件,这个文件里面的内容包含GamObject物体、组件等相关信息。Unity有一套自己识别处理它的机制,其本质就是把场景相关信息读取出来,通过反射来创建各个对象并关联各个脚本。

三、预制体

预制体,顾名思义就是预先设置好的物体,我们可以在某个场景中直接使用的物体,不需要我们自己再去制作。

我们从创建预制体、修改预制体、删除预制体来展开。

①.创建预制体

首先我们在Assets文件夹下创建一个叫FBX的文件夹,专门用来存放预制体,方便我们的管理。

在Hierarchy面板中选择一个你想设置为预制体的物体,把它拖动到这个FBX文件夹下。我选择的是立方体这个物体。此时它的前方会有一个蓝色的小图标,这个就是预制体的标志。

如果现在在Hierarchy面板中把cube删除,文件夹里面的cube预制体是不会消失的,还可以从文件夹里拖到Hierarchy面板上重新使用。

②.修改预制体

如果我想在设置好预设体后再添加一些物体呢?

我们先添加想添加的物体,此时我添加了一个球体作为它的子物体,但是很显然,他们的组合并不是预制体,因为这个球体前面没有蓝色小标志。

此时我们可以点击这个预制体,在Inspector面板上找到覆盖,选择“应用所有”。

这个时候预制体就改变了,比原来多了一个球体,我把它拖出来,效果如下:

如果我又想删除这个整体中的球体呢?可以直接删除吗?

现在我直接删除子物体球体,发现拖出来的预制体没有变化。

我们可以点击预制体按右键选择“预制件”中的“解压缩”。

此时cube2不再是预制体,我们再删除球体,重新拖入到FBX文件夹中生成预制体即可。

这种是常见的方法,既不会影响之前设置的预制体,又可以设置新的预制体。

③.删除预制体

如果我们直接删除Hierarchy面板上的预制体,文件夹中的预制体是不会受到影响的。此时我重新整理了一下场景如下图:

如果我直接删除文件夹中的预制体,cube2会标红,但是不会影响它在场景中的应用。此时我们依然点击右键选择“预制件”中的“解压缩”即可。

四、资源包的导入导出

当我们想把我们自己的资源分享给别人时,我们就需要进行资源包的导入导出。

在Project面板上按右键选择“Export Package”,会弹出一个弹窗。

你可以自行选择需要导出哪些内容。最下方的“包括依赖项”一般都需要勾上,因为你的资源上可能会有一些自己写的c#脚本,要想正常应用也需要传过去。选择好之后点击“导出”,选择一个存放路径(路径不要有中文!)即可,最后会生成一个后缀为.unitypackage的文件。

当我们拿到别人的资源包想要导入,就可以直接找到这个资源包直接拖拽到Project面板上,选择“导入”。或者你在空白处点击右键选择“Import Package”进行导入。

以上就是我们今天的全部内容,欢迎小伙伴们评论区留言讨论!