學習游戲制作記錄(制作提示框以及使用鍵盤切換UI)8.21

1.制作裝備提示框

創建提示框,添加文本子對象,用來描述名稱,類型以及屬性加成

掛載垂直分配組件和文本大小適配組件,這樣圖像會根據文本大小來調整自己

創建UI_ItemTip腳本并掛載在文本框上:

? ? [SerializeField] private TextMeshProUGUI itemStringName;//三個文本
[SerializeField] private TextMeshProUGUI itemTypeName;
[SerializeField] private TextMeshProUGUI itemDescription;

? ? [SerializeField] private float defaultFontSize = 60;//默認文本大小
void Start()
{

? ? }

? ? public void ShowToolTip(ItemData_Equipment item)//提示函數
{
if (item == null) return;

? ? ? ? itemStringName.text = item.ItemName;
itemTypeName.text = item.equipmentType.ToString();
itemDescription.text = item.GetDescription();//獲取相應的文本

? ? ? ? if(itemStringName.text.Length >13)//防止標題的字體大小過大
{
itemStringName.fontSize =itemStringName.fontSize*.7f ;
}
gameObject.SetActive(true);
}

? ? public void HideToolTip()//關閉函數
{
itemStringName.fontSize = defaultFontSize;
gameObject.SetActive(false);

? ? }

UI腳本:


[SerializeField]public UI_ItemTip tip;//獲取提示框

UI_ItemSlot腳本:


實現IPointerEnterHandler,IPointerExitHandler接口

分別會在鼠標懸浮在物品槽和離開物品槽時調用

? ? public UI ui;//獲取ui

? ? private void Start()
{
ui=GetComponentInParent<UI>();
}

? ? public void OnPointerEnter(PointerEventData eventData)
{
if (Item == null) return;

? ? ? ? ui.tip.ShowToolTip(Item.data as ItemData_Equipment);//顯示當前物品的數據
}

? ? public void OnPointerExit(PointerEventData eventData)
{
if(Item == null) return;

? ? ? ? ui.tip.HideToolTip();
}

ItemData腳本:

? ? public StringBuilder sb = new StringBuilder();//字符串構建,用來創建屬性的描述

? ? public virtual string GetDescription()
{
return " ";
}

ItemData_Equipmen腳本:

?public int DescriptionLength;//記錄文本的行數

? ? public override string GetDescription()
{
sb.Length = 0;
DescriptionLength = 0;

? ? ? ? AddItemDescription(strength, "力量");//添加描述
AddItemDescription(agility, "敏捷");
AddItemDescription(intelligence, "智力");
AddItemDescription(valitity, "活力");

? ? ? ? AddItemDescription(damage, "傷害");
AddItemDescription(critChance, "暴擊率");
AddItemDescription(critPower, "暴擊傷害");

? ? ? ? AddItemDescription(maxHealth, "最大生命");
AddItemDescription(armor, "護甲");
AddItemDescription(evasion, "閃避");
AddItemDescription(magicResistence, "魔法抗性");

? ? ? ? AddItemDescription(fireDamage, "火焰傷害");
AddItemDescription(iceDamage, "冰凍傷害");
AddItemDescription(lightingDamage, "雷電傷害");

? ? ? ? if(DescriptionLength<5)//不足5行則填空,更加美觀
{
for(int i = 0; i < 5-DescriptionLength; i++)?
{
sb.AppendLine();
sb.Append(" ");
}
}

? ? ? ? return sb.ToString();
}

? ? private void AddItemDescription(int value, string itemname)//添加屬性描述
{
if (value != 0)
{
if(sb.Length > 0)
{
sb.AppendLine();//換行的作用
}

? ? ? ? ? ? if(value>0)
{
sb.AppendLine("+"+value+" "+itemname);

? ? ? ? ? ? }

? ? ? ? ? ? DescriptionLength++;
}
}

2.制作屬性提示框

創建一個類似上面的提示框,但是只需要一個描述文本即可

創建UI_StatToolTip腳本并掛載在提示框上:

? ? [SerializeField] private TextMeshProUGUI statDescription;//獲取文本

? ? public void ShowStatToolTip(string _text)
{
statDescription.text = _text;//設置
gameObject.SetActive(true);//激活提示框
}

? ? public void HideStatToolTip()//關閉
{
statDescription.text = " ";
gameObject.SetActive(false);
}

UI腳本:


? ? [SerializeField] public UI_StatToolTip statTip;

UI_StatSlot腳本:


同樣實現IPointerEnterHandler,IPointerExitHandler接口

? ? [TextArea]
[SerializeField] private string statDescription;//該槽位對應的文本描述,自行設置

? ? private UI ui;

? ? public void OnPointerEnter(PointerEventData eventData)//調用即可
{
ui.statTip.ShowStatToolTip(statDescription);
}

? ? public void OnPointerExit(PointerEventData eventData)
{
ui.statTip.HideStatToolTip();
}

3.實現鍵盤切換UI:

UI腳本:


