【UGUI】Unity 游戏开发:背包系统初始化道具教程

在游戏开发中,背包系统是一个非常常见的功能模块。它允许玩家收集、管理和使用各种道具。今天,我们将通过一个简单的示例来学习如何在 Unity 中初始化一个背包系统。我们将使用 Unity 2021.3.7 版本,并结合 C# 脚本来实现这一功能。

1. 场景搭建步骤

在 Unity 中,我们可以使用 Canvas 和 Grid Layout Group 来创建一个简单的背包界面。以下是场景搭建的步骤:

  1. 创建 Canvas:

    • 在 Hierarchy 窗口中,右键点击并选择 UI > Canvas,创建一个新的 Canvas。

    • 确保 Canvas 的 Render Mode 设置为 Screen Space - Overlay

  2. 创建 Grid Layout Group:

    • 在 Hierarchy 窗口中,右键点击并选择 UI > Panel,创建一个新的 Panel。

    • 将 Panel 拖动到 Canvas 下,作为 Canvas 的子物体。

    • 在 Inspector 窗口中,为 Panel 添加 Grid Layout Group 组件。

    • 设置 Grid Layout Group 的属性,例如 Cell Size 和 Spacing,以适应你的需求。

  3. 创建物品栏模板 (GridMuban):

    • 在 Hierarchy 窗口中,右键点击并选择 UI > Panel,创建一个新的 Panel。

    • 将 Panel 拖动到 Grid Layout Group 下,作为 Grid Layout Group 的子物体。

    • 在 Panel 下创建两个子物体:一个 Image 用于显示道具图标,一个 TextMeshPro 用于显示道具名称。

    • 将这个 Panel 拖动到 Project 窗口中,创建一个预制体 (Prefab),命名为 GridMuban

  4. 设置父物体 (GridParentTrans):

    • 在 Hierarchy 窗口中,选择 Grid Layout Group 的 Panel,并将其 Transform 组件的 Position 设置为 (0, 0, 0)。

    • 这个 Panel 将作为所有克隆的物品栏的父物体。

2. 代码实现步骤
2.1 业务需求

我们需要实现以下功能:

  1. 初始化物品栏(运行时,道具栏有一个启动物资)。

  2. 拾取物体到背包。

  3. 鼠标放在道具上展示道具信息。

  4. 鼠标点击道具,展示道具信息。

2.2 程序逻辑
  1. 初始化物品栏:

    • 在 Awake 方法中,使用 for 循环克隆 10 个物品栏模板。

    • 为每个克隆的物品栏设置图标和名称。

  2. 拾取物体到背包:

    • 这个功能将在后续教程中实现。

  3. 展示道具信息:

    • 这个功能将在后续教程中实现。

  4. 鼠标点击道具,展示道具信息:

    • 这个功能将在后续教程中实现。

2.3 完整代码(加上详细注释)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;public class InventoryManager : MonoBehaviour
{// 物品栏模板,用于克隆生成新的物品栏public GameObject GridMuban;// 物品栏的父物体,所有克隆的物品栏都将放置在这个父物体下public Transform GridParentTrans;// 道具的图标数组,包含10个道具的图标public Sprite[] oneIamge = new Sprite[10];// 道具的名称数组,包含10个道具的名称public string[] Name = new string[10];private void Awake(){// 初始化系统数据for (int i = 0; i < 10; i++){// 克隆物品栏模板,生成一个新的物品栏GameObject TempCloneGrid = GameObject.Instantiate(GridMuban, GridParentTrans);// 修改道具的图标// 获取克隆的物体的子物体的子物体的 Image 组件,并设置其图标TempCloneGrid.transform.GetChild(0).GetChild(0).GetComponent<Image>().sprite = oneIamge[i];// 修改道具的名字// 获取克隆的物体的子物体的子物体的 TextMeshProUGUI 组件,并设置其文本TempCloneGrid.transform.GetChild(1).GetChild(0).GetComponent<TextMeshProUGUI>().text = Name[i];}}
}

  • GameObject.Instantiate: 用于克隆预制体。

  • transform.GetChild: 用于获取子物体的 Transform 组件。

  • GetComponent: 用于获取 Image 组件。

  • GetComponent: 用于获取 TextMeshProUGUI 组件。

