You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过C#脚本修改Unity编辑器中GameWindow的宽高比

在Unity编辑器中用C#修改GameWindow宽高比的实现方法

因为Unity的GameView(即GameWindow)相关的宽高比设置API并非公开接口,所以需要通过反射调用内部方法实现修改。以下是两种常用实现方式,脚本需放在Assets/Editor目录下(仅在编辑器环境生效):

方式一:直接设置宽高比值(如16:9、4:3)

这种方式会将GameWindow切换到对应的宽高比预设,代码如下:

using UnityEditor;
using UnityEngine;
using System.Reflection;

public static class GameWindowAspectRatioTool
{
    // 添加编辑器菜单,快速设置16:9
    [MenuItem("Tools/GameWindow宽高比/设置为16:9")]
    public static void SetAspectRatio16_9()
    {
        SetTargetAspectRatio(16f / 9f);
    }

    // 添加编辑器菜单,快速设置4:3
    [MenuItem("Tools/GameWindow宽高比/设置为4:3")]
    public static void SetAspectRatio4_3()
    {
        SetTargetAspectRatio(4f / 3f);
    }

    // 核心设置方法
    private static void SetTargetAspectRatio(float targetRatio)
    {
        // 获取当前GameView窗口实例
        var gameView = EditorWindow.GetWindow<GameView>();
        if (gameView == null) return;

        // 反射调用GameView内部的GetSizeGroup方法
        var gameViewType = typeof(GameView);
        var getSizeGroupMethod = gameViewType.GetMethod("GetSizeGroup", BindingFlags.Instance | BindingFlags.NonPublic);
        var sizeGroup = getSizeGroupMethod.Invoke(gameView, null);

        // 反射调用SizeGroup的SetRatio方法设置宽高比
        var sizeGroupType = sizeGroup.GetType();
        var setRatioMethod = sizeGroupType.GetMethod("SetRatio", BindingFlags.Instance | BindingFlags.Public);
        setRatioMethod.Invoke(sizeGroup, new object[] { targetRatio });

        // 刷新GameView窗口
        gameView.Repaint();
    }
}

使用说明

  1. 将脚本放在Assets/Editor目录下,Unity会自动识别为编辑器扩展。
  2. 打开Unity编辑器顶部的Tools/GameWindow宽高比菜单,选择对应选项即可修改GameWindow的宽高比。

方式二:设置自定义分辨率(间接修改宽高比)

如果需要固定具体的分辨率(如1920x1080),可以用这种方式切换到自定义尺寸模式,代码如下:

using UnityEditor;
using UnityEngine;
using System.Reflection;

public static class GameWindowCustomSizeTool
{
    [MenuItem("Tools/GameWindow自定义尺寸/设置为1920x1080")]
    public static void SetCustomSize1920x1080()
    {
        SetCustomSize(1920, 1080);
    }

    [MenuItem("Tools/GameWindow自定义尺寸/设置为1280x720")]
    public static void SetCustomSize1280x720()
    {
        SetCustomSize(1280, 720);
    }

    private static void SetCustomSize(int width, int height)
    {
        var gameView = EditorWindow.GetWindow<GameView>();
        if (gameView == null) return;

        var gameViewType = typeof(GameView);

        // 获取并设置内部字段:切换到自定义尺寸模式
        var sizeTypeField = gameViewType.GetField("m_SizeType", BindingFlags.Instance | BindingFlags.NonPublic);
        sizeTypeField.SetValue(gameView, (int)GameViewSizeType.Custom);

        // 设置自定义宽高值
        var customWidthField = gameViewType.GetField("m_CustomWidth", BindingFlags.Instance | BindingFlags.NonPublic);
        var customHeightField = gameViewType.GetField("m_CustomHeight", BindingFlags.Instance | BindingFlags.NonPublic);
        customWidthField.SetValue(gameView, width);
        customHeightField.SetValue(gameView, height);

        // 调用内部方法标记尺寸变更
        var setSizeDirtyMethod = gameViewType.GetMethod("SetSizeDirty", BindingFlags.Instance | BindingFlags.NonPublic);
        setSizeDirtyMethod.Invoke(gameView, null);

        // 刷新窗口
        gameView.Repaint();
    }
}

注意事项

  • 反射依赖Unity内部API,不同Unity版本(如2020+和旧版本)可能存在字段/方法名差异,若失效需检查对应版本的GameView内部结构。
  • 编辑器扩展脚本仅在Unity编辑器中生效,打包后的游戏不会执行这些代码。

内容的提问来源于stack exchange,提问作者user17248503

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 17:55:28