讲师中心 微信公众号

工具推荐

视频效率加速
AniShort
AniShort

AI短剧协同制作平台

updream

一键生成高质量推广成片

Laper
Laper

剧本策划到成片协作

Seko
Seko

AI短剧一键生成成片

如何在 Unity WebGL 中保持游戏画面比例不变(防拉伸/变形)

胖芳小哥_1663

胖芳小哥_1663

发布时间:2026-02-20 09:21:10

|

804人浏览过

|

来源于php中文网

原创

如何在 Unity WebGL 中保持游戏画面比例不变(防拉伸/变形)

本文介绍通过 javascript 动态控制 unity webgl 容器尺寸的方法,确保游戏始终按固定宽高比(如 16:9)自适应浏览器窗口,避免因窗口缩放导致的画面拉伸或裁剪失真。

本文介绍通过 javascript 动态控制 unity webgl 容器尺寸的方法,确保游戏始终按固定宽高比(如 16:9)自适应浏览器窗口,避免因窗口缩放导致的画面拉伸或裁剪失真。

Unity WebGL 构建后默认以 元素渲染游戏内容,其容器(通常为 #unity-container)若未做约束,会随浏览器窗口自由拉伸,造成画面畸变——尤其当用户调整浏览器大小或使用非目标分辨率设备时,UI 错位、角色变形、摄像机视野异常等问题频发。仅靠 CSS 的 min-width / min-height 或 vw/vh 单位无法实现等比缩放+居中适配,因为它们无法动态维持宽高比约束。

正确方案是:在 index.html 中注入轻量级 JavaScript,监听窗口尺寸变化,实时计算并设置容器的精确宽高,使其始终满足预设比例(例如 16:9),同时利用 CSS 实现居中与背景填充,保障视觉完整性。

✅ 推荐实现步骤

  1. 确认容器 ID:检查你的 index.html 中 Unity 容器元素是否具有 id="unity-container"(默认 Unity 模板中存在)。若已自定义(如 id="game-root"),请同步修改脚本中的 getElementById 参数。

  2. 插入响应式缩放脚本:将以下代码置于 index.html 的

    底部( 前),确保 DOM 加载完成后再执行:
<script>
function resizeGame() {
  const container = document.getElementById("unity-container");
  if (!container) return;

  const targetRatio = 16 / 9; // ← 根据你的游戏设计修改(如 4/3、1/1)
  const windowWidth = window.innerWidth;
  const windowHeight = window.innerHeight;
  const windowRatio = windowWidth / windowHeight;

  let newWidth, newHeight;
  if (windowRatio > targetRatio) {
    // 窗口更宽 → 以高度为基准,横向留黑边
    newHeight = windowHeight;
    newWidth = windowHeight * targetRatio;
  } else {
    // 窗口更高 → 以宽度为基准,纵向留黑边
    newWidth = windowWidth;
    newHeight = windowWidth / targetRatio;
  }

  container.style.width = `${newWidth}px`;
  container.style.height = `${newHeight}px`;
  container.style.margin = 'auto'; // 水平垂直居中(需配合 display: block)
}

// 首次加载 + 窗口缩放时触发
window.addEventListener('load', resizeGame);
window.addEventListener('resize', resizeGame);
</script>
  1. 补充关键 CSS 样式(在 style.css 或

/ 可选:强制 canvas 填满容器且不拉伸 /

unity-canvas {

width: 100% !important; height: 100% !important; display: block; }


> ⚠️ 注意事项:  
> - **不要**在 Unity Player Settings 中启用 “Resize Game View to Window Size”(WebGL 设置页),该选项会干扰 JS 控制逻辑;应保持关闭。  
> - 若使用自定义加载屏或多容器结构,请确保脚本作用于最终包裹 `<canvas>` 的最外层容器。  
> - 对于移动端 Safari,建议添加 `viewport` meta 标签以禁用双击缩放干扰:  
>   `<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">`  
> - 如需全屏无黑边(牺牲部分画面),可改用 `object-fit: cover` 配合 `100vw/100vh`,但会丢失内容完整性,不推荐用于 UI 敏感型游戏。

该方案完全脱离 Unity 引擎运行时干预,纯前端实现,兼容所有现代浏览器,性能开销极低(仅重设 CSS 尺寸),是 Unity WebGL 项目上线前必须配置的基础适配环节。
在线游戏
在线游戏

海量精品小游戏合集,无需安装即点即玩,休闲益智、动作闯关应有尽有,秒开即玩,轻松解压,快乐停不下来

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

函子Zion

一款支持AI搭建、可视化编辑和多端发布的全栈无代码开发平台。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

相关专题

更多
DOM是什么意思
DOM是什么意思

dom的英文全称是documentobjectmodel,表示文件对象模型,是w3c组织推荐的处理可扩展置标语言的标准编程接口;dom是html文档的内存中对象表示,它提供了使用javascript与网页交互的方式。想了解更多的相关内容,可以阅读本专题下面的文章。

6541

2024.08.14

html5动画制作有哪些制作方法
html5动画制作有哪些制作方法

html5动画制作方法有使用CSS3动画、使用JavaScript动画库、使用HTML5 Canvas等。想了解更多html5动画制作方法相关内容,可以阅读本专题下面的文章。

4831

2023.10.23

canva可画使用技巧汇总
canva可画使用技巧汇总

本专题汇集了PHP中文网精心整理的Canva可画新手使用技巧大全,专为零基础用户打造。无论你是想制作精美海报、PPT还是社交媒体配图,这里都有从注册登录、模板搜索到AI辅助设计、导出分享的全流程保姆级教程。通过深入浅出的图文指南,帮助你快速跨越设计门槛,轻松掌握Canva可画的实用操作,让每个人都能成为设计达人!

304

2026.05.19

unity是什么软件
unity是什么软件

Unity是一款强大而易于使用的游戏开发引擎,它为开发者提供了一套完整的工具和技术,使他们能够创建各种类型的游戏和交互式内容。本专题为大家提供unity相关的各种文章、以及下载和课程。

391

2023.08.09

C# Unity游戏开发与ECS架构实践
C# Unity游戏开发与ECS架构实践

本专题聚焦 C# 在 Unity 游戏开发中的应用,系统讲解 ECS(Entity-Component-System)架构设计、游戏对象管理、性能优化与内存控制策略。通过实际游戏案例,帮助开发者构建高性能、结构清晰的游戏系统,提高游戏开发效率与运行性能。

349

2026.04.13

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

0

2026.11.12

Go-Zero安装与goctl环境配置教程
Go-Zero安装与goctl环境配置教程

本专题围绕Go-Zero的安装与工具链配置展开,讲清Go版本要求、goctl安装方式、代理镜像、protoc依赖与环境变量设置,说明多版本共存、升级回退与CI流水线安装的做法,并整理安装阶段的常见报错与验证步骤。

0

2026.11.12

Go-Zero零基础入门教程
Go-Zero零基础入门教程

本专题整理Go-Zero的入门知识,从框架定位、环境准备到跑通第一个API服务,讲清目录分层、配置加载、日志与中间件的基本用法,并对比Gin、Kratos的差异,帮助Go开发者建立整体认知,判断它是否适合当前项目。

0

2026.11.12

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

120

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn