2012年3月24日土曜日

Unity エディットウィンドウ(2) 三角形の描画

エディットウィンドウで三角形を描画するテスト
GLを使用すると描画できた
Editor/EditWindowD.cs


using UnityEngine;
using UnityEditor;

public class EditWindowD : EditorWindow {
    Material    m_Material;    // マテリアル
    Vector2 []  m_VecArray;    // 頂点の配列
    int         m_VecNum = 3;  // 頂点数

    // メニューに追加
    [MenuItem ("Window/EditWindowD")]
    static void Init() {
        EditWindowD window = (EditWindowD)EditorWindow.GetWindow( typeof (EditWindowD) );
        window.Show();
    }

    // スクリプトのロード時に呼ばれる ScriptableObject.OnEnable()
    void OnEnable() {
        CreateVertexArray();
        CreateMaterial();
    }
    
    // エディタウィンドウのGUI処理をここに記述 EditorWindow.OnGUI()
    void OnGUI() {
        // 再描画イベント時に描画処理を行う
        if (EventType.Repaint != Event.current.type) return;

        // 実行するとウィンドウが真っ白
        //GL.Clear(false, true, Color.white);

        m_Material.SetPass(0);
        DrawLine();
    }

    // マテリアルの作成
    void CreateMaterial() {
        m_Material = new Material( "Shader \"Lines/Colored_Blended\" {" +
            "SubShader { Pass { " +
            "    Blend SrcAlpha OneMinusSrcAlpha " +
            "    ZWrite Off Cull Off Fog { Mode Off } " +
            "    BindChannels {" +
            "      Bind \"vertex\", vertex" + 
            "      Bind \"color\", color" +
            "} } } }" );
        m_Material.hideFlags = HideFlags.HideAndDontSave;
        m_Material.shader.hideFlags = HideFlags.HideAndDontSave;
    }

    // 頂点の配列を作成
    void CreateVertexArray() {
        m_VecArray = new Vector2[m_VecNum];
        m_VecArray[0] = new Vector2(50, 10);
        m_VecArray[1] = new Vector2(10, 60);
        m_VecArray[2] = new Vector2(90, 60);
    }

    // 線分の描画
    void DrawLine() {
        GL.Color(Color.blue);
        GL.Begin( GL.LINES );
        for(int i = 0; i < m_VecNum; i++) {
            int idx0 = i;
            int idx1 = (i == m_VecNum - 1) ? 0 : idx0 + 1;
            GL.Vertex(m_VecArray[idx0]);
            GL.Vertex(m_VecArray[idx1]);
        }
        GL.End();
    }
}