本博重在回顾知识点,不具有普适性,纯属博主碎碎念,大佬绕道。


之前说了一些基本的情况,但是游戏一直都在一个Scene下对吧,但是真实的游戏是有多个场景的,比如我们玩The Room的时候,会有chapter1,chapter2,不同的章节是不同的游戏场景,然后在进入到一个场景的时候,左上角还有返回的按钮。那这,又该怎么实现呢?

本博主要是回顾制作游戏界面。


假设第一个场景的名字叫做Island.unity,到主菜单栏中选择Edit | Duplicate复制当前场景。把新场景重命名为Menu,双击该文件载入场景,然后把除Environment外的所有文件全部删除。就是我们的第二个场景。

由于我们删除了第一人称控制器,所以我们的场景中缺少一架相机,我们的Game场景便是一片空白。

到层次面板点击Create,然后在下拉菜单中选择Camera,我们便为场景创建了一架摄像机。接着调整你的场景视图,让它的视角和下图类似,因为我们想要一个缩略图。


添加游戏标题

调整好视点了,我们现在开始使用canvas来制作UI界面了!

标题是界面的第一步,先创建一个UI|Image.

可以发现,我们创建的是Image,但是unity确自动为我们创建了一个canvas(画布),这表明我们创建的各个类型的UI元素都是放置在画布之上的。

他们都是unity 画布的子元件。

(对,在canvas里还有一个EventSystem也一起被创建了,这个东西是UI系统的交互事件系统,如果EventSystem在监视面板中没有被勾选,那后面我们对UI按钮做的编辑将统统无效。)

把这个新建的Image(图片)重命名为Title,并将位置设置为(-100,85,0),此时可以看到此时UI中心四叶花为屏幕正中央。)

在下方Image(Script),中将Source Image(图片源)设置为下图素材包中的menu_mainTitle。

测试:


创建菜单按钮

我们通过(UI|Button)新建三个按钮,分别是“开始、说明、和退出”。

接下来,我们把三个按钮的sourceimage都选为UISprite ,这样就成为了有圆角的按钮。


按钮交互设置

点击开始游戏——>进入游戏场景

点击游戏说明——>显示游戏说明文字,此时点击返回,可以回到初始菜单。

那这里应该还需要一个在游戏说明显示时一起显示的返回按钮?!

我们把退出游戏按钮复制一份!

修改一下text内容,把名字换成quits吧。(此过程创建了第四个按钮!)

这是点击按钮之后的变化,主要是通过这个来实现。


切换场景

我们先在(File | Build Settings)中添加我们要进行切换的场景

下方两个场景已经被编号(菜单场景:0, 游戏场景:1),这个编号在我们用脚本进行切换场景时可以用到。

我们需要新建一个脚本,来存放场景切换动作的代码。

在项目面板新建C#脚本sceneget,在脚本内部输入下方代码:

