Unity游戏开发日记(一):独自开发2d横板游戏:Small man(MainMenu主界面)基本构建
目录
一、独自开发想法
前言;
开发构想;
二、主要内容: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主界面)基本构建相关推荐
- 2021-9-4 爆肝一整天,关于2D横板游戏中攀爬楼梯的考虑
今日份关于2D横板游戏中攀爬楼梯的考虑 引言 关于攀爬楼梯考虑 总体考虑 玩家站在1处 玩家站在2处 玩家通过跳跃来到3处 1处升至3处 和 2处降至3处 3处升至2处 3处降至1处 其他考虑 解决方 ...
- 芯科EmberZNet_ZigBee3.0_EFR32MG开发日记三:开发平台搭建3
3.4AR-EWARM安装及配置 IAR Embedded Workbench是瑞典IAR Systems公司为微处理器开发的一个集成开发环境,支持C51,ARM,AVR,MSP430等芯片内核平台. ...
- 芯科EmberZNet_ZigBee3.0_EFR32MG开发日记三:开发平台搭建1
3.1 Simplicity Studio安装及配置 Simplicity Studio是一个基于Eclipse的免费集成开发环境(IDE),是由芯科实验室提供的增值工具集合.它的主要目标是减少开发时 ...
- EasyARM-i.MX280A—Linux系统开发板(开发日记1-登录开发板)
今天,心仪的板子终于到了,作为一个外行来说,既有对板子开发的期待,又有对自己技术的担忧.为了记录一下自己的开发过程,同时也是自己的成长过程,特地开了个专栏,我知道这将是一个漫长的过程,我会不断的更新, ...
- python编写格斗游戏_C语言实现的开源 2D 格斗游戏: Punch Kick
<Punch & Kick>是作者在大学期间用C语言开发的2D格斗游戏,其开源主要是面向开发者及编程爱好者,这款游戏并不适合发烧级玩家.审美帝. 下面是作者自己对这个游戏的介绍: ...
- c语言管理系统开发,日记管理系统的开发(C语言版)
实验题目: 设计一个简单实用个人日记管理系统. 实验要求: 1.该实验的课内学时是4个课时. 2.程序完成后应该完成如下基本功能: 1)用自定义日记的存储结构,每篇日记至少包含日期,内容等字段: 2) ...
- 2021-9-2 Cinemachine 不需要写代码的高级跟随摄像机 2D横板游戏应用
Cinemachine在2D横版游戏中的使用方法简介 Cinemachine的下载及导入 Cinemachine基础 设置 简单用法的一些重要的属性(没讲到的暂时就保持默认设置,如果有补充,欢迎评论区 ...
- Unity 创建2D平台游戏开发学习教程
了解如何使用C#在Unity中创建您的第一款2D平台游戏 你会学到什么 使用Unity创建2D奥运会 使用可脚本化的对象和单一模式 使用良好的编程实践 创造武器和射弹 使用可脚本化的对象和委托模式创建 ...
- python html5游戏_25 个超棒的 HTML5 JavaScript 游戏引擎开发库
就像在汽车中,引擎完成主要的工作,使汽车看起来不可思议.游戏引擎同理,游戏开发者完成细节的工作,使游戏看起来真实.吸引人眼球.游戏引擎负责其余的事情.早期,游戏开发者通常从草图做起,花费高昂,且不容易 ...
最新文章
- windows10 查看 nvidia driver cuda 版本
- eclipse配置springboot开发
- Xen Server二安装xc及管理xen主机
- MarkDown写blog(测试)
- python中的insert函数_Python numpy.insert函数方法的使用
- UNITY 画布的粗浅理解
- 程序员面试算法_程序员的前20个搜索和排序算法面试问题
- TypeError: 'numpy.ndarray' object is not callable
- mysql 别名 metadata_获取数据库元数据:DatabaseMetaData与ParameterMetaData与ResultSetMetaData...
- Memcached未授权访问漏洞记录(CVE-2013-7239、危害级别全版本、端口:11211)
- window.onload中调用函数报错的问题
- java中抽象类的定义_Java中抽象类的定义和使用
- Java数据结构与算法(3) - ch04栈(栈和转置)
- SE91 SAP消息类型
- 漫步数理统计三十一——依分布收敛
- IDEA初学者 常用注解意思
- lol刷金币python脚本_用Python写王者荣耀刷金币脚本
- Dota2 无法连接至steam网络 【已解决】
- 码分多址(CDMA),码片序列简单理解
- 汾阳市教师招聘中职计算机真题,2019年山西省吕梁市汾阳市中小学语文教师招聘/编制考试历年真题试卷及答案解析...
热门文章
- 微信小程序之兼容问题
- Minimum Number of Refueling Stops(C++最低加油次数)
- win7多重引导 linux,如何在Linux和Windows下制作多重引导USB?
- 三部曲简史mobi_尤瓦尔.赫拉利简史三部曲(电子书)
- 爬取百度贴吧图片-python-requests
- 网络猫只有计算机和机顶盒两个口,电信的猫上有两个网口,但是只能用网口1,这是为什么。360......
- java和python中函数式编程
- 关于谷歌浏览器不能用flash插件的问题
- CentOS 6.5系统下载
- 第九/十章 导出生产文件-电路板制作