6
3

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 1 year has passed since last update.

VRC用の拡張Editorを作ってみよう(1)

Last updated at Posted at 2021-11-20

#目次
1.Editorフォルダを作成する
2.スクリプトファイルを作成する
3.EditorWindowを作成する
4.Avatarをセットできるようにしてみる
5.次回

#1.Editorフォルダを作成する
まずはじめにスクリプトを入れるEditorフォルダーを作成していきます
Assetsで右クリックして__Create/Folder__を選択します
フォルダーが作成されたら、名前は__"Editor"__に変更しておきましょう
フォルダーが完成しました
Editor2.png

#2.スクリプトファイルを作成する
先ほど作成したフォルダーにスクリプトファイルを作成します
__Editor__フォルダーを開き右クリックして__Create/C#Script__を選択します
スクリプトが作成されたら名前を変更しましょう
私は__TestEditor__に変更しました
これでスクリプトファイルは作成されました
Script.png

#3.EditorWindowを作成する
###最初にスクリプトファイルを開いてみる
先ほど作成したスクリプトファイルを開きます
スクリプトエディターが開くとこのようなものが作成されているかと思います

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestEditor : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

確認できましたね

####まずはEditorを扱うためにUnityEditorを追加していきます
__using UnityEngine__の下に using UnityEditor を追加しましょう。
追加ができたら必要のない__void Start__と__void Update__も削除してしまいましょう

これらが済むとこんな感じになると思います

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class TestEditor : MonoBehaviour
{
    
}

####次にEditorWindowを継承します
EditorWindowの機能を使うために継承を行います
__MonoBehaviour__から

public class TestEditor : MonoBehaviour

__EditorWindow__に変更します

public class TestEditor : EditorWindow

変更ができるとこんな感じになると思います

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class TestEditor : EditorWindow
{
    
}

###準備が整ったのでEditorWindowを開けるようにしていきます
まずはメニューバーに表示するためのMenuItemを作成していきます

public class TestEditor : EditorWindow
{
    [MenuItem("TestEditor/TestEditor")]
}

次にウィンドウを取得して表示できるようにします
ウィンドウを開くために__EditorWindow.GetWindow__を使用します

EditorWindow.GetWindow<"クラス名">("フローティングのユーティリティウィンドウを作成するか", "タイトル");

これらを設定していきます
今回の場合はこんな感じです

EditorWindow.GetWindow<TestEditor>(true, "TestEditor");

これを書き加えて...

public class TestEditor : EditorWindow
{
    [MenuItem("TestEditor/TestEditor")]

	public static void ShowWindow()
	{
		EditorWindow.GetWindow<TestEditor>(true, "TestEditor");
	}
}

これでEditorを開く準備ができました
Ctrl + Sで__保存__してUnityで開いてみましょう

Menubar.png

MenuItemに設定した名前がメニューバーに追加されていると思います

Editor.png

開きました

#4.Avatarをセットできるようにしてみる
###まずはOnGUIを使って描画処理を出来るようする

先ほど作成した__ShowWindow__の下に__OnGUI__を書きます

public static void ShowWindow()
	{
		EditorWindow.GetWindow<TestEditor>(true, "TestEditor");
	}

	private void OnGUI()
	{
		
	}

###次にアバターをセットするための変数を宣言します
変数を宣言する前に__VRCAvatarDescriptor__を使用するためのusingを追加していきます
unityにVRC3SDKをインポートしていなければ、インポートしてください。
__UnityEditor__の下に__VRC.SDK3.Avatars.Components__を追加します

using UnityEditor;
using VRC.SDK3.Avatars.Components;

これで準備はできました

準備ができたら変数を宣言します
__private__な__VRCAvatarDescriptor__タイプの__Avatar__変数を、グローバルな変数として宣言するためにメソッド外で宣言します
今回はOnGUIの上で作成します

private VRCAvatarDescriptor avatar;
private void OnGUI()
{
		
}

これで変数はできました

###変数にObjectを入れるためのObjectFieldを作る
箱を作るために__EditorGUILayout.ObjectField__を使用します

EditorGUILayout.ObjectField("フィールドのラベル", "フィールドを表示するオブジェクト", "割り当てることのできるタイプ", "オブジェクトを選択できるようにするか");

これらを設定していきます
今回はこのようになりました

EditorGUILayout.ObjectField("Avatar", avatar, typeof(VRCAvatarDescriptor), true);

ObjectField完成しました

###ObjectFieldからavatarに代入する
avatar変数へ代入します

avatar = EditorGUILayout.ObjectField("Avatar", avatar, typeof(VRCAvatarDescriptor), true);

できました...?
いいえ、このままではエラーが出ているはずです

エラー 型 'UnityEngine.Object' を 'VRC.SDK3.Avatars.Components.VRCAvatarDescriptor' に暗黙的に変換できません。明示的な変換が存在します

だそうです。
明示的な変換をしていきます。
今回はキャストするために__as__を使用します
このようになればエラーは消えるはずです

avatar = EditorGUILayout.ObjectField("Avatar", avatar, typeof(VRCAvatarDescriptor), true) as VRCAvatarDescriptor;

これでObjectFieldからavatar変数へ代入することができました
全体のコードはこうなります

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using VRC.SDK3.Avatars.Components;

public class TestEditor : EditorWindow
{
    [MenuItem("TestEditor/TestEditor")]

	public static void ShowWindow()
	{
		EditorWindow.GetWindow<TestEditor>(true, "TestEditor");
	}


	private VRCAvatarDescriptor avatar;
	private void OnGUI()
	{
		avatar = EditorGUILayout.ObjectField("Avatar", avatar, typeof(VRCAvatarDescriptor), true) as VRCAvatarDescriptor;
	}
}

Ctrl + Sで__保存__して確認してみましょう
EditorAvatar.png
出来てますね
次に__VRCAvatarDescriptorが入っているアバター__を__ObjectField__に入れてみましょう
AvatarDiscrip.png
入れることができるか確認できたと思います
####これで今回は終了です

#5.次回
次回は今回取得したAvatarにオブジェクトを入れるエディターを作成していきたいと思います

VRC用の拡張Editorを作ってみよう(2)

6
3
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
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?