第二章 Unity界面认识

news2024/11/18 7:30:47

本章节我们来认识一下Unity的主界面,如下所示

Unity的主界面虽然看的内容比较多,但是结构上还是比较清晰地,所以并不乱。从上到下,从左到右依次是菜单栏,工具栏,层次面板(Hierarchy),场景视图(Scene),游戏视图(Game),检视面板(Inspector),工程面板(Project)以及控制台面板(Console)。关于这些面板的中文翻译,我们不用纠结太多,主要还是记住对应的英文名称即可。

这些面板或视图都是做什么用的呢?

1.层次面板是场景中游戏对象的列表显示,游戏场景中任何可见的物体都是游戏对象。

2.场景视图可用于可视化的场景编辑,即所见所得的方式去摆放场景中的任何游戏对象。

3.游戏视图就是游戏运行后的界面效果(类似场景视图),单击 三角形 Play 即可运行游戏。

4.检视面板可用于查看和编辑当前所选游戏对象的所有属性,我们经常在这里操作。

5.工程面板显示可在当前工程中使用的文件,包括模型,贴图,材质,脚本以及资源库。

首先,我们先介绍层次面板(Hierarchy)和场景视图(Scene),如下图所示

左边就是层次面板(Hierarchy),右边就是场景视图(Scene)。请注意,SceneGame是两个Tab选项卡,我们可以点击他们两个可以切换场景视图和游戏视图。如下所示

之所以将两个视图以这种方式进行布局,是因为两者非常的相似,都是显示游戏内容的。当然,这个不是重点,我们回到层次面板中,我们可以看到如下内容

SampleSceneUnity自动帮我们创建的一个场景,该场景下有两个游戏对象,一个是主摄像机Main Camera,另一个是平行光Directional Light(其实还有一个默认的天空盒)。

什么是场景?这个词可能更多的用于电影拍摄。简单的理解,它就是演员拍摄一个片段时候的环境背景。场景在游戏开发中,也是类似的概念。一个场景可以理解为一个独立的游戏世界。每个场景都有自己的自然环境、建筑环境、角色环境、UI界面等等。这个场景里面的世界可以很大,也可以很小。场景与场景之间是隔离的(因为他们本身就是两个不同的文件),我们的游戏角色不可能从一个场景“无缝的行走”到另一个场景中。一般情况下,我们可以将整个游戏世界划分成几个不同的场景,当然我们也可以将整个游戏世界构建一个大场景(无缝大地图)Unity会将每一个场景保存为后缀为“unity”的场景文件。该场景文件默认保存在“Assets/Scenes”目录下,当然我们也可以保存到其他位置。 个人理解,仅供参考!

什么是游戏对象?熟悉编程的人,都应该知道面向对象编程,这是现在大部分高级编程语言的共同特征。类是描述事物的抽象模板,类被实例化(在计算机内存中存在)后就是一个个的对象。那么,游戏对象也是同理。我们在游戏世界中看到的任何事物(或者说物体),都是一个个的游戏对象。我们之所以能够看到他们,就是因为他们被实例化出来,客观存在于计算机内存世界中。上文中的摄像机和平行光就是两个游戏对象。当然,我们要创建丰富多彩的游戏世界,就需要创建更多的游戏对象,比如山川河流,树木花草,楼宇亭榭,飞禽走兽等等。可由可见,在一个场景中可能会有成千上万的游戏对象。这些游戏对象大部分都是3D模型,它们基本上都是由3ds maxmaya等软件制作完成后导入到Unity中的。我们需要在Scene 视图中来“摆放”这些模型(也就是这些游戏对象)。个人理解,仅供参考!

Hierarchy层次面板中的游戏对象和Scene 场景视图中的游戏对象是一致的,只不过一个是列表形式展示,一个是三维形式展示。如果我们 Scene 视图中添加或移除游戏对象,也会从 Hierarchy 层次面板添加或移除它们。反之,也是一样的效果。如果我们在Hierarchy 层次面板选中一个游戏对象的话,在Scene 场景视图中也会被选中。如下所示

以上我们选中的是“Main Camera”主摄像机游戏对象。

以上是我们选中“Directional Light”平行光游戏对象。

这里重点说的是,Unity的游戏对象之间可以形成父子关系。一个子游戏对象可以继承父游戏对象的属性,并且移动父游戏对象时,会同步移动其子游戏对象。当然,这种操作还包括旋转和缩放,也就是世界三大变换。这个对我们游戏开发帮助非常大。

