
30行代码给游戏加设置面板egui Bevy/Miniquad 实战【免费下载链接】eguiegui: an easy-to-use immediate mode GUI in Rust that runs on both web and native项目地址: https://gitcode.com/GitHub_Trending/eg/egui你的Rust游戏跑起来了现在要加暂停菜单、音量条和HUD——你需要一个不拖累引擎帧率的轻量GUI。本文用egui解决它每帧在游戏循环里画几行代码核心30行出可用面板。一、先想清楚你要的GUI长什么样血条每帧跳动、FPS计数器每秒刷新、暂停菜单长时间遮挡输入——这三个需求的刷新节奏完全不同。传统保留模式GUI建一次控件、持一个引用改个数得翻出对象调set在每帧都在变的游戏状态里很别扭。即时模式反过来像每帧重画一遍草图egui每秒60次重建整个UI界面永远等于你当前数据没有回调也没有引用要维护。二、跑起来最小可运行路径最省事的路径是官方框架 crates/eframe/。它把输入、布局、渲染全接好了往Bevy、Miniquad里嵌egui本质也是同样四步喂输入、跑UI函数、处理输出、画三角形。第1步 装先跑通全量演示git clone https://gitcode.com/GitHub_Trending/eg/egui cd egui cargo run --release -p egui_demo_app跑完会弹出一个窗口按钮、滑块、色盘、表格全在里面。这个演示应用就是后面查API的活字典。第2步 接接入你的应用[dependencies] eframe 0.36独立应用一行交给eframe托管事件循环它全包了eframe::run_native(Game UI, eframe::NativeOptions::default(), Box::new(|_cc| Ok(Box::MyApp::default())));第3步 画写你的控件fn ui(mut self, ui: mut egui::Ui, _f: mut eframe::Frame) { egui::CentralPanel::default().show(ui, |ui| { ui.add(egui::Slider::new(mut self.volume, 0.0..1.0)); if ui.button(保存).clicked() { self.save(); } }); }跑完你应该看到一个带滑块的窗口拖动滑块volume当场更新点了保存就是本帧的点击不用注册任何回调。三、让它好用从能跑到舒服坑1中文全变豆腐块现象按钮上一放中文全是方块。原因内置默认字体只覆盖拉丁字符。解法let mut fonts egui::Fonts::default(); fonts.add_font(egui::FontId::proportional(16.0), egui::FontData::from(std::fs::read(NotoSansSC.ttf)?.into())); ctx.set_fonts(fonts);放在游戏加载阶段做别在运行时加载否则卡几秒。坑2高DPI屏上发虚现象1080p屏锐利2K屏一糊。原因你把逻辑尺寸当成了纹理尺寸。解法渲染前乘上像素比let px_size (size * ctx.pixels_per_point()) as u32;坑3滚动区一开大列表CPU飙高现象一千条目的ScrollArea打开就吃CPU。原因即时模式每帧做全量布局列表越长开销越大。解法分页或只构建可见区。顺带说个好消息egui只在有交互或动画时重绘闲置时CPU占用接近零。四、选哪个适配矩阵引擎/平台桥接库成熟度适合做什么Bevybevy_egui社区维护最活跃3D游戏内设置面板、HUDMiniquadminiquad-egui社区维护轻量2D游戏原生窗口egui-winit egui-wgpu官方维护非游戏的桌面应用浏览器 Wasmeframe官方维护Web工具、网页小游戏不确定就按场景二选一写游戏选Bevy系写独立应用直接用eframe不用自己碰渲染层。五、下一步跑cargo run --release -p egui_demo_app把演示应用当API字典翻一遍打开 examples/hello_world/src/main.rs把示例里的滑块换成你的游戏设置准备嵌进自己的引擎时读 crates/egui/README.md 的 Integrations 章节它列出了每帧必须做的四件事新组件看 CHANGELOG.md【免费下载链接】eguiegui: an easy-to-use immediate mode GUI in Rust that runs on both web and native项目地址: https://gitcode.com/GitHub_Trending/eg/egui创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考