首先,在Player Setting面板中找到 Resizeable Window(可缩放窗口),后面打钩
代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.Runtime.InteropServices;
public class NewBehaviourScript : MonoBehaviour
{
[DllImport("user32.dll")]
private static extern IntPtr GetActiveWindow();
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);
[DllImport("user32.dll")]
public static extern bool GetWindowRect(IntPtr hWnd, ref RECT rect);
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int Left; //最左坐标
public int Top; //最上坐标
public int Right; //最右坐标
public int Bottom; //最下坐标
}
[DllImport("user32.dll")]
public static extern bool MoveWindow(IntPtr hWnd, int x, int y, int width, int height, bool repaint);
//***********************
IntPtr myintptr;
RECT rect;
float w_h;
int w;
int h;
int x;
int y;
void Start()
{
myintptr = GetActiveWindow();
w_h = 16f / 9f; //窗口横纵比例
GetWindowRect(myintptr, ref rect);
w = rect.Right - rect.Left; //窗口的宽度
h = rect.Bottom - rect.Top; //窗口的高度
}
void LateUpdate()
{
SetWindow();
}
void SetWindow()
{
GetWindowRect(myintptr, ref rect);
w = rect.Right - rect.Left; //窗口的宽度
h = rect.Bottom - rect.Top; //窗口的高度
x = rect.Left;
y = rect.Top;
float z = w / h;
if (z > w_h + 0.01f || z < w_h - 0.01f)
{
h = (int)(w / w_h);
MoveWindow(myintptr, x, y, w, h, true);
}
}
}
以上代码调用了win32Api,这里是一位作者总结的User32.dll函数
缺点:由于个人知识和技术基础太差,都是从网上东拼西凑搞出来的代码,所以只做出拉动窗口左右边才有缩放效果,而且闪屏。