【Unity進階】Unity發布PC端,隱藏并自定義默認標題欄

開發環境:
Unity2019.3.16f1c1 - 個人版
Visual Studio Community 2019
Windows10 專業版 x64

嘿,各位朋友們!當咱們歡歡喜喜地把項目打包成PC平臺的exe窗口程序,準備在電腦上一展游戲風采時,卻發現冒出來個Windows風格的白條標題欄,就像一個不速之客闖進了咱們精心布置的游戲派對,和游戲那炫酷風格完全不搭調,這多鬧心吶!

別慌,咱有辦法把這位“不速之客”請出去,再給它換個符合游戲氣質的“酷炫外衣”——隱藏默認標題欄,然后自定義一個超有個性的游戲風格標題欄。這操作就像給游戲窗口變個小魔術,關鍵就在于調用Windows API函數里的“兩大高手”SetWindowLongGetWindowLong,再拉上WS_CAPTION樣式標志來幫忙。下面咱就來看看這場“魔術秀”的具體步驟:

創建C#腳本:在Unity項目里新建一個C#腳本,給它起個響亮的名字,就叫WindowStyle。然后別忘了在腳本開頭把System.Runtime.InteropServices這個“魔法寶庫”的命名空間引進來,這樣咱就能召喚出Windows API函數來施展魔法啦。

using System;
using UnityEngine;
using UnityEngine.UI;
using System.Runtime.InteropServices;public class WindowsStyle : MonoBehaviour
{}

聲明Windows API函數:在腳本里,像念咒語一樣,把GetWindowLongSetWindowLong還有GetForegroundWindow這些Windows API函數都聲明出來,它們可是這場“魔術”的關鍵道具。

