3个不稳定版本
0.3.1 | 2022年10月11日 |
---|---|
0.3.0 | 2022年10月11日 |
0.1.0 | 2022年10月8日 |
#1594 in 游戏开发
125KB
272 行
Blue Engine ImGUI插件
这是一个插件,它为ImGUI添加了对Blue Engine的支持。
入门指南
要开始使用,创建一个将包含您的GUI代码的新结构体。在我们的例子中
struct Counter {
count: u16
}
然后我们将实现插件的Gui
特质
impl Gui for MyGUI {
// This is the starting point for your UI code, it passes almost all variables of the engine as well
fn update(
// for accessing the values
&mut self,
// We can add underscore to ones we don't use, so they won't emit warnings
_window: &mut blue_engine::Window,
_renderer: &mut blue_engine::Renderer,
_objects: &mut std::collections::HashMap<&'static str, blue_engine::Object>,
_camera: &mut blue_engine::Camera,
_input: &blue_engine::InputHelper,
_plugin_data_storage: &mut std::collections::HashMap<&'static str, Box<dyn std::any::Any>>,
ui: &blue_engine_imgui::winit::Ui,
) {
/* Your UI code goes here */
}
}
最后是您的ImGUI代码
// Create a new imgui window to contain the UI
gui::Window::new("Counter Window").build(ui, || {
// Add a text to display the counter
ui.text(format!("The count is at: {}", self.count));
// + 1 per click
if ui.button("Add 1") {
self.count += 1;
}
});
还有最后一步才能使插件工作。我们需要在更新循环之前初始化插件
let gui_context = blue_engine_imgui::ImGUI::new(&engine.window, &mut engine.renderer, Box::new(MyGui {count: 0}));
这将基本上初始化imgui并创建运行插件所需的东西。然后引擎将运行两次,一次在所有其他之前以获取所有输入和事件,然后在渲染期间,以便显示GUI。剩下的就是将插件添加到引擎中
engine.plugins.push(Box::new(gui_context));
恭喜,您已经拥有了一个工作的GUI!
样式块
指南即将推出,我保证它很酷!
示例
请检查示例文件夹,以获取潜在的UI和您新项目的模板。
依赖理由
blue_engine
:显然用于导出设计API所需的某些组件和结构声明imgui-wgpu
:用于将ImGUI应用于wgpu图形后端。这是Blue Engine中使用的相同的图形后端imgui-winit-support
:Winit窗口支持。这是Blue Engine中使用的相同的窗口系统imgui
:ImGUI本身,用于获取设计API所需的组件和声明
依赖项
~33–67MB
~1M SLoC