見出し画像

VRCワールドのSDK3 UDON(graphのほう)でミラーをオンする

この記事は、 Oculus Quest Advent Calendar 2020
の12日目の記事です

この記事ではSDK3でとりあえずワールド作ってみたけどミラーのオンオフとかギミックどうすんの?って人向けにミラーのオンオフを書きます

(2021/11/23追記)
最近はboothにudonギミックが増えたのでudon組まなくてもsdk3ワールド全然組めるようになりました。あとはsdk2に慣れているならCyanTriggerを使うと(解説記事)VRCTriggerぽいUIでごりごりudonが組めるらしいです。
(追記ここまで)

(この記事で解説するudonは上のサムネの通りオンまでです)
オンオフと同期はこっち
https://note.com/kakutyu50/n/n12052eba0b39

UdonにはU#というプログラミングっぽい書き方で書く方法と矢印(グラフ)をつないで書く方法がありますが、この記事では矢印をつないで書く方を書きます

今回の目標は「キューブをUseしたら鏡が表示(非表示)になる」ことです。この「~したら、~する」の部分をudonで実装していきます。
 
Udonには「オブジェクトに触ったら」「新しい人がjoinしたら」などいろんな「~したら」に相当するもの(ノード)や「音楽を流す」「鏡を出す」「ワープさせる」などいろいろな「~する」に相当するもの(ノード)が用意されています.
これらを矢印でつないで「人がjoinしたら」→「音を出す」や「Useしたら」→「鏡を出す」など欲しい機能をいろいろ作ることができます.

前置きが長くなりましたが、ここから内容に入っていきます
全体の流れとしては
①鏡とキューブ(スイッチにします)を置く
②キューブにudonをアタッチする
③udonの中身"useしたらゲームオブジェクトをオンにする"を書く
④↑の"オンにするゲームオブジェクト"を"鏡"に設定する
の順に説明していきます。ではさっそく①からやっていきましょう。

鏡とスイッチを置く

まず、作ったワールドに鏡とキューブ(スイッチにします)を置きましょう 
鏡はVRChat Examples→PrefabsのなかにVRCMirrorがあるのでそれを使います

キューブは3DObject→Cubeで作れます コライダーがないとUseできないのでキューブのコライダーを消さないように注意です.
このときコライダーのisTriggerにチェックを入れるとアバター等と物理衝突しないコライダーになります。

それぞれ好きな大きさに変えておくといいでしょう

キューブにUdonBehaviourをつける

Udonで機能を付けたいオブジェクトにはUdonBehaviourをアタッチします
まず、①ヒエラルキーからキューブを選択します.すると、インスペクターにキューブの情報を表示されます.②そしたら一番下のAddComponentを左クリックしてudonBehaviourをアタッチしましょう③検索欄でudonBehaviourで検索してクリックするのが早いと思います.

画像1

キューブにudonが付きました.

udonの中身を書くための設定をする

実際にudonのプログラムの中身を書いていきましょう
先ほどアタッチしたUdon behaviorのNewProgramを押すと空のプログラムファイルが生成され表示が切り替わります。
そしたらOpenUdonGraphを押してください、今作った空のプログラムの編集画面が出てきます。
(その下のところでUdonをU#で書くか矢印で書くか選べますが,今回は矢印で書くのでUdonGraphProgramAssetのままでいいです.)

画像2

画像3

Useしたら鏡をオンする

では,いよいよ矢印をつないで中身を書いていきます.
つくるのは「Useしたら」→「鏡を出す」でしたね
まず「Useしたら」,「鏡を出す」等 各ノードを出します。それから両ノードを矢印でむすぶことで「Useしたら」→「鏡を出す」を実装します。

ノードの出し方

まず「Useしたら」ノードを出しましょう。
「Useしたら」にあたるのは"Interact"というノードです
まずは,"Interact"ノードを置きます

新しいノードを出すにはUdonGraphの編集画面の何もないところを右クリックしてでてくる"CreateNode"を左クリックです。するとノードを探す画面が出てくるのでここから出したいノードを選択します。すると何もなかった編集画面にノードが追加されます。
出したいのは「useしたら」にあたる"Interact"ノードでしたね
Events→Interactと選択しInteractノードを出しましょう.
(~したらに相当するノードはほぼEventタブに分類されています)
ノードは検索して探すこともできます

画像4

 続いて,「鏡を出す」のほうですが,物のオンオフには「GameObject.SetActive」というノードを使います
同じようにCreateNodeしたら
UnityEngine→GameObject→SetActiveの順に選択してノードを出します.
(GameObjectのオンオフ、速度付加、マテリアルの変更のようなもともとUnityの機能として実装されている機能のノードはUnityEngineタブに分類されています)

※ノードを選択状態でCreateNodeするとノードを探す画面に表示されるノードが減るのでそのときは何もないところを1回左クリックしてからCreateNodeします

さてノードが出せました。実は、"SetActive"ノードで鏡をオンするには、まだ設定が必要なのですが、いったん後回しにしてノードを矢印でつないでしまおうと思います。

実行順に矢印で結ぶ

ノードが出せたらInteractとSetActiveを実行順に矢印で繋ぎます
各ノードの白い右向き三角を左クリックしながらドラッグすると矢印が伸びます 繋ぎたいノードの白三角につなげてあげましょう 
矢印の向きにプログラムが実行されることになります

ノード

これで「キューブをuseしたら」→「オン/オフする」ができました。
しかし先ほど後回しにしたように"SetActive"ノードはこのままでは使えません。あと2つ設定が必要です。具体的には ①何をオンオフするのか ②オンとオフのどっちにするのか の2つを指定する必要があります。
①は鏡ですね。②は今回は"オンにする"で設定します

オンオフする対象を鏡に設定する

オンオフする対象を設定します。設定は"SetActive"ノードのinstanceと書いてある黒丸にオンオフする対象をつなぐことで指定します。(下図が完成形)
今回は鏡なので"鏡"ノードをつなぎたいですね。
"鏡"のような他のゲームオブジェクトのノードをつくるには"GameObject"という"変数"を使います。
”GameObject変数"には"鏡"などいろいろな”GameObject”を設定できます。
これを使って”GameObject変数”を"SetActive"のオンオフする対象として黒丸につないで、それから"GameObject変数"に"鏡"を設定することでオンオフの対象を鏡に指定できます。

画像12

では実際にやっていきましょう。
まず"GameObject変数"をつくります。udon編集画面左上のVariablesが変数の設定画面です。Variables右の+ボタンを押してください。押すと作る変数の種類を選ぶ画面がでるので"GameObject"を選んでください。カッコつきのGameObject[]ではないので注意


スクリーンショット 2020-12-12 155220

GameObject変数ができました、variablesにnewVariableが増えているはずです。変数名(new Variable)をダブルクリックすると変数名を変えられます.
別に何でもいいですがmirrorとでもしておきましょうか。

次にできた"GameObject変数"にオンオフしたいもの(鏡)を設定します.
変数左の>を押すとでてくるpublicにチェックを入れてください。するとインスペクターのUdonBehaviorのところに変数の設定欄ができます。ここにヒエラルキーから"鏡"をドラッグアンドドロップして作った変数に鏡を設定します.(下図参照)
これで"鏡が設定されたGameObject変数"ができました。

スクリーンショット 2020-12-12 155600

スクリーンショット 2020-12-12 155734

スクリーンショット 2020-12-12 160046

では,つくった変数を"SetActive"ノードにつなぎましょう
作った変数の変数名をドラッグしてあいてるところにドロップすると変数のノードができます.あとは,変数の青丸から矢印を"SetActive"ノードの青丸につないであげればOKです.
これでオンオフの対象が鏡に設定されました.

オンにする設定をする

オンにするために"SetActive"のvalue欄のチェックをつけましょう。"SetActive"ノードはこのチェックが付いているとオブジェクトをオンに、ついていないとオフにしてくれます。
(また、Valueの黒丸にTrue/Falseの値をつないでも設定できます。Trueならオン、Falseならオフです)

スクリーンショット 2020-12-12 161842

これで,useすると鏡がオンするようになりました.デフォルトで鏡がオフになるようにインスペクターのチェックを外しておきましょう。

スクリーンショット 2020-12-12 164142

次回はオンオフとその同期を解説します
次回できました⇒https://note.com/kakutyu50/n/n12052eba0b39

この記事が気に入ったらサポートをしてみませんか?