目录

一、独自开发想法

前言;

开发构想;

二、主要内容:MainMenu主界面基本构建

(一)预想功能

(二)功能实现

1、主界面UI设计

2、Option功能设计

3、TypeOption功能设计

4、面板之间切换

(1)设计问题;

(2)思路;

(3)实现;

5、进入主界面渐变动画及主界面面板延迟出现

(1)思路;

(2)实现;

6、按钮点击音效设计

(1)思路;

(2)实现;

7、最终效果


一、独自开发想法

前言:

开始学习unity是在最近的几个月,说长不长说短不短。unity学习几乎自学,独自开发游戏,一是为了练习所学的知识,运用到实践中,而是为了朝更深入的方向学习,有了问题就会有学习的方向,像我这样几乎自学的程序猿,这样的方法很重要,写这个博客系列,也是为了记录我的学习成果,当然也是为了督促我的学习。(此博文写自主界面功能实现完成后)

开发构想:

学习完基本的unity的游戏开发,完成了小狐狸系列游戏,自己早有摩拳擦掌之势。小白unity游戏开发入门教学,良心推荐b站up主M_Studio  M_Studio的个人空间_哔哩哔哩_bilibili

开发的游戏类型是横板像素格斗游戏,类似终结的百合花。

二、主要内容:MainMenu主界面基本构建

(一)预想功能

开始游戏 Play

游戏设置 Option

{

音量设置

其它(根据之后可能会加上分辨率,按键等)

}

退出游戏 Cancel

(二)功能实现

1、主界面UI设计

主界面的场景构建都是UI,主要的UI就是面板Panel

UI创建会自动创建Cavans和EventSystem,Canvas一定要作为UI的父级。给创建好的面板命名为Background

Bcakground作为我们主界面的背景图

在Image中的Source Image和Material分别选择背景图和材质,当然根据需求这些也可以不选,背景图素材来源于Unity资源商城Underwater Fantasy | 2D 水 | Unity Asset Store

同样新建一个Panel,这个Panel用来承载我们的按钮,让UI设计更加完美,给它命名为MainMenuPanel(主界面面板),同样创建3个Button(按钮)UI作为我们Play,Option(Option没有这个按钮的素材。我是自己在按钮文本下自行设置编辑的),Cancel的三个功能按钮,创建一个文本UI给我们的游戏显示出游戏名

2、Option功能设计

Option设计:一般的游戏,在主界面打开设置的时候,我们在不改变主界面背景的情况下,可以出现Option的具体设置操作,列入声音,操纵,图像的功能按钮,这需要一个新的面板,这个面板上有这些按钮,这个设计方法和主界面设计是一样的,最终设计成这样:

对应:

OptionPanel——>Panel

Volumechange——>Button

backOption——>Button

后续根据功能,可能会继续加上其它具体Option设置

3、TypeOption功能设计

这里的设计就是打开Option内子功能的具体功能。例如打点击Option后,进入OptionType面板,点击面板上的“VOLUME”(声音)按钮,进入到声音的具体设置界面,为了后续的便利,我将声音的功能放在一个空物体上,将这个空物体作为TypeOption的子级,因为还有其它的功能没准日后就要设计。

4、面板之间切换

(1)设计问题:

设计好三个面板之后,到了核心的一步,那就是如何让三个面板能够切换,主界面通过Option按钮切换到OptionType界面,通过OptionType界面的“VOLIME”按钮切换到TypeOption界面,又可以通过OptionType和TypeOption上的backOption按钮回到上一个面板。

(2)思路:

要实现这样的功能,我们就需要用代码实现了。面板和面板之间的切换,只要我们激活和关闭它们,就可以实现面板的开和关,这就是为什么我将Panel作为每个功能实现的父级。激活或是关闭父级,那么子级如按钮,图像,文本都会被激活或是关闭。

(3)实现:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Unity.Engine.SceneManager
public class ButtonChange : MonoBehaviour
{public GameObject MainMenu, OptionType, typeOption;   /*定义MainMenu,Option,设置内容面板*/public void Option()    //点击设置Option按钮{MainMenu.SetActive(false);    //关闭MainMenu面板OptionType.SetActive(true);    //激活Option面板}public void TypeOption()       //打开设置内容面板{OptionType.SetActive(false);   //关闭Option面板typeOption.SetActive(true);     //激活设置内容面板}public void backMainMenu()     //从Option面板回到MainMenu面板{MainMenu.SetActive(true);    //激活MainMenu面板OptionType.SetActive(false);   //关闭Option面板}public void backOptionType()     //从设置内容面板回到Option面板{OptionType.SetActive(true);    //激活Option面板typeOption.SetActive(false);   //关闭设置内容面板}public void StartGame()    //开始游戏{SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);}public void CancelGame()   //退出游戏{Application.Quit();}
}

