当前位置: 首页 > news >正文

深圳外贸响应式网站建设做梯子的企业网站

深圳外贸响应式网站建设,做梯子的企业网站,网站管理员登录,百度小程序官网在游戏开发中#xff0c;背包系统是一个常见的功能模块#xff0c;用于管理玩家拾取的物品。本文将详细介绍如何在 Unity 中实现一个简单的背包系统#xff0c;包括道具信息的提示和显示功能。我们将通过代码和场景搭建来逐步实现这一功能。 1. 功能需求清单 在实现背包系… 在游戏开发中背包系统是一个常见的功能模块用于管理玩家拾取的物品。本文将详细介绍如何在 Unity 中实现一个简单的背包系统包括道具信息的提示和显示功能。我们将通过代码和场景搭建来逐步实现这一功能。 1. 功能需求清单 在实现背包系统时我们需要满足以下功能需求 初始化物品栏在游戏启动时初始化背包界面并添加一些启动物资。 拾取物体到背包玩家可以拾取场景中的物体并将其添加到背包中。 鼠标滑入显示道具信息当鼠标滑入背包中的道具时显示该道具的名称和图标。 鼠标点击显示道具信息当鼠标点击背包中的道具时显示该道具的详细信息。 2. 程序逻辑过程 2.1 初始化物品栏 在游戏启动时我们需要动态生成背包格子并为每个格子设置图标和名称。这些格子将作为道具的容器。 2.2 拾取物体到背包 玩家可以通过某种方式如点击、碰撞等拾取场景中的物体并将其添加到背包中。这个功能可以通过扩展代码来实现本文暂不详细讨论。 2.3 鼠标滑入显示道具信息 当鼠标滑入某个道具格子时我们需要显示一个提示框提示框中包含该道具的名称和图标。提示框的位置需要跟随鼠标移动。 2.4 鼠标点击显示道具信息 当鼠标点击某个道具格子时我们需要显示一个详细信息面板面板中包含该道具的名称和图标。 3. 必要的场景搭建 在 Unity 中我们需要搭建一个简单的场景来测试背包系统。场景中需要包含以下元素 Canvas用于显示 UI 元素。 Grid Layout Group用于排列背包格子。 提示框和信息面板用于显示道具信息。 道具格子模板用于动态生成背包格子。 4.代码步骤解释 ## 1. 初始化物品栏 ### 代码片段 csharp private void Awake() {     // 通过标签找到提示框和信息面板     OneTip GameObject.FindGameObjectWithTag(OneTip);     InfoRect GameObject.FindGameObjectWithTag(InfoRect); // 初始化系统数据     for (int i 0; i 10; i)     {         GameObject TempCloneGrid GameObject.Instantiate(GridMuban, GridParentTrans);         // 修改道具的图标         TempCloneGrid.transform.GetChild(0).GetChild(0).GetComponentImage().sprite oneIamge[i];         // 修改道具的名字         TempCloneGrid.transform.GetChild(1).GetChild(0).GetComponentTextMeshProUGUI().text Name[i];         // 为每个道具添加侦听功能         TempCloneGrid.AddComponentUInterMaager232();     } } ### 解释 1. **查找提示框和信息面板**    csharp    OneTip GameObject.FindGameObjectWithTag(OneTip);    InfoRect GameObject.FindGameObjectWithTag(InfoRect);        通过 GameObject.FindGameObjectWithTag 方法查找场景中带有特定标签的对象分别赋值给 OneTip 和 InfoRect。 2. **动态生成背包格子**    csharp    for (int i 0; i 10; i)    {        GameObject TempCloneGrid GameObject.Instantiate(GridMuban, GridParentTrans);        循环生成 10 个背包格子使用 GameObject.Instantiate 方法克隆 GridMuban 模板并将其父物体设置为 GridParentTrans。 3. **修改道具的图标**    csharp    TempCloneGrid.transform.GetChild(0).GetChild(0).GetComponentImage().sprite oneIamge[i];        获取克隆的格子的子物体的子物体的 Image 组件并设置其 sprite 属性为 oneIamge 数组中的对应图标。 4. **修改道具的名字**    csharp    TempCloneGrid.transform.GetChild(1).GetChild(0).GetComponentTextMeshProUGUI().text Name[i];        获取克隆的格子的子物体的子物体的 TextMeshProUGUI 组件并设置其 text 属性为 Name 数组中的对应名称。 5. 添加交互管理脚本**      TempCloneGrid.AddComponentUInterMaager232();        为每个克隆的格子添加 UInterMaager232 脚本以便处理交互事件。 2. 鼠标滑入显示道具信息 代码片段 public void OnPointerEnter(PointerEventData eventData) {     Debug.Log(鼠标滑入了);     MoveTip();     // 显示提示框并设置内容     if (!InventoryManager.OneTip.activeSelf)     {         InventoryManager.OneTip.SetActive(true);         InventoryManager.OneTip.transform.GetChild(0).GetComponentTextMeshProUGUI().text this.transform.GetChild(1).GetChild(0).GetComponentTextMeshProUGUI().text;         InventoryManager.OneTip.transform.GetChild(1).GetComponentImage().sprite this.transform.GetChild(0).GetChild(0).GetComponentImage().sprite;     } } 解释 1. **显示提示框**    if (!InventoryManager.OneTip.activeSelf)    {        InventoryManager.OneTip.SetActive(true);        检查提示框是否处于激活状态如果未激活则激活提示框。 2. **设置提示框内容**    csharp    InventoryManager.OneTip.transform.GetChild(0).GetComponentTextMeshProUGUI().text this.transform.GetChild(1).GetChild(0).GetComponentTextMeshProUGUI().text;    InventoryManager.OneTip.transform.GetChild(1).GetComponentImage().sprite this.transform.GetChild(0).GetChild(0).GetComponentImage().sprite;        设置提示框中的文本和图标使其与鼠标滑入的道具格子内容一致。 3. **跟随鼠标移动**    csharp    MoveTip();        调用 MoveTip 方法使提示框跟随鼠标移动。 ## 3. 鼠标点击显示道具信息 ### 代码片段 csharp public void OnPointerClick(PointerEventData eventData) {     // 关闭提示框     InventoryManager.OneTip.SetActive(false);     Debug.Log(鼠标点击了); // 切换信息面板的显示状态     if (InventoryManager.InfoRect.activeSelf)     {         InventoryManager.InfoRect.SetActive(false);     }     else     {         InventoryManager.InfoRect.SetActive(true);         // 设置信息面板的内容         InventoryManager.InfoRect.transform.GetChild(0).GetComponentTextMeshProUGUI().text this.transform.GetChild(1).GetChild(0).GetComponentTextMeshProUGUI().text;         InventoryManager.InfoRect.transform.GetChild(1).GetComponentImage().sprite this.transform.GetChild(0).GetChild(0).GetComponentImage().sprite;     } }   解释 1. **关闭提示框**    csharp    InventoryManager.OneTip.SetActive(false);        关闭提示框避免与信息面板重叠。 2. **切换信息面板的显示状态**    csharp    if (InventoryManager.InfoRect.activeSelf)    {        InventoryManager.InfoRect.SetActive(false);    }    else    {        InventoryManager.InfoRect.SetActive(true);        检查信息面板是否处于激活状态如果已激活则隐藏否则显示信息面板。 3. **设置信息面板内容**    csharp    InventoryManager.InfoRect.transform.GetChild(0).GetComponentTextMeshProUGUI().text this.transform.GetChild(1).GetChild(0).GetComponentTextMeshProUGUI().text;    InventoryManager.InfoRect.transform.GetChild(1).GetComponentImage().sprite this.transform.GetChild(0).GetChild(0).GetComponentImage().sprite;        设置信息面板中的文本和图标使其与鼠标点击的道具格子内容一致。 ## 4. 提示框跟随鼠标移动 ### 代码片段 csharp void MoveTip() {     RectTransform TipObject InventoryManager.OneTip.GetComponentRectTransform(); // 获取鼠标在屏幕上的位置     Vector3 mousePosition Input.mousePosition; // 将屏幕坐标转换为画布坐标     Vector2 canvasPosition;     RectTransformUtility.ScreenPointToLocalPointInRectangle(         TipObject.parent as RectTransform, // 使用父对象的RectTransform         mousePosition,         null, // 如果Canvas是Overlay模式可以传null         out canvasPosition); // 计算对象在鼠标右下角的位置     Vector2 offset new Vector2(TipObject.rect.width / 2, -TipObject.rect.height / 2f); // 右下角偏移 // 设置对象的位置     TipObject.localPosition canvasPosition offset; } ### 解释 1. **获取鼠标位置**    csharp    Vector3 mousePosition Input.mousePosition;        获取鼠标在屏幕上的位置。 2. **转换坐标**    csharp    RectTransformUtility.ScreenPointToLocalPointInRectangle(        TipObject.parent as RectTransform, // 使用父对象的RectTransform        mousePosition,        null, // 如果Canvas是Overlay模式可以传null        out canvasPosition);        将屏幕坐标转换为画布坐标。 3. **计算偏移**    csharp    Vector2 offset new Vector2(TipObject.rect.width / 2, -TipObject.rect.height / 2f); // 右下角偏移        计算提示框在鼠标右下角的位置偏移。 4. **设置位置**    csharp    TipObject.localPosition canvasPosition offset;        设置提示框的位置使其跟随鼠标移动。 ## 总结 通过以上步骤和代码解释我们实现了一个简单的背包系统包括道具信息的提示和显示功能。通过动态生成背包格子、处理鼠标事件我们可以在 Unity 中轻松实现这一功能。希望本文对你在 Unity 中开发背包系统有所帮助。 5. 完整代码 注释 5.1 InventoryManager.cs using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TMPro;public class InventoryManager : MonoBehaviour {public GameObject GridMuban; // 背包格子模板public Transform GridParentTrans; // 背包格子的父物体public Sprite[] oneIamge new Sprite[10]; // 道具图标数组public string[] Name new string[10]; // 道具名称数组public static GameObject OneTip; // 提示框public static GameObject InfoRect; // 信息面板private void Awake(){// 通过标签找到提示框和信息面板OneTip GameObject.FindGameObjectWithTag(OneTip);InfoRect GameObject.FindGameObjectWithTag(InfoRect);// 初始化系统数据for (int i 0; i 10; i){GameObject TempCloneGrid GameObject.Instantiate(GridMuban, GridParentTrans);// 修改道具的图标TempCloneGrid.transform.GetChild(0).GetChild(0).GetComponentImage().sprite oneIamge[i];// 修改道具的名字TempCloneGrid.transform.GetChild(1).GetChild(0).GetComponentTextMeshProUGUI().text Name[i];// 为每个道具添加侦听功能TempCloneGrid.AddComponentUInterMaager232();}}private void Start(){// 初始状态下隐藏提示框和信息面板if (OneTip.activeSelf){OneTip.SetActive(false);}if (InfoRect.activeSelf){InfoRect.SetActive(false);}} } 5.2 UInterMaager232.cs using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using TMPro; using UnityEngine.UI;public class UInterMaager232 : MonoBehaviour, IPointerEnterHandler, IPointerClickHandler, IPointerExitHandler {public void OnPointerClick(PointerEventData eventData){// 关闭提示框InventoryManager.OneTip.SetActive(false);Debug.Log(鼠标点击了);// 切换信息面板的显示状态if (InventoryManager.InfoRect.activeSelf){InventoryManager.InfoRect.SetActive(false);}else{InventoryManager.InfoRect.SetActive(true);// 设置信息面板的内容InventoryManager.InfoRect.transform.GetChild(0).GetComponentTextMeshProUGUI().text this.transform.GetChild(1).GetChild(0).GetComponentTextMeshProUGUI().text;InventoryManager.InfoRect.transform.GetChild(1).GetComponentImage().sprite this.transform.GetChild(0).GetChild(0).GetComponentImage().sprite;}}public void OnPointerEnter(PointerEventData eventData){Debug.Log(鼠标滑入了);MoveTip();// 显示提示框并设置内容if (!InventoryManager.OneTip.activeSelf){InventoryManager.OneTip.SetActive(true);InventoryManager.OneTip.transform.GetChild(0).GetComponentTextMeshProUGUI().text this.transform.GetChild(1).GetChild(0).GetComponentTextMeshProUGUI().text;InventoryManager.OneTip.transform.GetChild(1).GetComponentImage().sprite this.transform.GetChild(0).GetChild(0).GetComponentImage().sprite;}}public void OnPointerExit(PointerEventData eventData){// 关闭提示框if (InventoryManager.OneTip.activeSelf){InventoryManager.OneTip.SetActive(false);}}void MoveTip(){RectTransform TipObject InventoryManager.OneTip.GetComponentRectTransform();// 获取鼠标在屏幕上的位置Vector3 mousePosition Input.mousePosition;// 将屏幕坐标转换为画布坐标Vector2 canvasPosition;RectTransformUtility.ScreenPointToLocalPointInRectangle(TipObject.parent as RectTransform, // 使用父对象的RectTransformmousePosition,null, // 如果Canvas是Overlay模式可以传nullout canvasPosition);// 计算对象在鼠标右下角的位置Vector2 offset new Vector2(TipObject.rect.width / 2, -TipObject.rect.height / 2f); // 右下角偏移// 设置对象的位置TipObject.localPosition canvasPosition offset;} } 6. 脚本挂载和赋值 6.1 场景搭建 Canvas在场景中创建一个 Canvas用于显示 UI 元素。 Grid Layout Group在 Canvas 下创建一个 Panel并添加 Grid Layout Group 组件用于排列背包格子。 提示框和信息面板在 Canvas 下创建两个 Panel分别命名为 OneTip 和 InfoRect并分别添加 TextMeshPro 和 Image 组件。 道具格子模板在 Canvas 下创建一个 Panel命名为 GridMuban并添加 Image 和 TextMeshPro 组件用于显示道具的图标和名称。 6.2 脚本挂载 InventoryManager将 InventoryManager 脚本挂载到 Canvas 上并将 GridMuban、GridParentTrans、oneIamge 和 Name 字段赋值。 UInterMaager232该脚本会自动挂载到每个生成的背包格子上无需手动挂载。 6.3 赋值 GridMuban将 GridMuban 对象拖拽到 InventoryManager 脚本的 GridMuban 字段。 GridParentTrans将 GridParentTrans 对象拖拽到 InventoryManager 脚本的 GridParentTrans 字段。 oneIamge将道具图标拖拽到 InventoryManager 脚本的 oneIamge 数组中。 Name将道具名称填入 InventoryManager 脚本的 Name 数组中。 总结 通过以上步骤我们实现了一个简单的背包系统包括道具信息的提示和显示功能。通过动态生成背包格子、处理鼠标事件我们可以在 Unity 中轻松实现这一功能。希望本文对你在 Unity 中开发背包系统有所帮助。
http://www.w-s-a.com/news/955710/