3. 脚本如何挂载
  1. 创建脚本:

    • 在 Project 窗口中,右键点击并选择 Create > C# Script,创建一个新的 C# 脚本,命名为 InventoryManager

    • 将上面的代码复制到 InventoryManager 脚本中。

  2. 挂载脚本:

    • 在 Hierarchy 窗口中,选择 Canvas 或 Grid Layout Group 的 Panel。

    • 在 Inspector 窗口中,点击 Add Component,然后选择 InventoryManager 脚本。

  3. 设置脚本参数:

    • 在 Inspector 窗口中,为 GridMuban 参数拖动 GridMuban 预制体。

    • 为 GridParentTrans 参数拖动 Grid Layout Group 的 Panel。

    • 为 oneIamge 和 Name 参数设置相应的图标和名称。

4. 运行效果

当你运行游戏时,背包界面将会显示 10 个道具,每个道具都有自己的图标和名称。这个简单的示例展示了如何在 Unity 中动态初始化一个背包系统。

5. 扩展功能

在实际开发中,你可以进一步扩展这个背包系统,例如:

  • 拾取物体到背包: 当玩家拾取一个物体时,将其添加到背包中。

  • 展示道具信息: 当玩家将鼠标悬停在道具上时,显示道具的详细信息。

  • 使用道具: 当玩家点击道具时,执行相应的操作。

6. 总结

通过这个简单的示例,我们学习了如何在 Unity 中初始化一个背包系统。这个系统可以作为游戏开发的基础,帮助你更好地管理和使用游戏中的道具。希望这篇博客对你有所帮助,祝你在 Unity 游戏开发中取得成功!


参考资料:

  • Unity 官方文档: Unity - Manual: Unity 6 User Manual

  • TMPro 官方文档: TextMesh Pro User Guide | TextMeshPro | 3.0.9

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

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

相关文章

AI工业大模型报告:体系架构、关键技术与典型应用

研究意义 随着新一代人工智能的发展, 大模型&#xff08;如 GPT-4o 等&#xff09;凭借大规模训练数据、网络参数和算 力涌现出强大的生成能力、泛化能力和自然交互能力, 展现出改变工业世界的巨大潜力. 尽管大模型 已在自然语言等多个领域取得突破性进展, 但其在工业应用中的…

电子电气架构 --- 电动汽车 800V 高压系统

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 所有人的看法和评价都是暂时的&#xff0c;只有自己的经历是伴随一生的&#xff0c;几乎所有的担忧和畏惧…

shell编程之变量与引用

目录 深入认识变量什么是变量变量的名称变量数据类型变量的定义自定义变量环境变量位置变量 变量赋值和作用域赋值&#xff1a;变量名变量值read从键盘读入变量值变量和引号变量的作用域变量的运算 深入认识变量 什么是变量 变量是在程序中保存用户数据的一段内存存储空间&am…

UE5 材质里面画圆锯齿严重的问题

直接这么画圆会带来锯齿&#xff0c;我们对锯齿位置进行模糊 可以用smoothstep&#xff0c;做值的平滑过渡&#xff08;虽然不是模糊&#xff0c;但是类似&#xff09;

鸿蒙HarmonyOS开发:一次开发,多端部署(工程级)三层工程架构

文章目录 一、工程创建1、先创建出最基本的项目工程。2、新建common、features、 products 目录 二、工程结构三、依赖关系1、oh-package.json52、配置ohpm包依赖 四、引用ohpm包中的代码1、定义共享资源2、在common模块index文件中导出3、在phone模块oh-package.json5文件中引…

【笔记】关于git和GitHub和git bash

如何推送更新的代码到github仓库 如何在此项目已经提交在别的远程仓库的基础上更改远程仓库地址&#xff08;也就是换一个远程仓库提交&#xff09; 如何删除github中的一个文件 第二版 删除github上的一个仓库或者仓库里面的某个文件_github仓库删除一个文件好麻烦-CSDN博客 …

20241112-Pycharm使用托管的Anaconda的Jupyter Notebook

Pycharm使用托管的Anaconda的Jupyter Notebook 要求 不要每次使用 Pycharm 运行 Jupyter 文件时都要手动打开 Anaconda 的 Jupyter Notebook 正文 pycharm中配置好会自动安装的&#xff0c;有的要自己配置 Pycharm中配置 文件 ——> 设置 ——> 语言和框架……&am…

集合的介绍与比较器的应用

1.集合&#xff1a; 是一种容器&#xff0c;一种变量类型&#xff0c;跟数组很像 数组的缺点&#xff1a; A.数组的空间长度固定&#xff0c;一旦确定不可以更改。多了浪费&#xff0c;少了报错。 B.使用数组 操作数据的时候&#xff0c;【删除&#xff0c;增加】效率比较低。…

动态规划---解决多段图问题