代码主要部分只有两行,第一行是加入负责场景切换的包(UnityEngine.

第二行是 调用场景切换的方法,实现切换。此函数的名称为:OnStartGame,请记住这个函数。一会儿要找到它~

接下来保存脚本,并把脚本附加到我们的Camera摄像机上。

之后再来到start按钮的On Click函数里进行设置了~:

左侧选择Camera主摄像机(可直接拖拽过来),右侧则选择刚刚我们需要记住的那个函数:

Sceneget.OnstartGame(),在参数一栏填1.


总结:

如何实现多场景,以及两个场景间的切换?

老版本只需要Application.LoadLevel(levelName);就可以加载另一个场景。Level经常被称为“关卡”。所以是这样,一个project中可以含有多个scenes,这些场景中是可以自由切换的!

而新版本用上述的方法即可实现切换。

前面的课程已经接触到有关GUI的对象了:像是image、button等在面板里直接创建的。而这节课知道了更系统的创建GUI菜单的方法。即通过脚本来创建。

步骤是创建一个空物体(例如叫Menu),然后给此空物体写脚本。脚本中运用GUI相关的类和函数来构建菜单。主类是GUI,下面有GUI.Button(), GUI.BeginGroup(),GUI.Lable(), GUI.Skin()等。还有Rect类用来定义按钮区域。

还有一个GUISkin类非常重要。在Project的创建资源中专门有一类资源就叫GUI Skin,这种资源就是与GUISkin类所对应的。也就是说GUISkin类对象的所有成员变量可以从GUI Skin资源中可视化地设置。GUISkin将定义出现在界面中的按钮、label等所有元素的风格。只要将GUI.skin = 你定义的GUISkin对象; 就可以了。

只要我们将rect的button,GUISkin等作为公有变量定义出来,就可以暴露在inspector面板中,从而可以可视化地设置之。

一个至关重要的函数OnGUI(),很多与界面相关的工作都在这个消息处理函数中进行。

可能你对UI、GUI 还是不十分透彻的理解,我们对两个概念进行一个简单的概括:

1、UI

UnityGUI 是 Unity 5.x内置的 GUI 创建系统。利用它既可以直接创建不同的UI控件 (UI Controls) , 而且还能定义这些控件的内容和外观。

2、GUI Style

GUI 样式 (GUI Style) 是Unity 5.x内置的UnityGUI中的一组自定义属性。一个 GUI 样式 (GUI Style) 定义了一个 UnityGUI 控件的外观。

3、GUISkin(选读)

GUISkin(GUI皮肤) 是Unity 5.x内置的UnityGUI中的一组可以应用到 GUI所有控件 的 GUI Styles 。每个控件 (Control) 类型都有各自的样式 (Style) 定义。

GUISkin可让你将某种GUI Style应用于整个UI,而不是仅仅应用于UI中的单个控件 (Control)。

如需创建 GUISkin,直接在菜单栏上选择资源 (Assets) -> 创建 (Create) -> GUI 皮肤 (GUI Skin) 即可。

另外一个需要注意的是如果你在当前场景中定义了一个Menu物体,那么该Menu将只作用在当前场景中。也就是说Menu物体是为单个场景服务的,不会作用于同一project中的别的物体(显然,因为该Menu物体是属于当前场景中的物体的)。也就是说如果你想给某个场景加界面,那么你就在此场景中定义一个物体用来管理界面。

在同一个场景中,如何实现GUI及两个GUI间的切换?

所谓GUI物体其实就是造的一个空物体,然后关键是有脚本,脚本中来画各种GUI控件。

所有有关菜单的绘制和响应都发生在OnGUI()函数中:

要实现两个菜单间的切换很简单,就是重新画菜单。在我们的例子中,专门定义了一个字符串变量menuPage来区分同一个场景中不同的GUI界面。

MonoBehaviour.OnGUI()

Description

OnGUI is called for rendering and handling GUI events.

This means that your OnGUI implementation might be called several times per frame (one call per event). For more information on GUI events see the Event reference. If the MonoBehaviour's enabled property is set to false, OnGUI() will not be called.

你会发现在两个场景中切换是很快的,因为他们的project资源其实都没变,都是共享的,不用再加载资源,速度就不会慢。

Unity--分场景相关推荐

  1. Unity大型场景程序化生成及优化技术—FPS迷宫生成和优化

    Unity大型场景程序化生成及优化技术-FPS迷宫生成和优化 1.知名游戏中的大型场景生成 场景程序化生成技术是一个广泛应用在游戏开发中的技术,较早的使用这类技术有名游戏<暗黑破坏神>系列 ...

  2. 【转】Unity Scene场景自定义坐标轴

    [转]Unity Scene场景自定义坐标轴 来自:https://blog.csdn.net/cheng624/article/details/70859054 多看看别人的代码是没有坏处的,即使学 ...

  3. 天上的街市Unity游戏场景制作案例(一)

    目录 Downtown Street of Heaven 场景 Unity实现过程 新建项目 场景布置 场景制作参考 移动媒介的添加 Downtown Street of Heaven 场景 Unit ...

  4. Unity(13)-场景切换,保留资源

    文章目录 前言 其他介绍 上一篇笔记 一.项目结构 二.脚本 [1]. 场景切换 [2]. 资源保留 前言 在切换场景的时候会删除上一个场景的所有资源,所以需要给需要的游戏对象上挂载脚本,从而保留游戏 ...

  5. Unity中场景生命周期的监听: EditorSceneManager

    本文分享Unity中场景生命周期的监听: EditorSceneManager 在Unity开发中, 有时我们需要在场景的某些生命周期时做一些特定的操作, 特别是在Editor模式下的一些工具代码. ...

  6. 【SQL开发实战技巧】系列(五):从执行计划看IN、EXISTS 和 INNER JOIN效率,我们要分场景不要死记网上结论

    系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...

  7. unity雪山场景+雪地素材包可以用于雪地雪山场景制作

    unity雪山场景 详情如下图:(下载链接在文末) 点我下载资源 https://download.csdn.net/download/weixin_43474701/54954759

  8. Unity 多场景/大场景加载解决方法

    Unity 多场景/大场景加载解决方法 文章目录 Unity 多场景/大场景加载解决方法 前言 一.通过距离判断实现加载场景 1.1.原理: 1.2.范围检测 1.3.方法弊端 二.通过触发检测实现加 ...

  9. Unity多场景管理

    Unity5.3中新增加了多场景编辑功能,允许用户将一个大场景以某种逻辑分割成多个小场景并方便的编辑和管理.这在某些情况下会比较有用,是对Unity编辑器 对场景编辑能力的一个重要提升.本文将由Uni ...

  10. 制作unity大世界场景编辑的一点心得和注意事项(场景地编)

    制作unity大世界场景的一点心得和注意事项(地编注意事项) 这是一个项目的整个注意事项,所注意点都是根据制作的项目整理的.所以在做任何项目的时候要注意举一反三. 上传场景(细节决定成败,只要细心一点 ...

最新文章

  1. 新款笔记本写代码贼爽,包邮送一台!
  2. sql 语句 查询两个字段都相同的方法
  3. 索尼推出全能音乐AI工具:作曲混音编曲都OK!留给人类发挥的空间不多了
  4. .net core项目启动时报_未处理Socket异常(以一种访问权限不允许的方式做了一个访问套接字的尝试。)...
  5. matplotlib 雷达图2
  6. 关于使用jquery修改hover伪标签的样式
  7. (转)hibernate-5.0.7+struts-2.3.24+spring-4.2.4三大框架整合
  8. Spring-ConfigurationClass类
  9. python生成折线图怎么对特定点做颜色_python库matplotlib绘制折线图,散点图以及设置样式...
  10. 《虚拟化与云计算》作者介绍
  11. 自带内网穿透的文件同步工具Syncthing介绍
  12. 疑惑光栅投影中条纹间距和频率的关系
  13. python3卸载_python3卸载
  14. [计算机网络] 实验 5 电子邮件
  15. 为什么在线客服系统很重要
  16. 园区网典型组网架构及案例实践
  17. 常用的git命令(实用)
  18. lterator的初体验
  19. MySQL的启动和关闭
  20. vscode使用chatGPT

热门文章

  1. Rasa课程、Rasa培训、Rasa面试、Rasa实战系列之 Language Agnostic BERT
  2. grep(模式匹配器)详解
  3. 亚马逊测评现在还能做吗?需要注意哪些?
  4. 支付宝转账到银行卡链接制作并隐藏部分卡号
  5. 用java画只乌龟_Swing编程方面步骤之四java绘图技术画小乌龟
  6. Android Google Map实例 - 在地图和卫星图之间切换(Android mapview)
  7. 再见, 软交换!又一个通信时代的落幕
  8. sencha touch的pinch zoom控件
  9. 小程序授权信息是保存在微信服务器,微信小程序登陆,授权,手机号授权流程及滚动穿透,保存图片等问题...
  10. Kylin常见错误及解决方法