【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版12(附带项目源码)

最终效果

在这里插入图片描述

系列导航

前言

本节主要实现UI框架调用不同的面板界面

UI框架

不懂UI框架的设计思路可以查看我之前写的笔记:【Unity小技巧】手戳一个简单易用的游戏UI框架(附源码)

先绘制一些常用UI面板,设置为预制件

在这里插入图片描述

提示弹窗

在这里插入图片描述

用户列表

在这里插入图片描述
去除滚动条和水平滚动
在这里插入图片描述
面板内容添加Grid Layout Group控制子物体的布局
添加Content Size Fitter组件,配置垂直适应为Preferred Size,自动按子物体数量适配垂直高度
在这里插入图片描述

菜单

在这里插入图片描述
修改复选框的背景和选中图片
在这里插入图片描述
在这里插入图片描述

输入框弹窗

在这里插入图片描述

创建各个面板的脚本控制代码

比如MenuPanel菜单面板代码

public class MenuPanel : BasePanel
{
    public Button btnCancel;//返回游戏
    public Button btnAtlas;//查看图鉴
    public Button btnRestart;//重新开始
    public Button btnMainMenu;//主菜单
    [SerializeField] private SceneField mainMenuScene;//主菜单场景

    private void Awake()
    {
        btnCancel.onClick.AddListener(OnBtnCancel);
        btnAtlas.onClick.AddListener(OnBtnAtlas);
        btnRestart.onClick.AddListener(OnBtnRestart);
        btnMainMenu.onClick.AddListener(OnBtnMainMenu);
    }
    
    public void OnBtnCancel()
    {
        ClosePanel();
    }

    public void OnBtnAtlas()
    {
        UIManager.Instance.OpenTips("功能正在火速开发中,敬请期待");
    }

    public void OnBtnRestart()
    {
        ClosePanel();
        SceneManager.LoadScene(SceneManager.GetActiveScene().name);
    }

    public void OnBtnMainMenu()
    {
        ClosePanel();
        SceneManager.LoadScene(mainMenuScene);
    }
}

配置
在这里插入图片描述
其他面板脚本也类似配置即可,记得继承BasePanel

控制菜单界面按钮事件

新增MainMenuPanel

public class MainMenuPanel : MonoBehaviour
{
    public Button btnChangeUser;//更改用户
    public Button btnMenu;//选项
    public Button btnHelp;//帮助
    public Button btnQuit;//退出

    private void Awake()
    {
        btnChangeUser.onClick.AddListener(OnBtnChangeUser);
        btnMenu.onClick.AddListener(OnBtnMenu);
        btnHelp.onClick.AddListener(OnBtnHelp);
        btnQuit.onClick.AddListener(OnBtnQuit);
    }

    //打开用户列表
    public void OnBtnChangeUser()
    {
        UIManager.Instance.OpenPanel(UIConst.UserListPanel);
    }

    public void OnBtnMenu()
    {
        UIManager.Instance.OpenPanel(UIConst.MenuPanel);
    }

    public void OnBtnHelp()
    {
        UIManager.Instance.OpenTips("功能正在火速开发中,敬请期待");
    }

    public void OnBtnQuit()
    {
        UIManager.Instance.OpenTips("功能正在火速开发中,敬请期待");
    }
}

配置
在这里插入图片描述
效果
在这里插入图片描述

源码

源码不出意外的话我会放在最后一节

结束语

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,以便我第一时间收到反馈,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,出于兴趣爱好,最近开始自学unity,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!php是工作,unity是生活!如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~

在这里插入图片描述

最近更新

  1. TCP协议是安全的吗?

    2024-06-17 20:38:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-17 20:38:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-17 20:38:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-17 20:38:01       20 阅读

热门阅读

  1. 从0到1实现YOLOv3

    2024-06-17 20:38:01       7 阅读
  2. 2024年反电诈重点:打击帮信罪&掩隐罪

    2024-06-17 20:38:01       8 阅读
  3. 第九章 Three.js 高级材质与着色器 (二)

    2024-06-17 20:38:01       5 阅读
  4. Jackson指定json的key

    2024-06-17 20:38:01       7 阅读
  5. 面向对象编程中的类详解

    2024-06-17 20:38:01       7 阅读
  6. 【镜像制作】docker命令的参数解释及用法

    2024-06-17 20:38:01       8 阅读
  7. NSNumber转float或double类型避免小数点后补0

    2024-06-17 20:38:01       8 阅读
  8. 使用 Selenium 保持登录会话信息

    2024-06-17 20:38:01       8 阅读
  9. MySQL触发器基本结构

    2024-06-17 20:38:01       8 阅读
  10. jingxiang制作

    2024-06-17 20:38:01       7 阅读
  11. 使用Spring Boot设计对象存储系统

    2024-06-17 20:38:01       7 阅读