我是否可以访问创建Unity应用程序窗口的代码? 例如,在WPF中,您可以设置窗口的调整大小模式,最顶层,窗口启动状态等.MainWindow.cs继承自System.Window命名空间中的Window类,允许您设置所有这些内容。 我试图找到类似的类,它允许我在Unity3D中做同样的事情。
在WPF中
Unity3D创建了应用程序窗口
答案 0 :(得分:1)
对于后期跟进感到抱歉,但是这也是可能的。要获得此功能,您需要使用user32.dll。请记住,这是基于Windows的。
因为这只是windows standalone中的必需品,而且可能是统一编辑器,所以使用时需要
#if UNITY_STANDALONE_WIN || UNITY_EDITOR
现在你想使用user32.dll中给出的窗口位置,所以你们首先要从dll导入这个功能
[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
并将其绑定到变量
private static extern bool SetWindowPos(IntPtr hwnd, int hWndInsertAfterint x, int Y, int cx, int cy, int wFlags);
您还想找到可以以类似方式完成的窗口。但不要忘记改变当前的" WindowTitle"到你的实际窗口标题。
[DllImport("user32.dll", EntryPoint = "FindWindow")]
public static extern IntPtr FindWindow(System.String className, System.String windowName);
现在剩下的就是一个调用函数,所以你可以实际设置窗口的位置。这将是以下
public static void SetPosition(int x, int y, int resX = 0, int resY = 0)
{
SetWindowPos(FindWindow(null, "WindowTitle"), 0, x, y, resX, resY, resX * resY == 0 ? 1 : 0);
}
当然,不要忘记用
结束#if#endif
现在你可以在Awake / OnEnable中调用Setposition函数,就像这样
void Awake()
{
SetPosition(0,0);
}
其他功能,如调整大小可能会更具挑战性,但不应该是不可能的。您可以查看msdn windowFunctions以获取有关此
的更多信息以防万一。这是窗口位置的全功能副本。只需将WindowModifier组件附加到gameObject,将窗口标题更改为相应的标题,以及您想要的位置
using UnityEngine;
using System;
using System.Collections;
using System.Runtime.InteropServices;
public class WindowModifier: MonoBehaviour
{
#if UNITY_STANDALONE_WIN || UNITY_EDITOR
[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
private static extern bool SetWindowPos(IntPtr hwnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags);
[DllImport("user32.dll", EntryPoint = "FindWindow")]
public static extern IntPtr FindWindow(System.String className, System.String windowName);
public static void SetPosition(int x, int y, int resX = 0, int resY = 0)
{
SetWindowPos(FindWindow(null, "My window title"), 0, x, y, resX, resY, resX * resY == 0 ? 1 : 0);
}
#endif
void Awake ()
{
SetPosition(0,0);
}
}