目录

  • 系列文章目录
  • 前言
  • 1代码
    • 1.1
    • 1.2
    • 1.3
    • 1.4
  • 2 总结

系列文章目录

迷失岛游戏框架开发个人每集总结(第一期)
迷失岛游戏框架开发个人每集总结(第二期)

前言

在上一期中,我们实现通过鼠标点击带有“item”标签的物体后,取消该物体的显示,获取该物品的名称,并将其储存到类型为itemname的列表itemList中。

这次要实现的是讲鼠标点击后的图片传入到UI里的(image)slot中,使刚被点击的物体能在UI中显示,并且在鼠标触碰到slot时,显示当时slot显示的图片的名称。以及能够实现点击UI中的左右按钮是能产生效果 。

1代码

1.1

InventoryUI

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;//用于使用ui
public class InventoryUI : MonoBehaviour
{public Button leftButton, rightButton;public SlotUI slotUI;public int currentIndex;//显示UI当前序号,如果是第一个物品的序号,则左按键不可动,//如果是最后一个物品的序号则右按键不可动,无物品则两个按键都不可动private void OnEnable(){EventHandler.updateUIEvent += OnUpdateUIEvent;//订阅OnUpdateUIEvent这个事件}private void OnDisable(){EventHandler.updateUIEvent -= OnUpdateUIEvent;}private void OnUpdateUIEvent(ItemDetails itemDetails ,int index){if (itemDetails == null)//物品信息为空{slotUI.SetEmpty();currentIndex = -1;leftButton.interactable = false;rightButton.interactable = false;}else{currentIndex = index;slotUI.SetItem(itemDetails);}}}

1.2

SlotUI

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;public class SlotUI : MonoBehaviour, IPointerClickHandler, IPointerEnterHandler, IPointerExitHandler//接口
{public Image itemImage;public ItemTooltip tooltip;private ItemDetails currentItem;//储存当前的物品信息private bool isSelected; //实现点击了slotUI后确定该物品被选中了(因为玩家要使用UI里的道具)public void SetItem(ItemDetails itemDetails)//用于显示slot应该是什么物品图片{currentItem = itemDetails;this.gameObject.SetActive(true); itemImage.sprite = itemDetails.itemSprite;itemImage.SetNativeSize();}public void SetEmpty()//一开始背包里没有物体,隐藏物体{this.gameObject.SetActive(false);isSelected = false;}
}

为什么取名交slotUI
slotUI 是一个游戏开发中常见的术语,通常指代在游戏界面中用于显示和管理物品槽(Inventory Slot)的
用户界面元素(User Interface)。

物品槽是指玩家的背包、物品栏、装备栏等部分,这些部分通常由一系列的格子组成,用于存放、管理、拖放
不同类别的游戏物品。
而 slotUI 则是针对这些物品槽设计的一种 UI 界面,主要目的是在游戏中方便玩家管理自己的物品,提供更好的
可视化交互体验。

slotUI 的具体实现通常有多种方式,可以是简单的用纹理图片模拟物品槽,也可以是更为复杂的使用 Unity 引擎
的 UI 系统制作可交互的物品槽。
在实现 slotUI 的过程中,需要考虑到物品槽的大小、排列方式、放置限制等因素,以及与游戏系统的逻辑关联,以确保游戏体验的稳定性和流畅性。

方法setItem的解释