我们在层次面板中有“Main Camera”主摄像机和Directional Light平行光两个游戏对象,在对应的场景视图中,我们就能看到摄像机和平行光这两个游戏对象,如下所示

如果看不见的话,可以滚动鼠标中间的滚轮来放大和缩小场景视图。我们就能看见有一个类似摄像机的标识和一个类似太阳的标识,他们就是主摄像机和平行光。摄像机的作用是采集游戏世界的内容输出到Game视图,而平行光的作用就是模拟太阳光,照亮整个游戏场景。 

当场景中的游戏对象非常多的时候,我们为了能够准确的找到指定游戏对象,就需要一些方便的操作。例如,我们可以在层次面板中找到这个游戏对象(这个操作还是比较简单的),然后我们将鼠标“移动到(不要点击)”到场景视图中,然后按下“F”键就可以在场景视图中显示这个游戏对象了。这个操作类似于3ds max中的“Z”键。另外,我们还可以在层次面板中控制游戏对象的隐藏和显示,该操作并不会影响对象在游戏中的可见性。

图片中眼睛的标识就是用来控制游戏对象的隐藏和显示的,也可以选中游戏对象后按快捷键H来切换隐藏和显示(非常的方便)。当我们不想让某个游戏对象干扰我们当前的操作时候,就可以通过这个“眼睛”来暂时隐藏这个游戏对象。这可用于处理难以查看和选择特定游戏对象的大型或复杂场景。注意,使用可见性选项比禁用游戏对象更安全,因为可见性选项仅影响 Scene 视图。另外,如果我们选中某个游戏对象的时候,使用快捷键Shift + H的话,就会进入Isolation 视图,该视图中只会显示当前选中的游戏对象。这样做的目的是方便我们集中精力对这些选定的游戏对象进行编辑,而不会被其他游戏对象所干扰。要退出 Isolation 视图只需要再次按下 Shift + H,或者单击 Scene 视图中的 Exit 按钮。

其实说白了,Isolation 视图就是只显示选中游戏对象,隐藏其他的游戏对象而已。

接下来,我们介绍场景视图中的工具栏。

第一个,场景视图的绘制模式,默认为Shaded为正常显示游戏物体;Wireframe线框形式显示游戏物体;Shaded Wireframe混合正常和线框形式显示游戏物体;其他就不介绍了。

第二个,2D按钮开启2D模式,一般是制作UI2D游戏的时候使用,方便操作而已。

第三个,灯光按钮用来控制场景中的灯光开启和关闭,不是关闭游戏中的灯光。

第四个,声音按钮用来控制场景中的音频的开启和关闭,不是关闭游戏中的声音。

第五个,效果按钮控制是否显示天空盒,雾和光晕等效果。

Skybox:场景中显示天空盒。

Fog:场景中显示雾效果。

Flares:显示光源上的镜头光晕效果。

Always Refresh:定义动画化的材质是否显示动画。

Post Processing:显示后期处理效果。

Particle Systems:显示粒子系统效果。

第六个,隐藏游戏对象的数量

第七个,是否显示栅栏格(类似3ds max的栅栏格)

第八个,是否在场景视图中显示组件编辑面板(右边第一个按钮)

第九个,场景视图的摄像机编辑按钮(不是场景里面的那个Main Camera)。

第十个,Gizmos控制物体标记的显示和隐藏。

第十一个,搜索栏,搜索场景中的游戏对象,搜索到的物体会高亮显示。

关于场景视图的介绍就到这里。

接下来,我们介绍Game视图。

点击三角Play按钮,就会运行游戏工程,自动切换到Game视图,如下所示

我们在Game视图中看到的内容,就是Main Camera拍摄到的场景内容,只有灰色的地面和蓝色的天空。其实,我们可以把Main Camera看做玩家的眼睛。玩家看到的游戏世界,就是由Main Camera来呈现的。请注意的是,摄像机和平行光在游戏视图中是看不到的,它们是用来辅助我们创建游戏场景的,并不是玩家能够看见的游戏对象。

接下来,我们简单介绍Game视图工具栏。

第一个,Display1应该是显示器,默认会将游戏内容输出到Display1

第二个,Free Aspect设置显示屏幕宽高比或者固定分辨率,也可以手动添加新的分辨率。

第三个,Scale缩放,调节当前游戏视图的缩放比例。

