被墙域名黑别人网站,菏泽注册公司流程和费用,网站做信息流,抖音营销推广方案详细程序逻辑过程 初始化物品栏#xff1a; 在 Awake 方法中#xff0c;通过标签找到提示框和信息面板。 循环生成10个背包格子#xff0c;并为每个格子设置图标和名称。 为每个格子添加 UInterMaager232 脚本#xff0c;以便处理交互事件。 关闭提示框和信息面板#…
详细程序逻辑过程 初始化物品栏 在 Awake 方法中通过标签找到提示框和信息面板。 循环生成10个背包格子并为每个格子设置图标和名称。 为每个格子添加 UInterMaager232 脚本以便处理交互事件。 关闭提示框和信息面板 在 Start 方法中如果提示框和信息面板在启动时是激活状态则关闭它们。 鼠标滑入道具显示提示框 在 OnPointerEnter 方法中调用 MoveTip 方法将提示框移动到鼠标位置。 如果提示框未激活则激活它。 鼠标滑出道具关闭提示框 在 OnPointerExit 方法中如果提示框激活则关闭它。 鼠标点击道具显示信息面板 在 OnPointerClick 方法中关闭提示框。 切换信息面板的显示状态。 移动提示框到鼠标位置 在 MoveTip 方法中获取提示框的 RectTransform 组件。 获取鼠标的屏幕坐标并将其转换为画布坐标。 计算提示框在鼠标右下角的偏移量并设置提示框的位置。
通过以上步骤我们实现了一个简单的背包系统并详细讲解了每个步骤的逻辑过程。 初始化物品栏在游戏启动时自动生成一些初始物品。 拾取物体到背包暂时不实现但可以扩展。 鼠标放在道具上展示道具信息当鼠标滑入道具时显示道具的提示框。 鼠标点击道具展示道具信息当鼠标点击道具时显示道具的详细信息面板。
我们将通过两个脚本来实现这些功能InventoryManager 和 UInterMaager232。
1. InventoryManager 脚本
InventoryManager 脚本负责初始化背包界面并在游戏启动时生成一些初始物品。
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];// 提示框和信息面板[SerializeField]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);}}
}
2. UInterMaager232 脚本
UInterMaager232 脚本负责处理道具的交互事件包括鼠标滑入、点击和滑出事件。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;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);}}// 当鼠标滑入道具时触发public void OnPointerEnter(PointerEventData eventData){Debug.Log(鼠标滑入了);// 移动提示框到鼠标位置MoveTip();// 如果提示框未激活则激活它if (!InventoryManager.OneTip.activeSelf){InventoryManager.OneTip.SetActive(true);}}// 当鼠标滑出道具时触发public void OnPointerExit(PointerEventData eventData){// 如果提示框激活则关闭它if (InventoryManager.OneTip.activeSelf){InventoryManager.OneTip.SetActive(false);}}// 移动提示框到鼠标位置void MoveTip(){// 获取提示框的RectTransformRectTransform 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;}
}
详细解释
InventoryManager 脚本 变量声明 GridMuban背包格子的模板。 GridParentTrans背包格子的父对象。 oneIamge道具的图标数组。 Name道具的名称数组。 OneTip 和 InfoRect提示框和信息面板的静态引用。 Awake 方法 通过标签找到提示框和信息面板。 初始化背包界面生成10个道具格子并设置每个格子的图标和名称。 为每个格子添加 UInterMaager232 脚本以便处理交互事件。 Start 方法 如果提示框和信息面板在启动时是激活状态则关闭它们。
UInterMaager232 脚本 接口实现 IPointerEnterHandler处理鼠标滑入事件。 IPointerClickHandler处理鼠标点击事件。 IPointerExitHandler处理鼠标滑出事件。 OnPointerClick 方法 关闭提示框。 切换信息面板的显示状态。 OnPointerEnter 方法 移动提示框到鼠标位置。 如果提示框未激活则激活它。 OnPointerExit 方法 如果提示框激活则关闭它。 MoveTip 方法 获取提示框的 RectTransform。 获取鼠标在屏幕上的位置。 将屏幕坐标转换为画布坐标。 计算提示框在鼠标右下角的位置。 设置提示框的位置。
总结
通过以上两个脚本我们实现了一个简单的背包系统包括初始化物品栏、鼠标滑入显示提示框、鼠标点击显示信息面板等功能。你可以根据需要进一步扩展这个系统例如添加物品拾取、物品使用等功能。
使用本教程前先学习
【UGUI】事件侦听EventSystem系统0学-CSDN博客文章浏览阅读1.4k次点赞23次收藏23次。实现它主要有三个核心组件当谈论这些组件时我们实际上是在谈论游戏中管理事件和交互的“守护神”。让我生动地为你解释一下这三个组件的作用️ **BaseRaycaster图形光线投射器**它是一个基础的射线投射器用于确定用户点击的目标对象。Unity提供了一些默认的射线投射器比如PhysicsRaycaster用于3D物体、Physics2DRaycaster用于2D物体和GraphicRaycaster用于UI元素。如果你有特殊需求也可以自定义你自己的射线投射器。_eventsystemhttps://blog.csdn.net/leoysq/article/details/134693945?ops_request_misc%257B%2522request%255Fid%2522%253A%2522E96802B4-FB66-43F2-9AC5-A9F757EFDC88%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257Drequest_idE96802B4-FB66-43F2-9AC5-A9F757EFDC88biz_id0utm_mediumdistribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-11-134693945-null-null.nonecaseutm_termUGUIspm1018.2226.3001.4450