  传递物品的名字然后返回itemDetails然后传给UI,让UI能显示currentItem = itemDetails; 这行代码将传入的物品详细信息(ItemDetails)赋值给当前物品(currentItem)。this.gameObject.SetActive(true); 这行代码将该脚本所在的游戏对象(gameObject)设为激活状态,以便在游戏中显示该物品。itemImage.sprite = itemDetails.itemSprite; 这行代码将物品详细信息中的物品图片(itemSprite)赋值给UI中的物品图片(itemImage.sprite)。itemImage.SetNativeSize(); 这行代码将UI中的物品图片按照原始尺寸设置大小,以确保物品图片显示的正确性。

1.3

创建一个事件中心,把数据通过事件订阅来传递给各个订阅了该事件的方法。

EventHandler

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class EventHandler : MonoBehaviour
{   //可以把需要读这些数据的代码都订阅到这个事件里面来,同时也需要呼叫//把数据通过订阅的方式来传递到各个代码当中去执行各自的函数方法public static event Action<ItemDetails, int> updateUIEvent;//呼叫(触发)该事件获取数据,并且订阅了该事件的代码会执行各自的方法public static void CallUpdateUIEvent(ItemDetails itemDetails,int index){updateUIEvent?.Invoke(itemDetails, index);}
}

什么是呼叫
在 Unity 中,呼叫指的是调用或触发事件中注册的委托或函数的过程。在 Unity 的事件系统中,常常会使用 UnityEvent 类型来定义和管理事件。通过将需要执行的委托或函数注册到 UnityEvent 实例中,当该事件被触发时,就会依次对注册的委托或函数进行呼叫(即调用)。

public static event Action<ItemDetails, int> updateUIEvent; 这行代码定义了一个名为updateUIEvent的静态事件,事件类型为Action<ItemDetails, int>,即携带两个参数,分别是物品详细信息(ItemDetails)和索引(int)。其他代码可以通过订阅这个事件来获取这些参数。public static void CallUpdateUIEvent(ItemDetails itemDetails,int index) 这行代码定义了一个名为CallUpdateUIEvent的静态方法,用于在其他代码中调用updateUIEvent事件,并传递两个参数:物品详细信息(itemDetails)和索引(index)。总体来说,这段代码的作用是定义了一个事件和一个方法,用于在不同的代码模块之间传递物品详细信息和索引,以便实现不同模块之间的数据交互。其他代码可以通过订阅事件或调用方法来获取这些数据。

1.4

InventoryManager

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//单例模式
public class IventoryManager :Singleton<IventoryManager>//单例模式
{public ItemDataList itemData;//创建一个数据的类型来储存我当前所持有的物品[SerializeField] private List<ItemName> itemList = new List<ItemName>();//实现一个添加物品的方法,传进物品的名字public void AddItem(ItemName itemName){if(!itemList.Contains(itemName)){itemList.Add(itemName);//UI对应显示EventHandler.CallUpdateUIEvent(itemData.GetItemDetails(itemName), itemList.Count - 1);//呼叫事件调用}}private int GetItemIndex(ItemName itemName){for(int i=0;i<itemList.Count;i++){if (itemList[i] == itemName)return i;}return -1;}
}

2 总结

主要是为了厘清代码思路,主要是没有接触过事件订阅,刚开始很懵,现在多看几遍后就有些明白了。

【迷失岛游戏框架开发个人每集总结(第三期)】相关推荐

  1. 【迷失岛游戏框架开发个人每集总结(第四期)】