代码完成后,将代码挂载在哪个对象下呢?我是直接挂载在Canvas下的,同时我给主界面,设置界面,设置内容界面都创建了一个父级的空物体,便于我来管理,分别命名为MainMenu,OptionType,TypeOption。

然后在对应的按钮下设置按钮操作,

将OptionType和TypeOption在项目设置中关闭

5、进入主界面渐变动画及主界面面板延迟出现

(1)思路:

主界面是一个Panel,我们同样用一个Panel,用动画器来设置其渐变动画,图层的遮罩会为我们实现进入主界面是渐变出现的错觉。而延迟动画,我们只要在渐变动画结束后做一个动画事件,就可以让主界面面板在背景图出现后出现。

(2)实现:

创建一个新的面板,这个面板设置合适的颜色和透明度,打开我们的动画,为这个面板设置动画,这里要用到录制功能。

将MainMenu作为新增加的Panel的子级并关闭MainMenu(因为是Panel动画结束后我们才激活MainMenu面板)

现在我们要改一下之前的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;public class ButtonChange : MonoBehaviour
{public GameObject MainMenu, OptionType, typeOption;public void Gamestart()                     //动画结束,让主界面面板激活{GameObject.Find("Canvas/Panel/MainMenu").SetActive(true);}public void Option(){MainMenu.SetActive(false);OptionType.SetActive(true);}public void TypeOption(){OptionType.SetActive(false);typeOption.SetActive(true);}public void backMainMenu(){MainMenu.SetActive(true);OptionType.SetActive(false);}public void backOptionType(){OptionType.SetActive(true);typeOption.SetActive(false);}public void StartGame(){SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);}public void CancelGame(){Application.Quit();}
}

设置的动画实践函数,就是我们新增加的GameStart()

函数,在动画事件里选择它

6、按钮点击音效设计

(1)思路:

按钮能切换面板,当然我们点击的时候也能发出音效啦。但是每个面板的按钮数不同,我们还要编写代码来实现音效的播放,要在每个按钮下都添加组件和脚本吗?就没有更轻松的方法吗?还记得我之前是将ButtonChange的脚本放在谁的下面了吗?对了,就是Canvas下。那我们能不能就用这一个脚本,用着一个对象,实现我们的音效呢?当然是可以的了。只要我们在脚本定义一个函数,这个函数用来播放音效,我们为Canvas添加一个AudioSource的组件,让脚本播放这一个音效就行。因为我们的按钮音效都是一样的,然后我们在每个按钮下添加按钮操作,只要调用函数不就可以实现了吗?

(2)实现:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;public class ButtonChange : MonoBehaviour
{public GameObject MainMenu, OptionType, typeOption;[SerializeField] private AudioSource audioSource;   //定义一个静态的音源public void ButtonVideo()   //音效函数{GetComponent<AudioSource>().Play();   //获得对象的组件AudioSource,并进行播放}public void Gamestart(){GameObject.Find("Canvas/Panel/MainMenu").SetActive(true);}public void Option(){MainMenu.SetActive(false);OptionType.SetActive(true);}public void TypeOption(){OptionType.SetActive(false);typeOption.SetActive(true);}public void backMainMenu(){MainMenu.SetActive(true);OptionType.SetActive(false);}public void backOptionType(){OptionType.SetActive(true);typeOption.SetActive(false);}public void StartGame(){SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);}public void CancelGame(){Application.Quit();}
}

设置:

记得关闭Audio Source里的Play On Awake和Loop

接下来为每个按钮设置能调用ButtonVideo函数

这样我们所有基本的功能就都实现了。

哦!对了,我们还少了一个BGM不是么。

为我们的背景Panel(Background)添加Audio Source组件,选择我们的AudioClip文件,记得勾选上Play On Awake和Loop哦~

7、最终效果:

https://live.csdn.net/v/252499

我是米芝鱼,一个奋斗中的咸鱼

