当前位置:   article > 正文

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

unity 恶魔城

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

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

UI.cs
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class UI : MonoBehaviour
  5. {
  6. [SerializeField] private GameObject characterUI;
  7. public UI_itemTooltip itemTooltip;
  8. public void Start()
  9. {
  10. itemTooltip = characterUI.GetComponentInChildren<UI_itemTooltip>();
  11. }
  12. public void SwitchTo(GameObject _menu)
  13. {
  14. for(int i = 0;i < transform.childCount;i++)
  15. {
  16. transform.GetChild(i).gameObject.SetActive(false);
  17. }
  18. if(_menu != null)
  19. {
  20. _menu.SetActive(true);
  21. }
  22. }
  23. }

UI_itemTooltip.cs
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using TMPro;
  4. using UnityEngine;
  5. public class UI_itemTooltip : MonoBehaviour
  6. {
  7. [SerializeField] private TextMeshProUGUI itemNameText;
  8. [SerializeField] private TextMeshProUGUI itemTypeText;
  9. [SerializeField] private TextMeshProUGUI itemDescription;
  10. [SerializeField] private int defaultFontSize = 32;
  11. public void ShowToolTip(ItemData_Equipment item)//将item里面的数据读取到对应的text上并显示此组件
  12. {
  13. if (item == null)
  14. return;
  15. itemNameText.text = item.itemName;
  16. itemTypeText.text = item.equipmentType.ToString();
  17. itemDescription.text = item.GetDescription();
  18. if (itemNameText.text.Length > 12)//使标题超过最大尺寸时字体缩小
  19. {
  20. itemNameText.fontSize = itemNameText.fontSize * .7f;
  21. }
  22. else
  23. {
  24. itemNameText.fontSize = defaultFontSize;
  25. }
  26. gameObject.SetActive(true);
  27. }
  28. public void HideToolTip()//关闭此组件
  29. {
  30. itemNameText.fontSize = defaultFontSize;//防止字体越来越小
  31. gameObject.SetActive(false);
  32. }
  33. }
UI_itemSlot.cs
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. using TMPro;
  6. using UnityEngine.EventSystems;
  7. public class UI_itemSlot : MonoBehaviour ,IPointerDownHandler, IPointerEnterHandler, IPointerExitHandler
  8. {
  9. [SerializeField] private Image itemImage;
  10. [SerializeField] private TextMeshProUGUI itemText;
  11. private UI ui;
  12. public InventoryItem item;
  13. private void Start()
  14. {
  15. ui = GetComponentInParent<UI>();
  16. }
  17. public void UpdateSlots(InventoryItem _newItem)
  18. {
  19. item = _newItem;
  20. itemImage.color = Color.white;
  21. if (item != null)
  22. {
  23. itemImage.sprite = item.data.icon;
  24. if (item.stackSize > 1)
  25. {
  26. itemText.text = item.stackSize.ToString();
  27. }
  28. else
  29. {
  30. itemText.text = "";
  31. }
  32. }
  33. }
  34. public void CleanUpSlot()//解决出现UI没有跟着Inventory变化的bug
  35. {
  36. item = null;
  37. itemImage.sprite = null;
  38. itemImage.color = Color.clear;
  39. itemText.text = "";
  40. }
  41. public virtual void OnPointerDown(PointerEventData eventData)
  42. {
  43. if(item == null)//修复点击空白处会报错的bug
  44. {
  45. return;
  46. }
  47. if(Input.GetKey(KeyCode.LeftControl))
  48. {
  49. Inventory.instance.RemoveItem(item.data);
  50. return;
  51. }
  52. if (item.data.itemType == ItemType.Equipment)
  53. Inventory.instance.EquipItem(item.data);
  54. }
  55. public void OnPointerEnter(PointerEventData eventData)
  56. {
  57. if (item == null || item.data == null)
  58. return;
  59. ui.itemTooltip.ShowToolTip(item.data as ItemData_Equipment);
  60. }
  61. public void OnPointerExit(PointerEventData eventData)
  62. {
  63. if (item == null || item.data == null)
  64. return;
  65. ui.itemTooltip.HideToolTip();
  66. }
  67. }

