Unity:GUI筆記(一)——文本、按鈕、多選框和單選框、輸入框和拖動條、圖片繪制和框繪制

寫在前面:

寫本系列(自用)的目的是回顧已經學過的知識、記錄新學習的知識或是記錄心得理解,方便自己以后快速復習,減少遺忘。主要是唐老師的課程。

一、重要參數、文本、按鈕

GUI相關代碼需要寫在private void OnGUI()中。該函數每幀執行,相當于是專門用于繪制GUI界面的函數,類似生命周期函數,一般只在其中執行GUI相關界面繪制和操作邏輯。該函數在onDisable之前,LateUpdate之后執行。

1、GUI控件繪制的共同點

都是GUI公共類中提供的靜態函數,直接調用即可。

參數都大同小異:

1、位置參數:Rect參數 x,y位置 w,h尺寸

2、顯示文本:string參數

3、圖片信息:Texture參數

4、綜合信息:GUIContent參數

5、自定義樣式:GUIStyle參數

每一種控件都有多種重載,是各個參數的排列組合。必備的參數內容:位置信息、顯示信息

2、文本控件

文本控件可以在game界面輸出文字或者圖片。基本使用是:GUI.Label(new Rect(0, 0, 100, 20),"hello"),其中,Rect的四個參數分別為:x坐標、y坐標、長、寬。第public二個參數為顯示信息,可以為文字也可以為圖片。

綜合信息content,可以聲明public變量,在面板上修改:

其中text是文本信息,image是圖片,Tooltip是提示信息。例如可以設置為鼠標懸停在顯示信息時打印提示信息。

若是要自定義樣式,可以在傳入了位置信息、顯示信息后再傳入style。style信息也是在面板上編輯會更加方便:

這是示例:

public Texture tex;
public Rect rect1;
public GUIContent content;
public GUIStyle style;
private void OnGUI()
{//基本使用//自定義樣式styleGUI.Label(new Rect(0, 0, 100, 20),"hello",style);GUI.Label(new Rect(0, 30, 100, 50), tex);//綜合使用GUI.Label(rect1, content);Debug.Log(GUI.tooltip);
}

game面板上:

3、按鈕控件

按鈕控件的使用與文本控件的使用大同小異。傳入位置、顯示信息等,即可在game屏幕中顯示一個按鈕。由于按鈕控件的返回值是bool,因此可以接收返回值來進行一些邏輯處理。

public Rect buttonrect;
public GUIContent btnContent;
public GUIStyle btnStyle;private void OnGUI()
{if(GUI.Button(buttonrect, btnContent, btnStyle)){Debug.Log("按鈕被點擊");}if(GUI.RepeatButton(buttonrect,btnContent)){Debug.Log("長按按鈕被點擊");}
}

這里說一下常用自定義按鈕樣式,可以在Inspector面板中進行樣式修改:

自定義按鈕常態樣式與常態字體顏色:

修改后:

設置按鈕點擊樣式與點擊字體顏色:

設置鼠標懸停時按鈕樣式與字體顏色:

設置字體樣式、大小:

二、多選框和單選框

1、多選框

(1)基礎

多選框使用Unity提供的API:GUI.Toggle(),里面傳入的參數與上一節的基本相同,只有第二個參數不同。

GUI.Toggle()返回的是bool值,假如此時多選框被點擊,就返回true,如果沒有被點擊返回false。

第一個參數傳入多選框的位置,第二個參數需要傳入該多選框是否被選中,如果是true就代表該多選框被選中,false就代表沒選中。為了動態控制多選框是否被選中,我們可以傳入一個變量來決定當前是true還是false。結合GUI.Toggle()的返回值,我們可以直接將這一幀的返回值傳入下一幀的GUI.Toggle()中,這樣就可以保證下一幀傳入的值為true,代碼如下:

private bool isSel;
private bool isSel2;
private void OnGUI()
{isSel = GUI.Toggle(new Rect(0, 0, 100, 30), isSel, "效果開關");isSel2 = GUI.Toggle(new Rect(0, 40, 100, 30), isSel2, "音效開關", style);
}

(2)自定義樣式

此外需要說明的是,也可以傳入style,這里傳入style的處理方式和之前不同:

首先需要導入按鍵圖片,也就是可選項的哪個白色小圈。傳入的圖片可能過大,單獨修改圖片大小而不碰字體,需要修改:

才會只修改圖片的大小,將寬高均修改為20后:

接下來需要單獨移動字體而不動圖片,需要修改:

修改完成后:

接下來需要修改點擊時圖片變化,需要在on Normal中傳入圖片。

再修改一下漢字顏色和字體,自定義樣式就完成了:

2、單選框

單選框的實現是基于多選框的。只需要實現,當一個按鈕按下后亮起,其他按鈕都自動取消按下就可以,可以通過以下代碼邏輯實現:

private int nowSelIndex = 1;
private void OnGUI()
{if(GUI.Toggle(new Rect(0, 80, 100, 30), nowSelIndex == 1, "選項一")){nowSelIndex = 1;}else if(GUI.Toggle(new Rect(0, 120, 100, 30), nowSelIndex == 2, "選項二")){nowSelIndex = 2;}else if(GUI.Toggle(new Rect(0, 160, 100, 30), nowSelIndex == 3, "選項三")){nowSelIndex = 3;}       
}

三、輸入框和拖動條

1、輸入框

(1)普通輸入

普通的輸入框使用的API是:GUI.TextField(),里面必須要傳入的參數有兩個:位置信息和顯示信息。位置信息表示的是輸入框的位置,為Rect類型,顯示信息是輸入框中顯示的內容,為string類型。

同之前一樣,顯示的內容需要實時返回,因此與之前一樣,我們可以設置一個變量表示顯示信息,第二個參數傳入這個變量,GUI.TextField()的返回值也是這個變量接收,這樣就可以保證顯示信息實時變化。

可以再傳入第三個參數,表示最大長度,例如當設置為5時,最多輸入5個字符。也可以繼續傳入輸入框樣式等。

private string inputStr;private void OnGUI()
{inputStr = GUI.TextField(new Rect(0, 0, 100, 30), inputStr,5);
}

(2)密碼輸入

密碼輸入框使用的API是:GUI.PasswordField,里面必須要傳入的參數有三個:位置信息、顯示信息、密碼的覆蓋字符。位置信息表示的是輸入框的位置,為Rect類型,顯示信息是輸入框中顯示的內容,為string類型。覆蓋字符自己可選,例如可以傳入字符‘*’,用戶輸入的內容就會自動變為*

同之前一樣,顯示的內容需要實時返回,不再解釋,同樣可以再傳入第四個參數,表示最大長度。

private string inputPW;private void OnGUI()
{inputPW = GUI.PasswordField(new Rect(0, 50, 100, 30), inputPW, '*');
}

2、拖動條?

(1)水平拖動條

水平拖動條使用的API是:GUI.HorizontalSlider(),里面必須要傳入的參數有四個:位置信息、當前值、最小值、最大值。位置信息表示的是輸入框的位置,為Rect類型,當前值是當前拖動條所處的位置,最小值是拖動條最小數值,最大值是拖動條最大數值。

同之前一樣,當前值需要實時返回,不再解釋,同樣可以繼續傳入樣式信息,這里不演示。

private float nowValue = 0.5f;private void OnGUI()
{nowValue = GUI.HorizontalSlider(new Rect(0, 100, 100, 50), nowValue, 0, 1);
}

(2)豎直拖動條

豎直拖動條使用的API是:GUI.VerticalSlider(),除了顯示的拖動條是豎向的,其余用法與水平拖動條沒有區別

private float nowValue = 0.5f;private void OnGUI()
{nowValue = GUI.VerticalSlider(new Rect(0, 150, 50, 100), nowValue, 0, 1);
}

四、圖片繪制和框

1、圖片繪制

繪制圖片使用的API是:GUI.DrawTexture(),其中必須要傳入的參數有兩個:圖片的位置信息和顯示的圖片。圖片位置信息是Rect型,圖片為Texture型。

此外,還有三個較為重要的參數:

1、ScaleMode,有三種:

? ? ScaleToFit:自動根據寬高比進行計算,不會拉變形,會一直保持圖片完全顯示的狀態
ScaleAndCrop:也會通過寬高比來進行計算 但是會裁剪
StretchToFill:始終填充滿你傳入的Rect范圍

2、alpha:控制圖片是否開啟透明通道,默認為true開啟,false不開啟

3、imageAspect:自定義寬高比,如果不填默認為0,就會使用圖片原始寬高

public Rect texPos;
public Texture tex;
public ScaleMode mode = ScaleMode.StretchToFill;
public bool alpha = true;
public float wh = 0;private void OnGUI()
{GUI.DrawTexture(texPos, tex, mode, alpha, wh);
}

如果alpha為false:

alpha為true:

2、框繪制

框繪制用的比較少,使用API:GUI.Box(),必須傳入位置信息,顯示信息,顯示信息可以為空。也可以傳入可選參數樣式等。