第四个,播放时最大化,点击此项,游戏视图最大化显示。

第五个,音频静音,控制游戏中音频的开启和关闭。

第六个,状态窗口,该小窗口显示游戏运行的一些信息。

第七个,Gizmos,控制游戏物体标记的显示和隐藏,与场景中的Gizmos相似。

这里我们简单说一下状态窗口,网格对象上的顶点数越多,网格对象的外形越细腻,但是过多的顶点会占用大量的CPUGPU资源。开发游戏时,可以在游戏视图的stats面板中查看顶点数目的统计信息。

Tris代表三角面的数量,Verts代表顶点的数量。

最后我们在说一下关于Scene场景视图和Game游戏视图的关系理解。

当我们在层次面板中点击“Main Camera”的时候,在Scene场景视图的右下角就会出现一个小窗口,用来显示Main Camera”相机下的内容(相当于Game游戏视图内容)。

Scene场景视图是“上帝视角”下的游戏世界,它是由Scene Camera呈现出来的。虽然,我们看不到这个Scene Camera相机,但是我们却可以通过快捷键来操作它。上文中场景视图工具栏中第9个按钮就是用来控制这个Scene Camera的。Scene场景视图主要是让我们开发人员按照“所见所得”的方式来创建游戏世界。因此,我们开发人员就是“造物主上帝”。在Scene场景视图中由一个Main Camera相机,它会采集Scene场景视图中的内容,来呈现到Game游戏视图中。这个Main Camera就是一个游戏对象,我们可以对它进行编辑和控制。Main Camera可以理解为玩家的眼睛。由于游戏世界是同一个,只是两个不同视角相机的呈现而已。因此,两个相机是可以重合的。也就是说,Scene视图和Game视图可以显示完全一样的内容。这种修改分为两种情况,第一是将Game CameraMain Camera)放到Scene Camera的位置,让Game视图与Scene视图保持一致。另一种就是将Scene Camera放置到Game CameraMain Camera)的位置,让Scene视图与Game视图保持一致。请注意,两个不同的操作区别在于,一个不动,另一个动,不动的为最终呈现。Unity菜单栏GameObject下有三个操作:Move To ViewAlign With ViewAlign View to Selected。它们的操作解释如下。

第一个Move To View:若选中任意一个游戏对象,然后进行Move To View操作,则把这个游戏移到场景视图正中间,很显然游戏对象的位置信息就会发生改变。如果这个游戏对象是Main Camera的话,游戏视图也会跟随发生改变。不经常使用。

第二个Align With View:若选中任意一个游戏对象,然后进行Align With View操作,则把这个游戏对象移到Scene Camera的位置,很显然这个操作没啥意义。但是,当这个游戏对象是Main Camer的话,就会将Main Camer放置到Scene Camera的位置。那么,此时游戏视图呈现的内容就和场景视图一模一样了。少量经常使用(避免修改Main Camer)

第三个Align View to Selected:若选中任意一个游戏对象,然后进行Align View to Selected操作,则将Scene Camera移动游戏对象的位置,很显然这个操作没啥意义。但是,当这个游戏对象是Main Camer的话,就会将Scene Camera放置到Main Camer的位置。那么此时场景视图呈现的内容就和游戏视图一模一样了。也就是说,我们需要在场景视图中查看游戏视图的呈现效果的话,只需要将Scene Camera放置到Main Camer的位置即可。

接下来,我们介绍Project工程视图,如下所示

我们上文提到,SampleScene是一个场景,该场景会以文件的形式保存到工程的Assets\Scenes目录下,文件的名称就是场景的名称,两者保持一致。因此,你可以在Assets\Scenes目录下,看到一个“SampleScene.unity”的场景文件。这个文件,我们也可以在工程视图(Project)中看到,如下所示

我们可以看到工程视图中包括FavoritesAssetsPackages三个部分。Favorites主要用于搜索,暂时我们不需要它。Assets才是最重要的,它与我们工程保存路径下的Assets目录是一致的。我们创建的所有脚本,材质,模型等等,都放置在Assets目录下。Packages是游戏开发需要的一些资源包,这个对我们帮助很大。这跟我们日常开发应用程序使用的第三方库是一个道理,Unity官方也会给我们提供一些资源包辅助我们进行游戏开发。我们可以通过Window -> Packages Manager 打开资源包管理器对这些资源包统一管理。

