1
1

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.

Avatarにオブジェクトを入れるEditorを作る|VRC用の拡張Editorを作ってみよう(2)

Last updated at Posted at 2021-11-21

この記事は前回の続きになります
VRC用の拡張Editorを作ってみよう(1)

#目次
1.オブジェクトを入れる変数とObjectFieldを作成する
2.オブジェクトを入れるためのメソッドを定義して処理を書く
3.ボタンを押したらメソッドを呼び出すようにする
4.動作確認をする
5.次回

#1.オブジェクトを入れる変数とObjectFieldを作成する
##変数を作る
__private__な__GameObjectタイプ__の__gameObject__変数をグローバルな変数として宣言するためにメソッド外で宣言します
今回もOnGUIの上で作成します

private VRCAvatarDescriptor avatar;
private GameObject gameObject;
private void OnGUI()
{

変数ができるとこのようになります

##ObjectFieldを作る
前回と同じ__ObjectFieldを使って__作っていきます
こんな感じになりました

gameObject = EditorGUILayout.ObjectField("gameObject", gameObject, typeof(GameObject), true) as GameObject;

これをAvatarの下に書き加えていきます

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

これで変数とObjectFieldはできました

#2.オブジェクトを入れるためのメソッドを定義して処理を書く
##メソッドを定義する
後から何度も呼び出せるように、メソッドを作っていきます
今回は__private__な__戻り値無し__のメソッドを作ります
メソッド名は何でもいいのですが今回は__InsertObject__にしました
__OnGUIの下__に書いていきます

private void InsertObject()
{
		
}

これでメソッドの定義ができました

##メソッドの中に処理を書く
オブジェクトを入れるための処理を書いていきます
今回は__Transform.SetParent__を使用します
書き方はこのようになります

"子ゲームオブジェクト".transform.SetParent("親ゲームオブジェクト".transform);

今回はこうなりました

gameObject.transform.SetParent(avatar.transform);

これをメソッドの中に書き加えていきます

private void InsertObject()
{
	gameObject.transform.SetParent(avatar.transform);
}

これでメソッドはできました

#3.ボタンを押したらメソッドを呼び出すようにする
##ボタンを作る
まずはボタンを作っていきます
今回は__GUILayout.Button__を使用します
書き方はこのようになります

GUILayout.Button("ボタンの名前")

このままではボタンが機能しないのでボタンにif文を追加します

if(GUILayout.Button("ボタンの名前"))
{

}

ボタンの名前は何でもいいので私は__"オブジェクトを入れる"__にしました
これをOnGUIに書き加えていきます

private void OnGUI()
{
	avatar = EditorGUILayout.ObjectField("Avatar", avatar, typeof(VRCAvatarDescriptor), true) as VRCAvatarDescriptor;
	gameObject = EditorGUILayout.ObjectField("gameObject", gameObject, typeof(GameObject), true) as GameObject;
	if (GUILayout.Button("オブジェクトを入れる"))
	{
			
	}
}

これでボタンは完成しました

##メソッドを呼び出す
メソッドを呼び出すには__メソッド名(引数の値)__と書きます
これをボタンのif文の中に書き加えていきます
今回は引数の値を渡さないのでこうなります

if (GUILayout.Button("オブジェクトを入れる"))
{
	InsertObject();
}

これでボタンを押したときにメソッドが呼び出されるようになりました

#4.動作確認をする
##Editorの確認
今作ったスクリプトをCtrl + Sで__保存__しましょう
保存ができたらEditorを開きます
Editorが開くとObjectFieldが二つ、ボタンが一つあると思います
Editor2.png
ない場合はスクリプトを見直してみてくださいね

##Editorが機能するか確認する
まずはじめに__VRCAvatarDescriptorが入ったAvatarオブジェクト__と__入れたいGameObject__を用意しましょう
hierarchy.png
用意ができたらEditorに入れてみましょう
Editor4.png
入ったら__オブジェクトを入れる__ボタンを押します
avatarobject.png
Avatarの子にGameObjectが入っていたらEditorの完成です
お疲れさまでした

#5.次回
次回はAvatarのコンポーネントを取得しようと思います

VRC用の拡張Editorを作ってみよう(3)
https://qiita.com/Milcia/items/68491d554fb0fcc9a04c

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?