public Rect texPos;private void OnGUI()
{GUI.Box(texPos, "");
}

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

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

相關文章

wordpress從wp_nav_menu中獲取菜單項

從wp_nav_menu中獲取菜單項&#xff0c;然后檢查這些菜單項是否對應分類(Category)&#xff0c;并輸出這些分類的ID。 以下是完整的代碼實現&#xff1a; <?php // 獲取指定菜單位置的菜單項 $menu_items wp_get_nav_menu_items(wodepress); // wodepress 是菜單位置的名…

第4章 程序段的反復執行2 while語句P128練習題(題及答案)

&#xff08;&#xff08;1&#xff09;閱讀程序#include <bits/stdc.h> using namespace std; //湯永紅 int main(){int n,s0;cin >> n;while(n){s s * 10 n % 10;n / 10;}cout << s << endl;return 0; }分別輸入&#xff1a;0 1024 1234567890輸出…

圖解軟件系統組成

這是基于 ??PlantUML?? 繪制的軟件系統組成部分思維導圖&#xff0c;聚焦技術路線與文件類型的對應關系&#xff0c;采用分層架構展示核心模塊&#xff1a;startmindmap * **軟件系統組成部分*** **一、核心技術棧*** 后端技術* 技術路線: Python Web 框架* 文件類型: .py …

【傳奇開心果系列】Flet框架實現的多人訪問web數據表高并發前后端自定義框架模板

Flet框架實現的多人訪問web數據表高并發前后端自定義框架模板一、效果展示截圖二、應用場景介紹1. **多用戶實時協作**2. **產品管理**3. **數據可視化**三、特色說明1. **實時通信**2. **高性能**3. **用戶友好的界面**4. **日志記錄**5. **安全性**四、總結五、源碼下載地址六…

農業智慧大屏系統 - Flask + Vue實現

下面我將實現一個完整的農業智慧大屏系統&#xff0c;使用Flask作為后端框架&#xff0c;前端使用Vue.js結合ECharts進行數據可視化展示。 設計思路 前端部分&#xff1a; 使用Vue.js構建響應式界面 使用ECharts實現各類農業數據可視化 使用CSS Grid布局實現大屏適配 后端…

Linux中Https配置與私有CA部署指南

Linux中Https配置與私有CA部署指南 一、HTTPS 核心概念特性HTTPHTTPS協議明文傳輸HTTP SSL/TLS端口80443加密未加密數據加密二、SSL/TLS 握手流程 Client → Server ClientHello&#xff1a;支持哪些版本、支持哪些加密算法&#xff0c;隨機生成一組32字節數據 random_c Serve…

【軟考架構】主流數據持久化技術框架

JDO與JPA JDO&#xff08;Java Data Objects&#xff09;和JPA&#xff08;Java Persistence API&#xff09;都是Java中用于對象持久化的規范&#xff0c;但它們在設計目標、技術背景和應用場景上存在顯著區別。以下是兩者的核心對比&#xff1a;1. 規范背景與維護方 JDO&…

服務日志、監控

服務怎么做監控和告警使用 Prometheus 和 Grafana 來實現整個微服務集群的監控和告警&#xff1a;Prometheus&#xff1a;Prometheus 是一個開源的監控系統&#xff0c;具有靈活的數據模型和強大的查詢語言&#xff0c;能夠收集和存儲時間序列數據。它可以通過 HTTP 協議定期拉…

秋招筆記-8.12

我決定從今天開始&#xff0c;在每天的學習內容中加入算法的內容&#xff0c;大致分布時間的話&#xff0c;假設我一天可以學習八個小時&#xff0c;那算法兩個小時&#xff0c;八股三個小時&#xff0c;項目三個小時這樣的分布差不多吧。之所以還是需要做做筆試一是為了應對面…

【從0帶做】基于Springboot3+Vue3的校園表白墻系統

大家好&#xff0c;我是武哥&#xff0c;最近給大家手擼了一個基于SpringBoot3Vue3的校園表白墻系統&#xff0c;可用于畢業設計、課程設計、練手學習&#xff0c;系統全部原創&#xff0c;如有遇到網上抄襲站長的&#xff0c;歡迎聯系博主~ 資料獲取方式 請點開作者頭像看下…

【Linux系列】服務器 IP 地址查詢