最后,我们来介绍检视视图(Inspector)。这个视图不是一个固定的内容,它会根据你点击选择的游戏对象而动态的显示该游戏的所有属性。我们可以在层级视图中选择游戏对象,也可以在场景视图中选择游戏对象。以下是我们选中主摄像机后,检视视图显示的内容

最上面显示了游戏对象的名称,以及标签(Tag)和所属层(Layer)等等。

每一个游戏对象都有属于自己的名称,通过名称我们可以很方便地识别并进行管理。同时每一个游戏对象都有激活状态,游戏对象名称旁边的勾选项。默认情况下,游戏对象都是激活状态,也就是自动勾选的状态。当游戏对象设置为非激活状态后(取消那个勾选项),该游戏对象就会在场景视图和游戏视图中隐藏起来(也就是不可使用)。游戏对象的激活状态可以通过名称左边的复选框来勾选设置,也可以通过C# 脚本来控制。

接下来简单介绍一下标签和图层。在角色扮演游戏中,可以为怪物添加一个敌人的标签(enemy),为主角添加一个玩家的标签(player),但是两者都设置为角色图层(role)。我们使用标签来找到特定范围的游戏对象;而通过图层可以设定属于某个图层的游戏对象是否与其他图层的游戏对象产生碰撞检测,以及该图层的游戏对象是否需要进行渲染等逻辑操作。标签和图形可以理解对游戏对象的分类,标签分类主要用于游戏对象的选择等等,图层分类主要用于碰撞和渲染等等。关于更多的标签和图层的使用,我们会在以后的案例中介绍。

接下来我们简单介绍主摄像机检视面板中的属性,这些属性是可以进行修改。我们可以看到,主摄像机有TransformCameraAudio ListenerNew Behaviour Script四个属性分类,我们称之为组件。我们看到最下面有一个“Add Component”的按钮,也就是添加其他组件的意思。每个组件都可以理解为不同的功能,给一个游戏对象添加不同的组件,就会使这个游戏对象具备不同的功能。Unity提供了很多组件帮助我们进行游戏开发。其中,Transform代表游戏对象在游戏世界中的位置,Camera就是摄像机,Audio Listener与播放声音有关,而New Behaviour Script是我们上一章节中创建的一个C#脚本。请注意,我们创建的C#脚本文件也属于组件,它必须赋予游戏对象上面才能够运行哦。组件是Unity开发必须掌握的重要知识。我们除了要掌握官方提供的组件之外,还要能够编写自己的C#脚本组件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/463324.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker Compose的常用命令与docker-compose.yml脚本属性配置

Docker Compose的常用命令与配置 常见命令ps:列出所有运行容器logs:查看服务日志输出port:打印绑定的公共端口build:构建或者重新构建服务start:启动指定服务已存在的容器stop:停止已运行的服务的容器&…

Android studio 使用入门

安装 安装JDK https://www.oracle.com/java/technologies/downloads/ 新增变量JAVA_HOME,值为JDK安装根目录 在path中增加 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 安装 Android studio https://developer.android.google.cn/studio/ 注意:路径尽量不要包…

区间DP (Java) 解析/模板/案例

一. 区间DP简单介绍 区间DP,是经常会用到的、解决区间问题的一种方法,经常以动态规划(dfs/记忆化搜索)的形式展现,最核心的思想就是枚举区间(枚举端点),寻找切割点,处理因…

java.util.List和java.util.Set区别

最近有个需求要求查询按照单号查询顺序,数据库是hbase,我看了之前代码没有通过查hbase进行排序,就问了前端看是否前端可以排序,答案是前端不会做排序;有2个接口其中之前的接口就是这样排序的,于是我就按个排查看不同之…

Java每日一练(20230426)

目录 1. 天际线问题 🌟🌟🌟 2. 2 的幂 🌟🌟 3. 对称二叉树 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每…

这可能是最全面的Redis面试八股文了

Redis连环40问,绝对够全! Redis是什么? Redis(Remote Dictionary Server)是一个使用 C 语言编写的,高性能非关系型的键值对数据库。与传统数据库不同的是,Redis 的数据是存在内存中的&#xf…

jmeter(四)HTTP请求

启动jmeter,建立一个测试计划 这里再次说说怎么安装和启动jmeter吧,昨天下午又被人问到怎样安装和使用,我也是醉了;在我看来,百度能解决百分之八十的问题,特别是基础的问题。。。 安装:去官网…

状态设计模式解读

