Unity 按比例缩放游戏窗口

本文介绍了如何在Unity中设置可缩放窗口,通过启用Player Settings的Resizeable Window选项,并使用win32Api进行窗口大小调整。虽然目前的代码实现存在限制,仅支持拖动窗口左右边进行缩放,且有闪屏问题,但提供了初步的实现思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,在Player Setting面板中找到 Resizeable Window(可缩放窗口),后面打钩

Player Settings
代码:

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函数
缺点:由于个人知识和技术基础太差,都是从网上东拼西凑搞出来的代码,所以只做出拉动窗口左右边才有缩放效果,而且闪屏。

Unity是一款专业的游戏开发引擎,但也可以用来实现窗口拖拽缩放功能。在Unity中,可以使用RectTransform组件来控制界面元素的位置和大小。接下来,我将介绍一种简单的方法来实现窗口的拖拽和缩放功能。 首先,在Unity中创建一个UI界面,并添加一个Image组件作为窗口的背景。然后,给窗口的Image组件添加一个拖拽脚本和一个缩放脚本。 拖拽脚本的作用是控制窗口的拖拽功能。在脚本中,我们可以通过监听鼠标按下、鼠标拖动和鼠标放开的事件来实现窗口的拖拽。具体步骤如下: 1. 在脚本中定义一个bool类型的变量,用于判断是否可以进行拖拽操作。 2. 在Update函数中,通过Input.GetMouseButtonDown和Input.GetMouseButtonUp函数判断鼠标是否按下或放开。如果鼠标按下,将上述bool变量设置为true,如果鼠标放开,将bool变量设置为false。 3. 还需要判断鼠标是否在窗口的范围内。可以使用RectTransform组件的rect属性获取窗口的矩形区域,然后使用RectTransformUtility类的ScreenPointToLocalPointInRectangle函数判断鼠标的位置是否在窗口的范围内。 4. 如果鼠标在窗口范围内并且bool变量为true,可以通过RectTransform组件的anchoredPosition属性来设置窗口的位置。 缩放脚本的作用是实现窗口缩放功能。在脚本中,我们可以通过鼠标滚轮的输入来控制窗口缩放。具体步骤如下: 1. 在脚本中定义一个float类型的变量,用于控制窗口缩放比例。 2. 在Update函数中,通过Input.GetAxis函数来获取鼠标滚轮的输入值。 3. 根据鼠标滚轮的输入值来增加或减少窗口缩放比例。可以使用RectTransform组件的sizeDelta属性来设置窗口的大小。 通过上述步骤,我们可以实现Unity窗口的拖拽和缩放功能。这样用户就可以通过鼠标来拖动窗口并调整窗口的大小,提升用户体验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值