博客目錄一、hostname 命令&#xff1a;簡單高效的 IP 查詢工具命令詳解實際應用技巧注意事項二、ip 命令&#xff1a;新一代網絡配置全能工具基本用法在服務器管理和網絡運維中&#xff0c;快速準確地獲取服務器的 IP 地址是一項基本但至關重要的技能。無論是進行遠程連接、配…

【完美解決】在 Ubuntu 24.04 上為小米 CyberDog 2 刷機/交叉編譯:終極 Docker 環境搭建指南

摘要 本文旨在為廣大開發者提供一份在非官方推薦的 Ubuntu 24.04 系統上&#xff0c;成功為小米機器狗 CyberDog 2 進行刷機和交叉編譯的終極解決方案。通過層層排查 setup.sh 依賴缺失、No devices to flash 以及交叉編譯 Segmentation fault 等疑難雜癥&#xff0c;我們發現根…

XX生產線MES系統具體實施方案

一、系統架構設計1. 整體架構圖2. 技術組件清單模塊技術選型部署要求應用服務Spring Boot 3.2 Spring CloudKubernetes Pod (4C8G)實時通信Kafka 3.6 WebSocket3節點集群工業協議Eclipse Milo (OPC UA)獨立服務器 (2C4G)數據庫PostgreSQL 15 TimescaleDB 2.10SSD存儲, 主從復…

Go語言實戰案例:使用模板渲染HTML頁面

在 Web 開發中&#xff0c;身份驗證是一個繞不開的話題。傳統的 Session 機制依賴服務器存儲用戶狀態&#xff0c;而在微服務、分布式架構下&#xff0c;這種方式可能會導致狀態同步困難。 JWT&#xff08;JSON Web Token&#xff09;是一種無狀態的、跨平臺的身份驗證解決方案…

@RequestMapping接收文件格式的形參(方法參數)

需求&#xff1a;將文件上傳到OSS&#xff0c;忽略域名與路徑&#xff0c;將文件名以 “img1.png,img2.png,img3.png”保存到數據庫中 1、先看結果 后端要接收postman傳遞的file文件2、SpringBoot接收參數方式 很顯然&#xff0c;上面postman上傳的地方可以傳入多個文件&#x…

【數據分享】2020-2022年我國鄉鎮的逐日最高氣溫數據(Shp/Excel格式)

之前我們分享過2020—2022年中國0.01分辨率逐日最高氣溫柵格數據&#xff08;可以查看之前的文章獲悉詳情&#xff09;&#xff01;該數據是研究者張凌, 胡英屹等發布在國家冰川凍土沙漠科學數據中心平臺上的高分辨最高氣溫數據。很多小伙伴拿到數據后反饋柵格數據不太方便使用…

為什么C++主函數 main 要寫成 int 返回值 | main(int argc, char* argv[]) 這種寫法是什么意思?

主函數 main 要寫成 int 返回值&#xff1f;main(int argc, char* argv[]) 為什么里面沒有 cin 也能讀到數據&#xff0c;數據是怎么傳進去的&#xff1f;本文將一步步回答這些問題。1. 為什么 main 要寫成 intC 標準&#xff08;ISO/IEC 14882&#xff09;規定&#xff0c;mai…

【oracle閃回查詢】記錄字段短時間被修改的記錄

SELECT versions_starttime, versions_endtime, versions_operation, versions_xid, [字段1], [字段2] – 替換為實際字段名 FROM 表名 VERSIONS BETWEEN TIMESTAMP SYSTIMESTAMP - INTERVAL ‘15’ MINUTE AND SYSTIMESTAMP --15分鐘內 WHERE id ‘目標ID’ – 指定記錄的唯…

【軟考中級網絡工程師】知識點之 IP 組播技術:從原理到實戰

目錄一、IP 組播技術概述1.1 什么是 IP 組播1.2 IP 組播與其他傳輸方式對比二、IP 組播地址詳解2.1 IPv4 組播地址范圍及分類2.2 特殊 IPv4 組播地址示例2.3 IPv6 組播地址結構與特點2.4 IP 組播地址與 MAC 地址的映射關系三、IP 組播協議剖析3.1 IGMP 協議深度解析3.2 PIM 協議…

Akamai Bot Manager智能防護體系解析:邊緣計算與AI驅動的反爬蟲技術

{ “title”: “Akamai Bot Manager智能防護體系解析&#xff1a;邊緣計算與AI驅動的反爬蟲技術”, “tags”: “Akamai,Bot Manager,邊緣計算,反爬蟲,CDN安全,機器學習,威脅檢測,網絡安全”, “description”: “深度剖析Akamai Bot Manager的邊緣計算架構、機器學習檢測引擎、…