Unity类银河恶魔城学习记录12-4 p126 Item Tooltip源代码

2024-04-06 05:52

本文主要是介绍Unity类银河恶魔城学习记录12-4 p126 Item Tooltip源代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考
此代码仅为较上一P有所改变的代码

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili

UI.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class UI : MonoBehaviour
{[SerializeField] private GameObject characterUI;public UI_itemTooltip itemTooltip;public void Start(){itemTooltip = characterUI.GetComponentInChildren<UI_itemTooltip>();}public void SwitchTo(GameObject _menu){for(int i = 0;i < transform.childCount;i++){transform.GetChild(i).gameObject.SetActive(false);}if(_menu != null){_menu.SetActive(true);}}
}

UI_itemTooltip.cs
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;public class UI_itemTooltip : MonoBehaviour
{[SerializeField] private TextMeshProUGUI itemNameText;[SerializeField] private TextMeshProUGUI itemTypeText;[SerializeField] private TextMeshProUGUI itemDescription;[SerializeField] private int defaultFontSize = 32;public void ShowToolTip(ItemData_Equipment item)//将item里面的数据读取到对应的text上并显示此组件{if (item == null)return;itemNameText.text = item.itemName;itemTypeText.text = item.equipmentType.ToString();itemDescription.text = item.GetDescription();if (itemNameText.text.Length > 12)//使标题超过最大尺寸时字体缩小{itemNameText.fontSize = itemNameText.fontSize * .7f;}else{itemNameText.fontSize = defaultFontSize;}gameObject.SetActive(true);}public void HideToolTip()//关闭此组件{itemNameText.fontSize = defaultFontSize;//防止字体越来越小gameObject.SetActive(false);}
}
UI_itemSlot.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using UnityEngine.EventSystems;public class UI_itemSlot : MonoBehaviour ,IPointerDownHandler, IPointerEnterHandler, IPointerExitHandler
{[SerializeField] private Image itemImage;[SerializeField] private TextMeshProUGUI itemText;private UI ui;public InventoryItem item;private void Start(){ui = GetComponentInParent<UI>();}public void UpdateSlots(InventoryItem _newItem){item = _newItem;itemImage.color = Color.white;if (item != null){itemImage.sprite = item.data.icon;if (item.stackSize > 1){itemText.text = item.stackSize.ToString();}else{itemText.text = "";}}}public void CleanUpSlot()//解决出现UI没有跟着Inventory变化的bug{item = null;itemImage.sprite = null;itemImage.color = Color.clear;itemText.text = "";}public virtual void OnPointerDown(PointerEventData eventData){if(item == null)//修复点击空白处会报错的bug{return;}if(Input.GetKey(KeyCode.LeftControl)){Inventory.instance.RemoveItem(item.data);return;}if (item.data.itemType == ItemType.Equipment)Inventory.instance.EquipItem(item.data);}public void OnPointerEnter(PointerEventData eventData){if (item == null || item.data == null)return;ui.itemTooltip.ShowToolTip(item.data as ItemData_Equipment);}public void OnPointerExit(PointerEventData eventData){if (item == null || item.data == null)return;ui.itemTooltip.HideToolTip();}
}