    目录 系列文章目录 前言 1 1.1 1.2 1.3 2 总结 系列文章目录 迷失岛游戏框架开发个人每集总结(第一期) 迷失岛游戏框架开发个人每集总结(第二期) 迷失岛游戏框架开发个人每集总结(第三期 ...

  2. 《迷失岛2》游戏开发框架开发日记:场景切换和淡入淡出效果

    M_Studio的教程:[<迷失岛2>游戏框架开发01:实现场景转换|Unity教程] 搭建场景 使用下载好的素材搭建场景H1-H4和H2A.永久的场景Persistent,将场景都拖拽到 ...

  3. 基于Volcano 3D游戏引擎开发一个类似魔兽世界的场景

    VOLCANO MMORPG 3D游戏引擎简介 1.基本介绍:http://volcano2014.cn/ VOLCANO是一款MMORPG(大型多人在线角色扮演)3D网络游戏的开发引擎,用作支持用户 ...

  4. 如何构建自己的游戏框架并且制作游戏

    这个教程就让我们学习怎么用这个游戏框架开发一个简单的空战游戏吧!由于素材有限,都是用的网上的素材.这个游戏可以改造成为空战或者植物大战僵尸等的养成类型游戏或者更多,原理都差不多.    一个出类拔萃的 ...

  5. 【CSON原创】HTML5游戏框架cnGameJS开发实录(外部输入模块篇)

    返回目录 1.为什么我们需要外部输入模块? 在游戏中我们常常用到类似这样的操作:鼠标点击某位置,玩家对象移动到该位置,或者按鼠标方向键,玩家向不同方向移动,等等.这些操作无一不用与外部输入设备打交道. ...

  6. arduino nano 蓝牙_探索 Golang 云原生游戏服务器开发,5 分钟上手 Nano 游戏服务器框架...

    介绍 Nano 是什么? 轻量级,方便,高性能 golang 的游戏服务器框架. nano 是一个轻量级的服务器框架,它最适合的应用领域是网页游戏.社交游戏.移动游戏的服务端.当然还不仅仅是游戏,用  ...

  7. 【CSON原创】HTML5游戏框架cnGameJS开发实录(精灵对象篇)

    返回目录 1.什么是精灵对象(sprite)? 所谓的精灵对象,就是游戏中的一个具有行为的元素,以超级玛丽为例,玛丽,敌人都算是一个精灵对象.在cnGameJS框架中,精灵对象如下几个特点: 1.添加 ...

  8. 【CSON原创】HTML5游戏框架cnGameJS开发实录

    cnGameJS是本人开发的一个基于HTML5的游戏框架,包括资源加载,碰撞检测,动画等模块.本系列文章主要介绍各个模块的开发流程,以及附上两个使用该框架进行开发的游戏demo. 目录: 1.核心函数 ...

  9. 【读书笔记《Android游戏编程之从零开始》】11.游戏开发基础(SurfaceView 游戏框架、View 和 SurfaceView 的区别)...

    1. SurfaceView 游戏框架实例 实例效果:就是屏幕上的文本跟着点击的地方移动,效果图如下: 步骤: 新建项目"GameSurfaceView",首先自定义一个类&quo ...

最新文章

  1. jquery对ajax的支持
  2. 在VB.NET中应用SQLDMO
  3. 这个微型机器人可以在人体内“游泳”
  4. 我写了10年博客,却被人说“不火”?我是这样怼回去的?
  5. mysql 修改引擎_修改MySQL的数据库引擎为INNODB的方法
  6. ACCESS自动编号清零
  7. ML/DL-复习笔记【八】- 信息熵与相对熵(KL散度)
  8. Web信息收集,互联网上的裸奔者
  9. 思想茶叶蛋 (Aug 20,2022)| 网传B站hr说用户是loser、互联网之父的救赎和Web3.0
  10. python导入数据画直方图加正态曲线_用python制作正态分布图
  11. 前端生成pdf的js库-pdfmake.js的简单使用
  12. 2021.11.8-11.14 AI行业周刊(第71期):AI行业经验
  13. 【Homeassistant 与Ultrasonic Distance超声波距离传感器握手】
  14. Java返回Json文件
  15. java智能家居_基于JAVA的智能家居控制系统的设计(毕业设计).doc
  16. 30 秒看懂,如何建立一个免费的个人主页
  17. DecimalFormat 保留小数格式化
  18. 青岛大学计算机组成与结构,青岛大学计算机组成及结构1-9章作业.docx
  19. android 手机号码运营商判断
  20. 招聘大师v6.7.2

热门文章

  1. android 自动翻页插件,网页自动翻页Chrome插件下载
  2. 一键式免费借还的智能充电宝租赁
  3. 网迅wx1860网卡原理图驱动
  4. 微服务下权限校验方案
  5. 移动宽带frp内网穿透访问家中网络(by quqi99)
  6. 空调弱周期到了!海尔发力空气网,线上线下唯一双增长
  7. 2021年度总结:这一年你过的怎么样?
  8. 强化学习与Deep Q-Network(DQN)
  9. scala编译常见错误
  10. play 1.2.7