目录 问题引进 状态模式基本介绍 基本介绍 状态模式的原理类图 对原理类图的说明 状态模式解决 APP 抽奖问题 状态模式的注意事项和细节 问题引进 请编写程序完成 APP 抽奖活动 具体要求如下: 1) 假如每参加一次这个活动要扣除用户 50 积分,中奖概率是 10% …

尚融宝23-后端管理系统借款审核

目录 一、借款信息列表展示 (一)需求 (二)后端 (三)前端 二、借款详情 (一)需求 (二)后端 (三)前端 三、借款审批 &#xf…

YOLOv7训练自己的数据集(txt文件,笔记)

目录 1.代码下载 2.数据集准备(.xml转.txt) (1)修改图像文件名 (2)图片和标签文件数量不对应,解决办法 (3).xml转.txt (4).txt文件随机划分出对应的训练…

记录自己第一次项目管理(附件:WBS计划与会议纪要模板)

记录自己第一次项目管理 前言 20**年新入职到一家公司,刚到就接到紧急任务,因为上一个后端跑路,现在系统上出现接口报错、假接口的问题,客户又着急验收,所以入职之后,一直在着急改代码。最后因为系统没有…

Nginx+Tomcat负载均衡及动态分离

一.Nginx负载均衡实现原理 Nginx实现负载均衡是通过反向代理实现 1、 反向代理原理 2、反向代理的概念 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服…

Promise--代码实现-- ajax 传统方式和 promise 方式和 promise 代码优化/重排 方式的对比--综合代码示例

目录 Promise Promise 基本介绍 Promise 应用实例 代码实现 monster.json monster_detail_1.json 先使用 ajax 传统方式完成, 问题分析(出现回调函数嵌套) 使用 promise 方式 示意图: 使用 promise 代码优化/重排 方式完成 get.js方法 注意事项和使用细节 综合代码 …

C语言学习分享(第五次)------函数

函数 1.前言2. 什么是函数3. 库函数3.1 为什么会有库函数3.2 如何学习库函数3.3 参考文档学习库函数3.31 strcpy函数3.32 memset函数3.33 使用库函数应该包含的头文件 4.自定义函数5.函数的参数5.1 交换两数题目详解 6. 函数的调用6.1 传址调用6.2 传值调用 7. 函数的嵌套调用和…

【机器学习】P25 随机森林算法(2) 实现 “波士顿房价” 预测

随机森林算法 Random Forest Algorithm 随机森林算法随机森林算法实现波士顿房价预测 随机森林算法 随机森林(Random Forest)算法 是一种 集成学习(Ensemble Learning)方法,它由多个决策树组成,是一种分类…

【RV1126】移植kaldi实时语音识别

文章目录 算法一、环境1.1 硬件环境--RV1126开发板1.2 交叉编译器1.3 需要Cmake版本大于3.1以上 二、交叉编译sherpa2.1 下载sherpa2.2 编译sherpa2.3 运行测试 三、下载模型四、语音测试4.1 单个语音文件解码测试4.2 开发板上使用alsa架构从MIC说话测试 算法 参考&#xff1a…

Mysql命令大全

一、mysql:连接Mysql数据库 mysql命令用户连接数据库。 mysql命令格式: mysql -h主机地址 -u用户名-p用户密码 连接到本机上的MYSQL 首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回…

开放式耳机有什么好处,分享几款知名度高的开放式耳机

开放式耳机是一种通过头骨传递声波的耳机,相比于传统的耳机,开放式耳机不用塞进耳道,而是在耳后的骨头里将声音传递到耳膜。而且因为不塞进耳朵,所以不用担心在使用过程中因为佩戴时间过长而导致的耳朵不适。所以相比于传统耳机来…

Linux-RaiDrive把ubuntu文件远程映射到Windows上

一、准备工作 系统:Ubuntu18.4 使用VMware安装Ubuntu虚拟机和VMware Tools_t_guest的博客-CSDN博客 Windows软件:RaiDrive 链接:https://pan.baidu.com/s/1t9lrC9lM_EXixmKYrQjfDg?pwd05ig 提取码:05ig 二、实操 1.设置语言 …

Ajax XHR readyState

文章目录 AJAX onreadystatechange 事件onreadystatechange 事件使用回调函数 AJAX onreadystatechange 事件 onreadystatechange 事件 当请求被发送到服务器时,我们需要执行一些基于响应的任务。 每当 readyState 改变时,就会触发 onreadystatechange…