相关文章:

  • 南充做网站略奥网络免费的正能量视频素材网站
  • 电子商务网站开发的基本原则汕头网站制作流程
  • 网站访问量突然增加合肥宣传片制作公司六维时空
  • 建设购物网站流程图怎么找网站
  • 阿里云部署多个网站制作小程序网站源码
  • 博罗东莞网站建设网站免费源代码
  • 网站规划与设计范文桂平网站建设
  • 网站备案号密码wordpress邮箱发送信息错误
  • 模板的网站都有哪些关键词搜索工具爱站网
  • 鲜花网站建设的利息分析企业网站建设方案书
  • 深圳网站平台石家庄做商城网站的公司
  • 微网站营销是什么私人订制网站有哪些
  • 浙江建设工程合同备案网站新手做网站教程
  • 网站优化关键词排名自己怎么做wordpress安装主题失败
  • 成都建设银行招聘网站网站的切换语言都是怎么做的
  • 网站网业设计wordpress 很差
  • 网站开发软件著作权归谁网站悬浮窗广告
  • 如何提升网站alexa排名货运网站源码
  • 如何看自己网站流量梧州网站设计理念
  • 商城网站建设特点有哪些信息门户
  • 弄一个网站临沂有哪几家做网站的
  • 广州个人网站制作公司网站建设公司价
  • 免费建设网站赚钱小程序开发文档pdf
  • ucenter 整合两个数据库网站网店推广技巧
  • 网站优化排名提升百度wap
  • 八里河风景区网站建设内容摘要网站开发基础学习
  • 上海做外贸网站的公司智慧团建网站登陆平台
  • 上海商务网站建设如何做的网站手机可以用吗
  • 产品推广营销方案seo推广员招聘
  • 做水利网站需要多少钱山东市网站建设