ok 小伙伴们&#xff0c;我现在有点小小的红温&#xff0c;有点毛躁。 怎么解决多段图问题呢&#xff1f;求取最短路径有多种方法可取。 家人们&#xff0c;毫无思绪可言……………………………… 要实现动态规划&#xff0c;条件&#xff1a;子问题重叠度较高&#xff0c;并…

基于Spring Boot的在线性格测试系统设计与实现(源码+定制+开发)智能性格测试与用户个性分析平台、在线心理测评系统的开发、性格测试与个性数据管理系统

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

cMake编译github中源码

https://github.com/gflags/gflags 记录一下防止遗忘&#xff0c;本次编译为gflags库 1.下载CMake-gui https://cmake.org/ 安装时&#xff0c;选择自动创建环境变量&#xff0c;安装完输入&#xff0c;查看是否安装成功 cmake --version 2.下载源码&#xff0c;解压打开文…

web——upload-labs——第四关——.htaccess文件绕过

先尝试直接上传一个普通的一句话木马 显示此文件不允许上传&#xff0c;这道题并没有提示不允许上传什么后缀的文件&#xff0c;经过尝试&#xff0c;基本上所有后缀能够被解析为php语句执行的文件都不能成功上传。试试正常的图片能不能上传&#xff1a; 我们再来试试图片马能不…

Gitcode文件历史记录查看和还原

文件历史记录 文件历史记录用于记录代码文件的更改历史&#xff0c;它允许用户查看文件的不同版本&#xff0c;了解每个版本的修改内容、作者和提交消息。这对于跟踪文件演进、恢复错误更改、审查代码以及了解项目进展都非常有用。 文件历史记录功能提供了以下核心功能&#…

前端神经网络入门(二):如何利用 WebGPU 进行数值计算,实现大规模数据的计算加速?- 边读边按下F12跑代码吧

在 Web 应用开发中&#xff0c;JavaScript 是前端开发者们最常用的语言。然而&#xff0c;当面对大规模数据处理和计算任务时&#xff0c;JavaScript 在浏览器中的执行往往会受到诸多性能瓶颈的限制。幸运的是&#xff0c;WebGPU 的出现&#xff0c;为我们提供了在前端实现高性…

新手教学系列——善用 VSCode 工作区,让开发更高效

引言 作为一名开发者,你是否曾经在项目中频繁地切换不同文件夹,打开无数个 VSCode 窗口?特别是当你同时参与多个项目或者处理多个模块时,这种情况更是家常便饭。很快,你的任务栏上挤满了 VSCode 的小图标,切换起来手忙脚乱,工作效率直线下降。这时候,你可能会问:“有…

Oracle故障处理:ora-12514 与 ora-28547

目录 项目场景 问题分析 问题总结 项目场景 现场同事求助说&#xff1a;有个刚刚部署在Windows上的Oracle11gR2数据库&#xff08;单机单实例&#xff09;&#xff0c;使用PLSQL工具连接不上。帮忙查看后&#xff0c;发现未装Oracle client&#xff0c;指导其安装完Oracle客…

【miniMax开放平台-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被机器执行自动化程序攻击&#xff0c;存在如下风险&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露&#xff0c;不符合国家等级保护的要求。短信盗刷带来的拒绝服务风险 &#xff0c;造成用户无法登陆、注册&#xff0c;大量收到垃圾短信的…

26-ES集群搭建、身份认证配置

虚机搭建 添加es用户 elasticsearch 默认不允许root用户启动&#xff0c;所以需要创建es用户 useradd elasticsearch passwd elasticsearch 解压安装包 #解压es tar -xvzf elasticsearch-7.14.2-linux-x86_64.tar.gz 将文件夹赋予es用户权限 #将文件夹赋予es用户权限 sud…

OpenHarmony的公共事件

OpenHarmony的公共事件 公共事件简介 CES&#xff08;Common Event Service&#xff0c;公共事件服务&#xff09;为应用程序提供订阅、发布、退订公共事件的能力。 公共事件分类 公共事件从系统角度可分为&#xff1a;系统公共事件和自定义公共事件。 系统公共事件&#…

【AlphaFold3】开源本地的安装及使用

文章目录 安装安装DockerInstalling Docker on Host启用Rootless Docker 安装 GPU 支持安装 NVIDIA 驱动程序安装 NVIDIA 对 Docker 的支持 获取 AlphaFold 3 源代码获取基因数据库获取模型参数构建将运行 AlphaFold 3 的 Docker 容器 参考 AlphaFold3: https://github.com/goo…