ItemData_equipment.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public enum EquipmentType
{Weapon,Armor,Amulet,Flask}[CreateAssetMenu(fileName = "New Item Data", menuName = "Data/Equipment")]
public class ItemData_Equipment : ItemData
{public EquipmentType equipmentType;public float itemCooldown;public ItemEffect[] itemEffects;[Header("Major stats")]public int strength; // 力量 增伤1点 爆伤增加 1% 物抗public int agility;// 敏捷 闪避 1% 闪避几率增加 1%public int intelligence;// 1 点 魔法伤害 1点魔抗 public int vitality;//加血的[Header("Offensive stats")]public int damage;public int critChance;      // 暴击率public int critPower;       //150% 爆伤[Header("Defensive stats")]public int health;public int armor;public int evasion;//闪避值public int magicResistance;[Header("Magic stats")]public int fireDamage;public int iceDamage;public int lightingDamage;[Header("Craft requirements")]public int descriptionLength;public void AddModifiers(){PlayerStats playerStats = PlayerManager.instance.player.GetComponent<PlayerStats>();playerStats.strength.AddModifier(strength);playerStats.agility.AddModifier(agility);playerStats.intelligence.AddModifier(intelligence);playerStats.vitality.AddModifier(vitality);playerStats.damage.AddModifier(damage);playerStats.critChance.AddModifier(critChance);playerStats.critPower.AddModifier(critPower);playerStats.Health.AddModifier(health);playerStats.armor.AddModifier(armor);playerStats.evasion.AddModifier(evasion);playerStats.magicResistance.AddModifier(magicResistance);playerStats.fireDamage.AddModifier(fireDamage);playerStats.iceDamage.AddModifier(iceDamage);playerStats.lightingDamage.AddModifier(lightingDamage);}public void RemoveModifiers(){PlayerStats playerStats = PlayerManager.instance.player.GetComponent<PlayerStats>();playerStats.strength.RemoveModifier(strength);playerStats.agility.RemoveModifier(agility);playerStats.intelligence.RemoveModifier(intelligence);playerStats.vitality.RemoveModifier(vitality);playerStats.damage.RemoveModifier(damage);playerStats.critChance.RemoveModifier(critChance);playerStats.critPower.RemoveModifier(critPower);playerStats.Health.RemoveModifier(health);playerStats.armor.RemoveModifier(armor);playerStats.evasion.RemoveModifier(evasion);playerStats.magicResistance.RemoveModifier(magicResistance);playerStats.fireDamage.RemoveModifier(fireDamage);playerStats.iceDamage.RemoveModifier(iceDamage);playerStats.lightingDamage.RemoveModifier(lightingDamage);}public void Effect(Transform _enemyPosition)//循环调用Effect类里的Effect的函数{foreach(var item in itemEffects){item.ExecuteEffect(_enemyPosition);}}public override string GetDescription()//让外界能够拿到拼出字符串的函数{sb.Length = 0;descriptionLength = 0;AddItemDescription(strength, "strength");AddItemDescription(agility, "agility");AddItemDescription(intelligence, "intelligence");AddItemDescription(vitality, "vitality");AddItemDescription(damage, "damage");AddItemDescription(critChance, "critChance");AddItemDescription(critPower, "critPower");AddItemDescription(health, "health");AddItemDescription(evasion, "evasion");AddItemDescription(armor, "armor");AddItemDescription(magicResistance, "magicResistance");AddItemDescription(fireDamage, "fireDamage");AddItemDescription(iceDamage, "iceDamage");AddItemDescription(lightingDamage, "lightingDamage");Debug.Log("In GetDescription");if(descriptionLength < 5)//使窗口拥有最小尺寸{for(int i = 0;i < 5- descriptionLength;i++){sb.AppendLine();sb.Append("");}}return sb.ToString();}private void AddItemDescription(int _value,string _name)//通过判断拼出想要的字符串的函数{if(_value != 0){Debug.Log(1);if(sb.Length >= 0)sb.AppendLine();//这是控制行数的if(_value > 0)sb.Append(" + "+_value + " " + _name);//这是实打实添加字符串的descriptionLength++;}}
}

ItemData.cs
using System.Collections;
using System.Collections.Generic;
using System.Text;
using UnityEngine;public enum ItemType
{Material,Equipment
}[CreateAssetMenu(fileName = "New Item Data", menuName = "Data/Item")]
public class ItemData : ScriptableObject 
{public ItemType itemType;public string itemName;public Sprite icon;//图标[Range(0,100)]public float dropChance;protected StringBuilder sb = new StringBuilder();public virtual string GetDescription(){return "";}
}

这篇关于Unity类银河恶魔城学习记录12-4 p126 Item Tooltip源代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/879167

相关文章

docker编写java的jar完整步骤记录

《docker编写java的jar完整步骤记录》在平常的开发工作中,我们经常需要部署项目,开发测试完成后,最关键的一步就是部署,:本文主要介绍docker编写java的jar的相关资料,文中通过代... 目录all-docker/生成Docker打包部署文件配置服务A的Dockerfile (a/Docke

MySQL使用EXISTS检查记录是否存在的详细过程

《MySQL使用EXISTS检查记录是否存在的详细过程》EXISTS是SQL中用于检查子查询是否返回至少一条记录的运算符,它通常用于测试是否存在满足特定条件的记录,从而在主查询中进行相应操作,本文给大... 目录基本语法示例数据库和表结构1. 使用 EXISTS 在 SELECT 语句中2. 使用 EXIS

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

C#和Unity中的中介者模式使用方式

《C#和Unity中的中介者模式使用方式》中介者模式通过中介者封装对象交互,降低耦合度,集中控制逻辑,适用于复杂系统组件交互场景,C#中可用事件、委托或MediatR实现,提升可维护性与灵活性... 目录C#中的中介者模式详解一、中介者模式的基本概念1. 定义2. 组成要素3. 模式结构二、中介者模式的特点

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

基于Spring Boot 的小区人脸识别与出入记录管理系统功能

《基于SpringBoot的小区人脸识别与出入记录管理系统功能》文章介绍基于SpringBoot框架与百度AI人脸识别API的小区出入管理系统,实现自动识别、记录及查询功能,涵盖技术选型、数据模型... 目录系统功能概述技术栈选择核心依赖配置数据模型设计出入记录实体类出入记录查询表单出入记录 VO 类(用于

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手