[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();[DllImport("user32.dll")]
public static extern bool ShowWindow(IntPtr hwd, int cmdShow);[DllImport("user32.dll")]
public static extern long GetWindowLong(IntPtr hwd, int nIndex);[DllImport("user32.dll")]
public static extern void SetWindowLong(IntPtr hwd, int nIndex, long dwNewLong);

定義窗口樣式常量:接下來,要定義一些能修改窗口樣式的“魔法密碼”,像GWL_STYLE(它掌控著窗口樣式)、WS_CAPTION(專門和標題欄樣式打交道)這些,有了它們,咱就能輕松改變窗口的“模樣”啦。

/// <summary>
/// 最小化窗口,并激活頂部窗口
/// </summary>
private const int SW_MINIMIZED = 6;/// <summary>
/// 最大化窗口
/// </summary>
private const int SW_MAXIMIZED = 3;/// <summary>
/// 恢復窗口到正常狀態(非最小化/最大化)
/// </summary>
private const int SW_RESTORE = 9;/// <summary>
/// 窗口風格
/// </summary>
private const int GWL_STYLE = -16;/// <summary>
/// 標題欄
/// </summary>
private const int WS_CAPTION = 0x00c00000;

編寫標題欄處理方法:在腳本里大筆一揮,寫個專門的方法。這個方法就像一個神奇的魔法棒,通過調用前面召喚出來的Windows API函數,就能把默認標題欄藏起來。而且,它還能讓窗口實現最大化、還原、關閉這些功能,就像給窗口裝上了各種“超能力按鈕”(不過咱這次就先介紹怎么讓方法有這些本事,不搞那些花里胡哨的美術效果啦,就用幾個原生Button來假裝是標題欄的按鈕,湊合湊合先)。

掛載腳本:把寫好的這個“魔法腳本”像掛勛章一樣,掛到場景里的任意一個對象上,比如主攝像機,讓它跟著對象一起在游戲的舞臺上發光發熱。

打包并測試:最后一步,把掛好腳本的Unity項目打包成exe文件,就像把魔法封印進一個小盒子里。然后打開這個“魔法盒子”,看看隱藏標題欄的效果是不是像咱期待的那樣,讓游戲窗口變得又酷又炫!

去標題欄前:

去標題欄后:

怎么樣,是不是感覺給游戲窗口變個“魔術”也沒那么難啦?趕緊動手試試,讓你的游戲窗口也來一場華麗的變身吧!

這里是完整代碼:

using System;
using UnityEngine;
using UnityEngine.UI;
using System.Runtime.InteropServices;public class WindowsStyle : MonoBehaviour
{[DllImport("user32.dll")]public static extern IntPtr GetForegroundWindow();[DllImport("user32.dll")]public static extern bool ShowWindow(IntPtr hwd, int cmdShow);[DllImport("user32.dll")]public static extern long GetWindowLong(IntPtr hwd, int nIndex);[DllImport("user32.dll")]public static extern void SetWindowLong(IntPtr hwd, int nIndex, long dwNewLong);/// <summary>/// 最小化窗口,并激活頂部窗口/// </summary>private const int SW_MINIMIZED = 6;/// <summary>/// 最大化窗口/// </summary>private const int SW_MAXIMIZED = 3;/// <summary>/// 恢復窗口到正常狀態(非最小化/最大化)/// </summary>private const int SW_RESTORE = 9;/// <summary>/// 窗口風格/// </summary>private const int GWL_STYLE = -16;/// <summary>/// 標題欄/// </summary>private const int WS_CAPTION = 0x00c00000;private Button btn_hide_bar;private Button btn_show_bar;private Button btn_minimized;private Button btn_maximized;private Button btn_restore;private Button btn_close;private void Awake(){btn_hide_bar = transform.Find("btn_hide_bar").GetComponent<Button>();btn_show_bar = transform.Find("btn_show_bar").GetComponent<Button>();btn_minimized = transform.Find("btn_minimized").GetComponent<Button>();btn_maximized = transform.Find("btn_maximized").GetComponent<Button>();btn_restore = transform.Find("btn_restore").GetComponent<Button>();btn_close = transform.Find("btn_close").GetComponent<Button>();}private void Start(){btn_hide_bar.onClick.AddListener(() => HideTitleBar());btn_show_bar.onClick.AddListener(() => ShowTitleBar());btn_minimized.onClick.AddListener(() => Minimize());btn_maximized.onClick.AddListener(() => Maximize());btn_restore.onClick.AddListener(() => Restore());btn_close.onClick.AddListener(() => Close());}/// <summary>/// 隱藏標題欄/// </summary>private void HideTitleBar(){var hwd = GetForegroundWindow();var wl = GetWindowLong(hwd, GWL_STYLE);wl &= ~WS_CAPTION;SetWindowLong(hwd, GWL_STYLE, wl);}/// <summary>/// 顯示標題欄/// </summary>    private void ShowTitleBar(){var hwd = GetForegroundWindow();var wl = GetWindowLong(hwd, GWL_STYLE);wl |= WS_CAPTION;SetWindowLong(hwd, GWL_STYLE, wl);}/// <summary>/// 最小化/// </summary>private void Minimize(){var hwd = GetForegroundWindow();ShowWindow(hwd, SW_MINIMIZED);}/// <summary>/// 最大化/// </summary>private void Maximize(){var hwd = GetForegroundWindow();ShowWindow(hwd, SW_MAXIMIZED);}/// <summary>/// 還原/// </summary>private void Restore(){var hwd = GetForegroundWindow();ShowWindow(hwd, SW_RESTORE);}/// <summary>/// 關閉/// </summary>    private void Close(){Application.Quit();}
}

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

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

相關文章

國產延時芯片EH3B05上電延時3秒開關機芯片方案超低功耗

EH3B05-4941-24A1延時開關芯片是一款專為低功耗電子產品設計的高效時序控制器件&#xff0c;其核心功能在于提供精確的多通道延時信號輸出。該芯片采用SOT23-6超小封裝&#xff0c;體積僅為2.9mm2.8mm1.3mm&#xff0c;特別適合空間受限的便攜式設備。其工作電壓范圍覆蓋2.0V至…

大數據與財務管理專業如何轉型做金融科技?

在數字經濟加速演進的今天&#xff0c;金融行業的邊界正在被數據與技術重新定義。傳統金融崗位正經歷深刻變革&#xff0c;而"金融科技"&#xff08;FinTech&#xff09;作為技術與金融深度融合的產物&#xff0c;已成為行業轉型升級的核心引擎。越來越多具備數據背景…

Windows、Linux 系統 nodejs 和 npm 版本更新及錯誤修復

一、推薦使用 nvm 工具&#xff0c;直接通過命令行安轉和切換各個版本 無論是 Windows 平臺&#xff0c;還是 Linux 平臺&#xff0c;都推薦使用 nvm 工具。 nvm&#xff08;Node.js Version Management&#xff09;&#xff0c;是一個 nodejs 的版本管理工具。它是專門為解決…

【系列文章】Linux中的并發與競爭[03]-自旋鎖

【系列文章】Linux中的并發與競爭[03]-自旋鎖 該文章為系列文章&#xff1a;Linux中的并發與競爭中的第3篇 該系列的導航頁連接&#xff1a; 【系列文章】Linux中的并發與競爭-導航頁 文章目錄【系列文章】Linux中的并發與競爭[03]-自旋鎖一、自旋鎖二、實驗程序的編寫2.1驅動…

開始 ComfyUI 的 AI 繪圖之旅-Cosmos Predict2世界模型文生圖(全網首發,官網都沒有更新)(十三)

文章標題一、Cosmos-Predict21.Cosmos Predict2 Text2Image 工作流1.1 下載工作流文件1.2 手動模型安裝1.3 按步驟完成工作流運行本文介紹了如何在 ComfyUI 中完成 Cosmos-Predict2 文生圖的工作流 一、Cosmos-Predict2 Cosmos-Predict2 是由 NVIDIA 推出的新一代物理世界基礎模…

深度學習優化器進化史:從SGD到AdamW的原理與選擇

點擊 “AladdinEdu&#xff0c;同學們用得起的【H卡】算力平臺”&#xff0c;注冊即送-H卡級別算力&#xff0c;80G大顯存&#xff0c;按量計費&#xff0c;靈活彈性&#xff0c;頂級配置&#xff0c;學生更享專屬優惠。 引言&#xff1a;優化器——深度學習的引擎 在深度學習…

工商業屋頂分布式光伏監控系統助力園區企業錯峰有序用電

一、行業痛點與需求分析分布式光伏發電作為清潔能源的重要形式&#xff0c;近年來在工商業屋頂、戶用場景中快速普及。然而&#xff0c;其“小而散”的特性導致電網適應性、運維效率、安全管控等方面面臨顯著挑戰&#xff1a;1.電網適應性難題&#xff1a;高滲透率場景下&#…

華為初級認證培訓需要嗎?HCIA考試考什么內容?自學還是報班?

大家好&#xff0c;這里是G-LAB IT實驗室。 在信息技術發展日新月異的今天&#xff0c;華為的ICT認證逐漸成為了行業內重要的技術標桿。而HCIA&#xff08;Huawei Certified ICT Associate&#xff09;作為華為初級認證&#xff0c;對于ICT技術從業者來說&#xff0c;既是職業發…

元宇宙與旅游產業:沉浸式體驗重構旅行全流程

1 元宇宙重構旅游核心場景1.1 目的地體驗&#xff1a;從 “實地觀光” 到 “虛實融合深度探索”傳統旅游目的地體驗受限于時間、空間與物理條件&#xff0c;元宇宙通過 “數字孿生 超現實創作”&#xff0c;打造 “超越實地” 的沉浸式目的地體驗。在文化遺產體驗中&#xff0…

sqlite3移植和使用(移植到arm上)

s3c2440 方法一&#xff1a; 在代碼中編寫插入命令 1.復制源代碼并解壓 源代碼鏈接&#xff1a;SQLite Download Page 2.生成動態庫 3.將動態庫復制到根目錄下的/usr/lib/下 4.編寫一個操作文件sq_insert.c 5.編譯sq_insert.c 6.將生成的運行文件 復制到根目錄下 7.運行./s…

抗量子密碼學算法

抗量子密碼學算法的核心目標是抵抗量子計算機&#xff08;尤其是能運行Shor算法、Grover算法的大規模量子計算機&#xff09;的攻擊&#xff0c;其安全性不依賴于傳統的“大整數分解”“離散對數”等易被量子算法破解的數學問題&#xff0c;而是基于量子計算機難以高效求解的新…

設計模式(C++)詳解—工廠方法模式(2)

<摘要> 工廠方法模式就像一個萬能玩具工廠&#xff0c;爸爸&#xff08;抽象工廠&#xff09;定義了制作玩具的標準流程&#xff0c;但讓兒子們&#xff08;具體工廠&#xff09;決定具體生產哪種玩具。這種模式解決了"既要規范生產流程&#xff0c;又要靈活適應變化…

187. Java 異常 - 什么是異常?

文章目錄187. Java 異常 - 什么是異常&#xff1f;&#x1f6a8; 什么是“異常”&#xff1f;? 定義&#xff1a;&#x1f9f1; 異常對象中包含什么&#xff1f;Java 是怎么“處理”異常的&#xff1f;&#x1f9ef; 什么是異常處理器&#xff08;Exception Handler&#xff0…

3D Tiles 工具

概述 3D Tiles 工具是一組用于轉換、優化、處理和分析 3D Tiles 數據的工具和實用程序。 安裝 要在本地目錄中安裝 3D Tiles 工具&#xff0c;請運行以下命令&#xff1a; npm install 3d-tiles-tools如果想直接使用 Git 倉庫的克隆版本&#xff0c;請參閱開發者設置。 命…

【編號520】全國4500多個地震災害點位數據(2021.2-2025.8)

今天小編整理分享的是 全國4500多個地震災害點位數據&#xff08;2021.2-2025.8)。概況數據概況全國4500多個地震災害點位數據&#xff08;2021.2-2025.8&#xff09;地質災害點位數據-地震&#xff01;數據含發生時間、地點、經緯坐標、災害規模等。數據為shp格式和excel表格…

DriftingBlues: 4靶場滲透

DriftingBlues: 4 來自 <https://www.vulnhub.com/entry/driftingblues-4,661/> 1&#xff0c;將兩臺虛擬機網絡連接都改為NAT模式 2&#xff0c;攻擊機上做namp局域網掃描發現靶機 nmap -sn 192.168.23.0/24 那么攻擊機IP為192.168.23.128&#xff0c;靶場IP192.168.23…

GEO 優化專家孟慶濤以 AI 技術建體系,賦能多行業智能化轉型

在生成式 AI 重塑全球搜索生態的浪潮中&#xff0c;中國 GEO&#xff08;生成式引擎優化&#xff09;領域的開拓者孟慶濤以 "智能決策革命" 的技術框架&#xff0c;顛覆了傳統 "發發文章" 的簡單認知。作為遼寧粵穗網絡科技有限公司總經理兼 GEO 實驗室主任…

架構很簡單:從架構的角度學習源碼

緣起最近出差比較多&#xff0c;在路上思考&#xff1a;如何學習源碼&#xff1f;是的&#xff0c;面試官問你看了哪些源碼&#xff1f;講一講&#xff1f;更高級的&#xff1a;說一下&#xfeff;Netty黏包拆包怎么實現的&#xff1f;或者再問的偏一點&#xff1f;講一下某個功…

R的安裝與使用

工作與學習需要&#xff0c;對R需要有一定的熟悉&#xff0c;特此記錄 目錄R的安裝與使用R的安裝R的安裝與使用 R的安裝 1.找到R的官網&#xff0c;百度直接搜索&#xff0c;或者www.bing.com國際版搜索即可&#xff0c;下載R與Rstudio&#xff0c;Rstudio是R的開發集成工具 …

界面規范10-樹

字體字號和其他地方一致&#xff1a;.el-tree-node__label{font-size: $defaultTxtSize;font-family: $defaultFontFamily;}選中效果&#xff1a;.el-tree-node.is-current>.el-tree-node__content {background-color: #ffffff !important;color: #0000ff !important;font-w…