コガネブログ

平日更新を目標に Unity や C#、Visual Studio などのゲーム開発アレコレを書いていきます

【Unity】Unity エディタ上で Web ページを表示できる「WebViewHook」紹介

はじめに

「WebViewHook」を Unity プロジェクトに導入することで
Unity エディタ上で Web ページを表示できるようになります

使用例

f:id:baba_s:20190101134515p:plain

使い方

using UnityEditor;
using UnityEngine;

public sealed class Example : EditorWindow
{
    private WebViewHook m_webView   = null;
    private string      m_url       = "https://google.com";

    [MenuItem( "Tools/Example" )]
    private static void Load()
    {
        GetWindow<Example>();
    }

    private void OnEnable()
    {
        if ( m_webView != null ) return;
        m_webView = CreateInstance<WebViewHook>();
    }

    private void OnBecameInvisible()
    {
        if ( m_webView == null ) return;
        m_webView.Detach();
    }

    private void OnDestroy()
    {
        DestroyImmediate( m_webView );
    }

    private void OnGUI()
    {
        if ( m_webView.Hook( this ) )
        {
            m_webView.LoadURL( m_url );
        }

        if ( GUI.Button( new Rect( 0, 0, 25, 20 ), "←" ) )
        {
            m_webView.Back();
        }
        if ( GUI.Button( new Rect( 25, 0, 25, 20 ), "→" ) )
        {
            m_webView.Forward();
        }

        GUI.SetNextControlName( "urlfield" );
        m_url = GUI.TextField( new Rect( 50, 0, position.width - 50, 20 ), m_url );
        var ev = Event.current;

        if ( ev.isKey && GUI.GetNameOfFocusedControl().Equals( "urlfield" ) )
        {
            if ( ev.keyCode == KeyCode.Return )
            {
                m_webView.LoadURL( m_url );
                GUIUtility.keyboardControl = 0;
                m_webView.SetApplicationFocus( true );
                ev.Use();
            }
        }

        if ( ev.type == EventType.Repaint )
        {
            m_webView.OnGUI( new Rect( 0, 20, position.width, position.height - 20 ) );
        }
    }
}

上記のようなコードを記述することで使用できます