Unity游戏开发日记(一):独自开发2d横板游戏:Small man(MainMenu主界面)基本构建相关推荐

  1. 2021-9-4 爆肝一整天,关于2D横板游戏中攀爬楼梯的考虑

    今日份关于2D横板游戏中攀爬楼梯的考虑 引言 关于攀爬楼梯考虑 总体考虑 玩家站在1处 玩家站在2处 玩家通过跳跃来到3处 1处升至3处 和 2处降至3处 3处升至2处 3处降至1处 其他考虑 解决方 ...

  2. 芯科EmberZNet_ZigBee3.0_EFR32MG开发日记三:开发平台搭建3

    3.4AR-EWARM安装及配置 IAR Embedded Workbench是瑞典IAR Systems公司为微处理器开发的一个集成开发环境,支持C51,ARM,AVR,MSP430等芯片内核平台. ...

  3. 芯科EmberZNet_ZigBee3.0_EFR32MG开发日记三:开发平台搭建1

    3.1 Simplicity Studio安装及配置 Simplicity Studio是一个基于Eclipse的免费集成开发环境(IDE),是由芯科实验室提供的增值工具集合.它的主要目标是减少开发时 ...

  4. EasyARM-i.MX280A—Linux系统开发板(开发日记1-登录开发板)

    今天,心仪的板子终于到了,作为一个外行来说,既有对板子开发的期待,又有对自己技术的担忧.为了记录一下自己的开发过程,同时也是自己的成长过程,特地开了个专栏,我知道这将是一个漫长的过程,我会不断的更新, ...

  5. python编写格斗游戏_C语言实现的开源 2D 格斗游戏: Punch Kick

    <Punch & Kick>是作者在大学期间用C语言开发的2D格斗游戏,其开源主要是面向开发者及编程爱好者,这款游戏并不适合发烧级玩家.审美帝. 下面是作者自己对这个游戏的介绍: ...

  6. c语言管理系统开发,日记管理系统的开发(C语言版)

    实验题目: 设计一个简单实用个人日记管理系统. 实验要求: 1.该实验的课内学时是4个课时. 2.程序完成后应该完成如下基本功能: 1)用自定义日记的存储结构,每篇日记至少包含日期,内容等字段: 2) ...

  7. 2021-9-2 Cinemachine 不需要写代码的高级跟随摄像机 2D横板游戏应用

    Cinemachine在2D横版游戏中的使用方法简介 Cinemachine的下载及导入 Cinemachine基础 设置 简单用法的一些重要的属性(没讲到的暂时就保持默认设置,如果有补充,欢迎评论区 ...

  8. Unity 创建2D平台游戏开发学习教程

    了解如何使用C#在Unity中创建您的第一款2D平台游戏 你会学到什么 使用Unity创建2D奥运会 使用可脚本化的对象和单一模式 使用良好的编程实践 创造武器和射弹 使用可脚本化的对象和委托模式创建 ...

  9. python html5游戏_25 个超棒的 HTML5 JavaScript 游戏引擎开发库

    就像在汽车中,引擎完成主要的工作,使汽车看起来不可思议.游戏引擎同理,游戏开发者完成细节的工作,使游戏看起来真实.吸引人眼球.游戏引擎负责其余的事情.早期,游戏开发者通常从草图做起,花费高昂,且不容易 ...

最新文章

  1. windows10 查看 nvidia driver cuda 版本
  2. eclipse配置springboot开发
  3. Xen Server二安装xc及管理xen主机
  4. MarkDown写blog(测试)
  5. python中的insert函数_Python numpy.insert函数方法的使用
  6. UNITY 画布的粗浅理解
  7. 程序员面试算法_程序员的前20个搜索和排序算法面试问题
  8. TypeError: 'numpy.ndarray' object is not callable
  9. mysql 别名 metadata_获取数据库元数据:DatabaseMetaData与ParameterMetaData与ResultSetMetaData...
  10. Memcached未授权访问漏洞记录(CVE-2013-7239、危害级别全版本、端口:11211)
  11. window.onload中调用函数报错的问题
  12. java中抽象类的定义_Java中抽象类的定义和使用
  13. Java数据结构与算法(3) - ch04栈(栈和转置)
  14. SE91 SAP消息类型
  15. 漫步数理统计三十一——依分布收敛
  16. IDEA初学者 常用注解意思
  17. lol刷金币python脚本_用Python写王者荣耀刷金币脚本
  18. Dota2 无法连接至steam网络 【已解决】
  19. 码分多址(CDMA),码片序列简单理解
  20. 汾阳市教师招聘中职计算机真题,2019年山西省吕梁市汾阳市中小学语文教师招聘/编制考试历年真题试卷及答案解析...

热门文章

  1. 微信小程序之兼容问题
  2. Minimum Number of Refueling Stops(C++最低加油次数)
  3. win7多重引导 linux,如何在Linux和Windows下制作多重引导USB?
  4. 三部曲简史mobi_尤瓦尔.赫拉利简史三部曲(电子书)
  5. 爬取百度贴吧图片-python-requests
  6. 网络猫只有计算机和机顶盒两个口,电信的猫上有两个网口,但是只能用网口1,这是为什么。360......
  7. java和python中函数式编程
  8. 关于谷歌浏览器不能用flash插件的问题
  9. CentOS 6.5系统下载
  10. 第九/十章 导出生产文件-电路板制作