17
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

UnityEditor拡張でグラフを描く際に使用したメソッドの解説

Last updated at Posted at 2018-09-22

無意味なグラフを描くだけのUnityEditor拡張を作りました。

  • gif

RadarChart.gif
CircularRotation.gif

  • 動画 - Youtube

  • ↑のような何かそれっぽいことをしているUIが、UnityEditor上でウィンドウとして表示できるエディター拡張です。

  • 何もしていないのに何かしているように見せることができます。

  • UIを表示するだけでそれ以外の事は特に何もしていません。

本題

上記のUIを作成する際に使用したメソッドを簡単にまとめました。

Repaint

  • UnityEditor上のOnGUIで描画されているUIは何かしらの更新がないと止まった状態になってしまうので、Repaintで画面の更新を行います。詳しくは既に解説された記事が。
  • ↓のようにUpdateでRepaintを呼んで更新をかけています。
void OnGUI ()
{
    // Do something.
}

void Update()
{
    Repaint();
}

Handles

  • ここに載っているモノが今回使用した図形を描画するメソッドになっています。
  • 元々グラフを描くためのモノではないので少々ややこしい使い方になりますが、Unity標準機能です。
  • Handlesポジション関連
    • ポジションのzは小さい数値にしておくのがオススメ。(ニア/ファーで描画されなくなってしまうため)
    • ポジションを指定する際、z座標を0にするかVector2で指定すれば勝手に0になるので、同じ奥行になり、平面の図形を描けます。
  • (https://docs.unity3d.com/ScriptReference/Handles.html )

Handles.color

Handles.color = Color.magenta;

Handles.DrawLine

image.png

Handles.DrawLine(Vector3 p1, Vector3 p2);

Handles.DrawLines

image.png

Handles.DrawLines(Vector3[] lineSegments);

Handles.DrawSolidArc

image.png

  • 内側が塗りつぶされる円弧を描画します。
  • normalにVector3.forwardを指定するとEditor拡張ウィンドウ上でのカメラ方向を向くので描画される。
  • 以降にも出てくるnormalは基本的にVector3.forwardを指定しておけば、normalで上手くいかず描画されなくなる事はないかと。
  • (https://docs.unity3d.com/ScriptReference/Handles.DrawSolidArc.html )
Handles.DrawSolidArc(Vector3 center, Vector3 normal, Vector3 from, float angle, float radius);

Handles.DrawSolidDisc

image.png

Handles.DrawSolidDisc(Vector3 center, Vector3 normal, float radius);

Handles.DrawSolidRectangleWithOutline

image.png

Handles.DrawSolidRectangleWithOutline(Vector3[] verts, Color faceColor, Color outlineColor);

Handles.DrawWireArc

image.png

Handles.DrawWireArc(Vector3 center, Vector3 normal, Vector3 from, float angle, float radius);

Handles.DrawWireDisc

image.png

Handles.DrawWireDisc(Vector3 center, Vector3 normal, float radius);

Handles.DrawWireCube

image.png

Handles.DrawWireCube(Vector3 center, Vector3 size);

参考・引用サイト

最後に

17
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?