Unity类银河战士恶魔城学习总结(P127 Stat ToolTip属性提示)
【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili
教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/
本章节实现了把鼠标放到属性上面就会显示属性的作用
UI_StatToolTip.cs
这段代码实现了一个UI提示框(ToolTip)功能,用于显示和隐藏某个对象的描述信息。主要通过 TextMeshProUGUI
组件在Unity中显示文字,来实现动态的文本显示效果。
方法分析:
-
ShowStatToolTip(string _text):
- 作用:该方法用来展示描述文本。传入一个字符串
_text
,然后将这个文本赋值给description.text
,从而更新显示的文本内容。 gameObject.SetActive(true)
:启用当前 GameObject,使 Tooltip 可见。
- 作用:该方法用来展示描述文本。传入一个字符串
-
HideStatToolTip():
- 作用:该方法用来隐藏 Tooltip。在这个方法中,
description.text = "";
清空文本内容,gameObject.SetActive(false)
隐藏 Tooltip。
- 作用:该方法用来隐藏 Tooltip。在这个方法中,
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
public class UI_StatToolTip : MonoBehaviour
{
[SerializeField] private TextMeshProUGUI description;
public void ShowStatToolTip(string _text)
{
description.text = _text;
gameObject.SetActive(true);
}
public void HideStatToolTip()
{
description.text = "";
gameObject.SetActive(false);
}
}
UI_StatSlot.cs
总结(更新部分):
UpdateStatValueUI()
:更新玩家状态值在UI中的显示,根据不同的statType
更新对应的数值。OnPointerEnter(PointerEventData eventData)
:鼠标悬停时,显示状态描述的提示框。OnPointerExit(PointerEventData eventData)
:鼠标离开时,隐藏状态描述的提示框。
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
//2024年11月12日
public class UI_StatSlot : MonoBehaviour,IPointerEnterHandler,IPointerExitHandler
{
private UI ui;
[SerializeField] private string statName;
[SerializeField] private StatType statType;//用来存储当前状态的类型
[SerializeField] private TextMeshProUGUI statValueText;//负责显示当前状态值
[SerializeField] private TextMeshProUGUI statNameText;//用来显示状态名称
[TextArea]
[SerializeField] private string statDescription;//状态描述
private void OnValidate()
{
gameObject.name = "Stat - " + statName;//在场景中及时更新内容
if (statNameText != null)
statNameText.text = statName;
}
void Start()
{
UpdateStatValueUI();
ui= GetComponentInParent<UI>();
}
public void UpdateStatValueUI()
{
PlayerStats playerStats = PlayerManager.instance.player.GetComponent<PlayerStats>();
if (playerStats != null)
{
statValueText.text = playerStats.GetStat(statType).GetValue().ToString();
if(statType == StatType.health)
statValueText.text = playerStats.GetMaxHealthValue().ToString();
if (statType == StatType.damage)
statValueText.text = (playerStats.damage.GetValue() + playerStats.strength.GetValue()).ToString();
if (statType == StatType.critPower)
statValueText.text = (playerStats.critPower.GetValue() + playerStats.strength.GetValue()).ToString();
if (statType == StatType.critChance)
statValueText.text = (playerStats.critChance.GetValue() + playerStats.agility.GetValue()).ToString();
if (statType == StatType.evasion)
statValueText.text = (playerStats.evasion.GetValue() + playerStats.agility.GetValue()).ToString();
if (statType == StatType.magicRes)
statValueText.text = (playerStats.magicResistance.GetValue() + playerStats.intelligence.GetValue() * 3).ToString();
}
}
public void OnPointerEnter(PointerEventData eventData)
{
ui.statToolTip.ShowStatToolTip(statDescription);
}
public void OnPointerExit(PointerEventData eventData)
{
ui.statToolTip.HideStatToolTip();
}
}