ItemData_equipment.cs
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public enum EquipmentType
  5. {
  6. Weapon,
  7. Armor,
  8. Amulet,
  9. Flask
  10. }
  11. [CreateAssetMenu(fileName = "New Item Data", menuName = "Data/Equipment")]
  12. public class ItemData_Equipment : ItemData
  13. {
  14. public EquipmentType equipmentType;
  15. public float itemCooldown;
  16. public ItemEffect[] itemEffects;
  17. [Header("Major stats")]
  18. public int strength; // 力量 增伤1点 爆伤增加 1% 物抗
  19. public int agility;// 敏捷 闪避 1% 闪避几率增加 1%
  20. public int intelligence;// 1 点 魔法伤害 1点魔抗
  21. public int vitality;//加血的
  22. [Header("Offensive stats")]
  23. public int damage;
  24. public int critChance; // 暴击率
  25. public int critPower; //150% 爆伤
  26. [Header("Defensive stats")]
  27. public int health;
  28. public int armor;
  29. public int evasion;//闪避值
  30. public int magicResistance;
  31. [Header("Magic stats")]
  32. public int fireDamage;
  33. public int iceDamage;
  34. public int lightingDamage;
  35. [Header("Craft requirements")]
  36. public int descriptionLength;
  37. public void AddModifiers()
  38. {
  39. PlayerStats playerStats = PlayerManager.instance.player.GetComponent<PlayerStats>();
  40. playerStats.strength.AddModifier(strength);
  41. playerStats.agility.AddModifier(agility);
  42. playerStats.intelligence.AddModifier(intelligence);
  43. playerStats.vitality.AddModifier(vitality);
  44. playerStats.damage.AddModifier(damage);
  45. playerStats.critChance.AddModifier(critChance);
  46. playerStats.critPower.AddModifier(critPower);
  47. playerStats.Health.AddModifier(health);
  48. playerStats.armor.AddModifier(armor);
  49. playerStats.evasion.AddModifier(evasion);
  50. playerStats.magicResistance.AddModifier(magicResistance);
  51. playerStats.fireDamage.AddModifier(fireDamage);
  52. playerStats.iceDamage.AddModifier(iceDamage);
  53. playerStats.lightingDamage.AddModifier(lightingDamage);
  54. }
  55. public void RemoveModifiers()
  56. {
  57. PlayerStats playerStats = PlayerManager.instance.player.GetComponent<PlayerStats>();
  58. playerStats.strength.RemoveModifier(strength);
  59. playerStats.agility.RemoveModifier(agility);
  60. playerStats.intelligence.RemoveModifier(intelligence);
  61. playerStats.vitality.RemoveModifier(vitality);
  62. playerStats.damage.RemoveModifier(damage);
  63. playerStats.critChance.RemoveModifier(critChance);
  64. playerStats.critPower.RemoveModifier(critPower);
  65. playerStats.Health.RemoveModifier(health);
  66. playerStats.armor.RemoveModifier(armor);
  67. playerStats.evasion.RemoveModifier(evasion);
  68. playerStats.magicResistance.RemoveModifier(magicResistance);
  69. playerStats.fireDamage.RemoveModifier(fireDamage);
  70. playerStats.iceDamage.RemoveModifier(iceDamage);
  71. playerStats.lightingDamage.RemoveModifier(lightingDamage);
  72. }
  73. public void Effect(Transform _enemyPosition)//循环调用Effect类里的Effect的函数
  74. {
  75. foreach(var item in itemEffects)
  76. {
  77. item.ExecuteEffect(_enemyPosition);
  78. }
  79. }
  80. public override string GetDescription()//让外界能够拿到拼出字符串的函数
  81. {
  82. sb.Length = 0;
  83. descriptionLength = 0;
  84. AddItemDescription(strength, "strength");
  85. AddItemDescription(agility, "agility");
  86. AddItemDescription(intelligence, "intelligence");
  87. AddItemDescription(vitality, "vitality");
  88. AddItemDescription(damage, "damage");
  89. AddItemDescription(critChance, "critChance");
  90. AddItemDescription(critPower, "critPower");
  91. AddItemDescription(health, "health");
  92. AddItemDescription(evasion, "evasion");
  93. AddItemDescription(armor, "armor");
  94. AddItemDescription(magicResistance, "magicResistance");
  95. AddItemDescription(fireDamage, "fireDamage");
  96. AddItemDescription(iceDamage, "iceDamage");
  97. AddItemDescription(lightingDamage, "lightingDamage");
  98. Debug.Log("In GetDescription");
  99. if(descriptionLength < 5)//使窗口拥有最小尺寸
  100. {
  101. for(int i = 0;i < 5- descriptionLength;i++)
  102. {
  103. sb.AppendLine();
  104. sb.Append("");
  105. }
  106. }
  107. return sb.ToString();
  108. }
  109. private void AddItemDescription(int _value,string _name)//通过判断拼出想要的字符串的函数
  110. {
  111. if(_value != 0)
  112. {
  113. Debug.Log(1);
  114. if(sb.Length >= 0)
  115. sb.AppendLine();//这是控制行数的
  116. if(_value > 0)
  117. sb.Append(" + "+_value + " " + _name);//这是实打实添加字符串的
  118. descriptionLength++;
  119. }
  120. }
  121. }

ItemData.cs
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using UnityEngine;
  5. public enum ItemType
  6. {
  7. Material,
  8. Equipment
  9. }
  10. [CreateAssetMenu(fileName = "New Item Data", menuName = "Data/Item")]
  11. public class ItemData : ScriptableObject
  12. {
  13. public ItemType itemType;
  14. public string itemName;
  15. public Sprite icon;//图标
  16. [Range(0,100)]
  17. public float dropChance;
  18. protected StringBuilder sb = new StringBuilder();
  19. public virtual string GetDescription()
  20. {
  21. return "";
  22. }
  23. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/977178
推荐阅读
相关标签
  

闽ICP备14008679号