[SerializeField] private GameObject Character;//獲取四大面板
[SerializeField] private GameObject Craft;
[SerializeField] private GameObject SkillTree;
[SerializeField] private GameObject Options;

? ? void Start()//初始化默認不打開面板和提示框
{
SwithTo(null);

? ? ? ?ItemTip.gameObject.SetActive(false);
statTip.gameObject.SetActive(false);
}

? ? public void SwithWithKey(GameObject _menu)
{
if(_menu!=null&&_menu.activeSelf)//再次按下同樣的按鍵則關閉面板
{
_menu.SetActive(false);
return;
}

? ? ? ? SwithTo(_menu);

? ? }

? ? void Update()
{
if(Input.GetKeyDown(KeyCode.C))//四個面板以及對應的按鍵
{
SwithWithKey(Character);
}
if(Input .GetKeyDown(KeyCode.B))
{
SwithWithKey(Craft);
}
if(Input.GetKeyDown(KeyCode.K))
{
SwithWithKey(SkillTree);
}
if(Input.GetKeyDown(KeyCode.O))
{
SwithWithKey(Options);
}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/919730.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/919730.shtml
英文地址,請注明出處:http://en.pswp.cn/news/919730.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

chapter07_初始化和銷毀方法

一、簡介 一個Bean&#xff0c;在進行實例化之后&#xff0c;需要進行兩種初始化 初始化屬性&#xff0c;由PropertyValues進行賦值初始化方法&#xff0c;由ApplicationContext統一調用&#xff0c;例如加載配置文件 Bean的初始化與銷毀&#xff0c;共有三種方式&#xff08;注…

open webui源碼分析6-Function

一、Functions簡介 可以把Tools作為依賴于外部服務的插件&#xff0c;Functions就是內部插件&#xff0c;二者都是用來增強open webui的能力的。Functions是輕量的&#xff0c;高度可定制的&#xff0c;并且是用純Python編寫的&#xff0c;所以你可以自由地創建任何東西——從新…

C2039 “unref“:不是“osgEarth::Symbology::Style”的成員 問題分析及解決方法

在osgEarth2.10中實現多線段連續測量功能時,遇到下圖中的錯誤; 經過測試和驗證,主要問題出現在下圖圈出代碼的定義上 圖22-1 對于22-1中的兩個變量這樣定義是錯誤的。因為Style類沒有繼承自osg::Referenced,因此不能與osg::ref_ptr配合使用

GitHub 熱榜項目 - 日榜(2025-08-19)

GitHub 熱榜項目 - 日榜(2025-08-19) 生成于&#xff1a;2025-08-19 統計摘要 共發現熱門項目&#xff1a;12 個 榜單類型&#xff1a;日榜 本期熱點趨勢總結 本期GitHub熱榜呈現三大技術熱點&#xff1a;1&#xff09;AI原生開發持續爆發&#xff0c;Archon OS、Parlant等…

ingress 配置ssl證書

模擬環境舉例&#xff1a; # 生成帶 OU 的證書配置文件 cat > csr.conf <<EOF [ req ] default_bits 2048 prompt no default_md sha256 distinguished_name dn[ dn ] C CN ST Beijing L Beijing O YourCompany, Inc. # 組織名稱 (必填) OU DevOps De…

Pandas 合并數據集:concat 和 append

文章目錄Pandas 合并數據集&#xff1a;concat 和 append回顧&#xff1a;NumPy 數組的拼接使用 pd.concat 進行簡單拼接重復索引將重復索引視為錯誤忽略索引添加多級索引&#xff08;MultiIndex&#xff09;鍵使用連接&#xff08;Join&#xff09;方式拼接append 方法Pandas …

2025年5月架構設計師綜合知識真題回顧,附參考答案、解析及所涉知識點(七)

本文主要回顧2025年上半年(2025-5-24)系統架構設計師考試上午綜合知識科目的選擇題,同時附帶參考答案、解析和所涉知識點。 2025年5月架構設計師綜合知識真題回顧,附參考答案、解析及所涉知識點(一) 2025年5月架構設計師綜合知識真題回顧,附參考答案、解析及所涉知識點(…

面向RF設計人員的微帶貼片天線計算器

微帶貼片天線和陣列可能是僅次于單極天線和偶極天線的最簡單的天線設計。這些天線也很容易集成到PCB中&#xff0c;因此通常用于5G天線陣列和雷達等高級系統。這些天線陣列在基諧模式和高階模式下也遵循一組簡單的設計方程&#xff0c;因此您甚至可以在不使用仿真工具的情況下設…

明基RD280U編程顯示器深度測評:碼農的「第二塊鍵盤」竟然會發光?

文章目錄前言一、開箱篇&#xff1a;當理工男遇到「俄羅斯套娃式包裝」二、外觀篇&#xff1a;深空灰的「代碼容器」1. 桌面變形記2. 保護肩頸的人體工學設計三、顯示篇&#xff1a;給代碼做「光子嫩膚」1. 28寸超大大屏 3:2屏比 4K超清2.專業編程模式&#xff0c;讓代碼一目…

算法114. 二叉樹展開為鏈表

題目&#xff1a;給你二叉樹的根結點 root &#xff0c;請你將它展開為一個單鏈表&#xff1a; 展開后的單鏈表應該同樣使用 TreeNode &#xff0c;其中 right 子指針指向鏈表中下一個結點&#xff0c;而左子指針始終為 null 。 展開后的單鏈表應該與二叉樹 先序遍歷 順序相同。…

智慧能源管理系統:點亮山東零碳園區的綠色引擎

一、概述在全球積極踐行“雙碳”目標的時代浪潮下&#xff0c;山東作為經濟大省&#xff0c;正全力推動產業的綠色變革&#xff0c;零碳園區建設成為其中的關鍵一環。《山東省零碳園區建設方案》明確規劃&#xff0c;到2027年建成15個左右省級零碳園區 &#xff0c;到2030年進一…

分布式日志分析平臺(ELFK 與 EFK)理論

一、日志分析平臺核心概念在分布式系統中&#xff0c;日志是系統運行狀態監控、問題排查和業務分析的重要依據。隨著系統規模擴大&#xff0c;單機日志管理方式已無法滿足需求&#xff0c;分布式日志分析平臺應運而生。其核心目標是實現日志的集中收集、統一處理、高效存儲和可…

CoreShop微信小程序商城框架開啟多租戶-添加一個WPF客戶端以便進行本地操作--讀取店鋪信息(6)

本節內容&#xff0c;使用登錄的token進行店鋪信息讀取&#xff0c;順利的話&#xff0c;進行EXCEL上傳測試。 1。在后臺編寫 讀取店鋪信息代碼 1.1 查看原來鋪店信息在什么位置&#xff0c;店鋪的表格為CoreCmsStore#region 獲取列表// POST: Api/CoreCmsStore/GetPageList///…

UE5關卡藍圖能不能保存副本呀?

提問 關卡藍圖能不能保存副本呀&#xff1f; 回答 在 UE 里&#xff0c;“關卡藍圖&#xff08;Level Blueprint&#xff09;”本身其實是不能直接復制/保存成獨立資源的&#xff0c;因為它和具體的 **Level&#xff08;.umap 文件&#xff09;**是綁定的——相當于一個“場景腳…

機器學習數據預處理學習報告

一、學習背景與目的在機器學習流程中&#xff0c;數據預處理是保障模型訓練效果的關鍵環節。原始數據常存在缺失值、量綱不一致、特征格式不匹配等問題&#xff0c;直接影響模型對數據規律的學習。本次學習圍繞 Pandas 與 Scikit-learn&#xff08;sklearn&#xff09;工具庫&a…

git舊倉庫遷移到新倉庫

git舊倉庫遷移到新倉庫 A倉庫(舊倉庫)&#xff1a;git172.16.21.21:xxxx_software/Ni-Handler-Mgr.git B倉庫(新倉庫)&#xff1a;git172.16.11.11:yyyy/hostpc/ni-handler-mgr.git Step1 新建新倉庫 創建新 GitHub 倉庫? 在 GitHub 頁面點擊 “New repository”&#xff0c;命…

YOLO --- YOLOv5模型以及項目詳解

YOLO — YOLOv5模型以及項目詳解 文章目錄YOLO --- YOLOv5模型以及項目詳解一&#xff0c;開源地址二&#xff0c;改進點Focus 模塊三&#xff0c;網絡結構3.1 CSP1_X 與 CSP2_X3.2 自適應Anchor的計算3.3 激活函數3.3.1 SiLU3.3.2 Swish3.4 Bottleneck3.5 C33.5.1 BottleneckC…

Linux文本三劍客的使用及常見重點操作

文本三劍客指 Linux環境下的 grep&#xff08;搜索&#xff09;、sed&#xff08;編輯&#xff09;、awk&#xff08;分析&#xff09;三款用于文本處理的核心命令&#xff0c;三者分工明確、功能互補&#xff0c;是處理日志、配置文件、結構化數據等場景的 “剛需工具”。一、…

??《開源字幕神器VideoCaptioner實戰:基于Whisper+LLM的全鏈路方案,免費平替剪映會員》??

&#x1f4cc; 大家好&#xff0c;我是智界工具庫&#xff0c;每天分享好用實用且智能的開源項目&#xff0c;以及在JAVA語言開發中遇到的問題&#xff0c;如果本篇文章對您有所幫助&#xff0c;請幫我點個小贊小收藏小關注吧&#xff0c;謝謝喲&#xff01;&#x1f618; 博主…

redisIO模型

??1. 總述核心??“Redis采用了??單線程的Reactor模型??來處理網絡IO和命令請求。其核心在于&#xff0c;??它使用一個主線程通過IO多路復用機制來并發地處理大量的客戶端連接&#xff0c;而實際的命令解析和執行則是單線程的??。”這句話非常重要&#xff0c;它直接…