Chapter 02

UImGui の基本

ousttrue
ousttrue
2021.12.25に更新

SampleDemoWindow を使ってみる

Packages/UImGui/Sample/SampleDemoWindow.prefab をシーンに展開。

  • Camera に MainCamera を設定
  • RenderType を Procedual に変更

Play する。

動いた。

ImGui の MainLoop

ImGui の基本構造は下記のようになっています。

詳しくは、
https://github.com/ocornut/imgui/blob/master/examples/example_win32_directx11/main.cpp

初期化
ImGui.CreateContext()

// フォント初期化
// 最初に ImGui.NewFrame() を呼ぶ前に fontatlas のテクスチャを生成して
// io にテクスチャを渡してやる必要がある

While True // mainloop
{
  // NewFrame を呼び出す前に io 更新する必要がある。
  // 最低限、io.DisplaySize
  // その他、マウスイベント、キーボードイベントを準備する
  ImGui.NewFrame()
  
  // ImGui のGUIを構築する。Begin ~ End
  
  ImGui.Render()
  
  // ImGui の DrawList を描画して画面を更新する
  Renderer(ImGui.GetDrawList())
}

ImGui.DeleteContext()

UImGui では、メインループの制御はすべて UImGui コンポーネントがやってくれます。
ユーザーは、ImGui.NewFrame()ImGui.Render() の間の部分を作成します。

Minimum なシーンを自作する

// Main.cs
using UnityEngine;

public class Main : MonoBehaviour
{
	private void OnEnable()
	{
	    UImGui.UImGuiUtility.Layout += OnLayout;
	}

	private void OnDisable()
	{
	    UImGui.UImGuiUtility.Layout -= OnLayout;
	}

	private void OnLayout(UImGui.UImGui uImGui)
	{
	    ImGuiNET.ImGui.ShowDemoWindow();
	}
}
  • camera
  • empty
    • Main をアタッチ
    • UImGui をアタッチ
      • Camera
      • mesh procedual
      • shader(Packages-UImGui-Resources-DefaultShader)
      • style(Packages-UImGui-Resources-DefaultStyle)

UImGui の動作

  • Awake で ImGui.CreateContext()
  • Font初期化
  • MainLoop
    • Layout 呼び出し
  • Destroy

Widget を探す

demo

ギャラリー

眺める