Unity发布PC 设置窗口 无边框(显示win任务栏),或全屏无边框

这篇具有很好参考价值的文章主要介绍了Unity发布PC 设置窗口 无边框(显示win任务栏),或全屏无边框。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

设置win窗口无边框,就需要对获得Win的窗口信息,所以需要调用Win32的API [DllImport(“user32.dll”)]

Win32 API

//并不是很全,如果在此没找到想要的函数,可点击Win32 API查找
c#调用Win32详解

//下面脚本中 可以设置 除任务栏外无边框,也可以设置全屏无边框

using System;
using System.Runtime.InteropServices;
using UnityEngine;

public class MyWindow : MonoBehaviour
{

    //使用查找任务栏
    [DllImport("user32.dll")]
    static extern IntPtr FindWindow(string strClassName, int nptWindowName);
    //当前窗口
    [DllImport("user32.dll")] static extern IntPtr GetForegroundWindow();
    //获取窗口位置以及大小
    [DllImport("user32.dll")] static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect);
    [StructLayout(LayoutKind.Sequential)]
    private struct RECT
    {
        public int Left; //最左坐标
        public int Top; //最上坐标
        public int Right; //最右坐标
        public int Bottom; //最下坐标
    }
    //设置窗口位置,尺寸
    [DllImport("user32.dll")] static extern bool SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
    //设置无windows自带边框
    [DllImport("user32.dll")] static extern IntPtr SetWindowLong(IntPtr hwnd, int _nIndex, int dwNewLong);

    const uint SWP_SHOWWINDOW = 0x0040;
    const int GWL_STYLE = -16;
    const int WS_BORDER = 1;

    Resolution[] resolutions;//分辨率
    private Rect screenPosition;//最终的屏幕的位置和长宽



    void Awake()
    {
        // Cursor.visible = false; // 鼠标隐藏
        //获取当前屏幕分辩率  
        resolutions = Screen.resolutions;
        //除任务栏外最大化窗口
        witnOutBorder();
        //设置全屏无边框
        //Setposition();
    }
    /// <summary>
    /// 获取当前窗口尺寸
    /// </summary>
    /// <returns></returns>
    public Rect GetWindowInfo()
    {
        RECT rect = new RECT();
        Rect targetRect = new Rect();
        GetWindowRect(GetForegroundWindow(), ref rect);
        targetRect.width = Mathf.Abs(rect.Right - rect.Left);
        targetRect.height = Mathf.Abs(rect.Top - rect.Bottom);

        //锚点在左上角
        targetRect.x = rect.Left;
        targetRect.y = rect.Top;
        return targetRect;
    }
    /// <summary>
    /// 获取任务栏高度
    /// </summary>
    /// <returns>任务栏高度</returns>
    private int GetTaskBarHeight()
    {
        int taskbarHeight = 10;
        IntPtr hWnd = FindWindow("Shell_TrayWnd", 0);       //找到任务栏窗口
        RECT rect = new RECT();
        GetWindowRect(hWnd, ref rect);                      //获取任务栏的窗口位置及大小
        taskbarHeight = (int)(rect.Bottom - rect.Top);      //得到任务栏的高度
        return taskbarHeight;
    }
    /// <summary>
    /// 除任务栏外最大化窗口(无边框)
    /// </summary>
    private void witnOutBorder()
    {
        //新的屏幕宽度
        screenPosition.width = resolutions[resolutions.Length - 1].width;
        //新的屏幕高度=当前屏幕分辨率的高度-状态栏的高度
        int currMaxScreenHeight = Screen.currentResolution.height - GetTaskBarHeight();
        screenPosition.height = currMaxScreenHeight;
        //新的分辨率(exe文件新的宽高)  这个是Unity里的设置屏幕大小,
        Screen.SetResolution((int)screenPosition.width, (int)screenPosition.height, false);

        //screenPosition.x = (int)((Screen.currentResolution.width - screenPosition.width) / 2);//宽度居中
        //screenPosition.y = (int)((Screen.currentResolution.height - screenPosition.height) / 2);//高度居中

        //设置无框
        SetWindowLong(GetForegroundWindow(), GWL_STYLE, WS_BORDER);
        //exe居左上显示;
       bool result = SetWindowPos(GetForegroundWindow(), 0, 0, 0, (int)screenPosition.width, (int)screenPosition.height, SWP_SHOWWINDOW);
        //exe居中显示;
       // bool result = SetWindowPos(GetForegroundWindow(), 0, (int)screenPosition.x, (int)screenPosition.y,  (int)screenPosition.width, (int)screenPosition.height, SWP_SHOWWINDOW);
    }

    /// <summary>
    /// 设置全屏无边框
    /// </summary>
    private void Setposition()
    {
        SetWindowLong(GetForegroundWindow(), GWL_STYLE, WS_BORDER);      //无边框
        bool result = SetWindowPos(GetForegroundWindow(), 0, 0, 0, resolutions[resolutions.Length - 1].width, resolutions[resolutions.Length - 1].height, SWP_SHOWWINDOW);
    }
}

