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平台发布

    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日
    浏览(8)
  • 第五十八章 Unity 发布PC平台

    第五十八章 Unity 发布PC平台

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

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

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

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

    修改Unity发布的pc包exe文件的属性信息

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

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

    [ Windows 10 ] 任务栏按钮不显示正在打开的窗口了(打开任何程序任务栏图标按钮都不显示)

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

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

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

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

    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日
    浏览(29)
  • win10 任务栏预览设置为列表效果

    win10 任务栏预览设置为列表效果

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

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

    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日
    浏览(12)
  • win10系统任务栏不显示已开启的软件-解决办法

    win10系统任务栏不显示已开启的软件-解决办法

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

    2024年02月11日
    浏览(9)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包