运行第一次 界面还是会出现边框,需要在打包时再设置一下,
unity 无边框,Unity小问题,unity,c#,游戏引擎
unity 无边框,Unity小问题,unity,c#,游戏引擎

参考无边框设置链接文章来源地址https://www.toymoban.com/news/detail-519154.html

到了这里,关于Unity发布PC 设置窗口 无边框(显示win任务栏),或全屏无边框的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity 3D PC平台发布|| Unity 3D Web 平台发布||Unity 3D Android平台发布

    PC 是最常见的游戏运行平台。 随着欧美游戏的崛起,PC 平台随之发生游戏登陆大潮。 在 PC 平台上发布游戏的步骤: 打开要发布的 Unity 3D 工程,执行  File  →  Build Settings  菜单命令。 在  Platform  列表框中选择  PC,MacLinux Standalone  选项,在右侧的  Target Platform  下拉列

    2024年02月04日
    浏览(33)
  • 第五十八章 Unity 发布PC平台

    本章节我们介绍一些如何打包游戏到PC平台,这里重点介绍如何制作Windows操作系统下的游戏包。首先,我们创建一个“PcDemo”工程,然后简单布置一下场景内容,如下 想要打包发布Unity项目,我们可以在菜单栏选择“File”→ “Build Settings”菜单命令。 在Platform列表中显然了我

    2024年02月11日
    浏览(26)
  • win10/win11程序窗口最小化后, 点击任务栏无法弹出的问题处理

    在本人使用win10、win11系统时,有时打开某个程序的多个窗口,最小化该程序窗口后,长时间不对该窗口做任何操作。 在较长时间后,点击任务栏,发现无法弹出该程序窗口,但是在任务栏上 右键 点击该窗口图标,选择 关闭窗口 可以正常关闭该窗口,说明程序未卡死、 这种

    2024年02月16日
    浏览(47)
  • 修改Unity发布的pc包exe文件的属性信息

      大家好,我是阿赵。   最近一直在接入各种pc端的sdk,遇到一个问题。有些平台要求上架的pc的exe文件里面有对应的详细信息,比如文件说明、版本、版权等信息。 随便看一个我们平常用的软件,比如微信pc端exe,会发现的确是有这些信息的 但从Unity打包的exe文件,在

    2024年01月20日
    浏览(35)
  • [ Windows 10 ] 任务栏按钮不显示正在打开的窗口了(打开任何程序任务栏图标按钮都不显示)

    系统是Windows 10 professional版本,在一次突然开机后,发现点开程序后,在任务栏什么都不显示,任务栏按钮和图标状态均不显示了,但是程序在运行。 当时兄弟们我心态直接蹦了啊,100万个草泥马根本停不下来,口里不断重复学习英文单词: what\\\'s the f**king going on? 异常情况如

    2024年02月04日
    浏览(37)
  • Win10系统电脑如何设置窗口绿色护眼色

    方法一:编辑注册表 1、右击屏幕左下角的“ Windows ”按钮,从弹出的快捷菜单中选择“运行”命令: 2、在打开的“ 运行 ”对话框中,输入“ regedit ”命令,并“ 确定 ”: 3、在打开的注册表编辑器窗口中,依次定位到:HKEY_CURRENT_USERControl PanelDesktopColors: 4、双击“ W

    2024年02月04日
    浏览(34)
  • Windows10 pc使用Apple Studio Display显示器设置

    近期购买了台Apple Studio Display显示器,大概花了约1.5w,连接windows台式机,显卡为NVIDA GTX-1660,而Apple Studio Display只有雷电接口,尝试多种转接方式,均以失败告终,最终参考b站up主使用贝尔金VR线成功,贝尔金VR线京东链接 , 附图如下: 这边测试NVIDA RTX-2060 Super 、NVIDA GTX-16

    2024年02月11日
    浏览(166)
  • win10 任务栏预览设置为列表效果

    在win10系统,当同一个应用(如文件资源管理器,git bash,word等)打开多个页面时,当个数少于17(大约)个时,其默认预览效果为平铺,在大于17个时,才使用列表效果,如下图所示。使用平铺效果选择页面比较困难。 打开注册表,设置使用列表预览方式的阈值为1。 步骤

    2024年02月09日
    浏览(21)
  • win10系统任务栏不显示已开启的软件-解决办法

    首先我们要排除是否是任务栏属性被关闭: 如果不是设置问题,那我们需要去任务管理器里看看: 查看explorer.exe是否开启,要求应该是关闭状态。 之后应该是不能通过win+R来启动“运行”来输入cmd了,我们可以通过任务管理器: 来唤醒dos窗口在里面直接输入: reg add HKCUS

    2024年02月11日
    浏览(28)
  • Win11预览体验计划显示Your PC does not meet the minimum hardware requirements...的解决方案

    某一天你心血来潮,打算参与Win11 预览体验计划,但体验计划页面却显示“Your PC does not meet the minimum hardware requirements for Windows11…”。 一种解决思路: 去以下网页下载Offline Insider Enroll软件,管理员权限运行后,选择你想参与的体验计划通道。 Offline Insider Enroll https://github.

    2024年02月04日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包