【Unity勉強】11日目:VRChat SDK をいじる
前回は VRChat に自分のワールドをあげることができるようになりました。
なので今回はそのワールド内で VRChat SDK のいろんな機能を使って遊んでみました。
この動画を見ながら真似したのですが、めちゃめちゃわかりやすくて最高でした。
ありがとうございました :pray:
youtube:https://www.youtube.com/embed/aYFuF12UZkY
作業メモ
VRCSDK -> Prefabs -> World -> VRCWorld を Scene に置くことで VRChat のワールドになる。
スイッチでオンオフの切り替えのできる鏡を作る
- VRCSDK -> Prefabs -> World -> VRCMirror を置く
- 3D Object の Cube を置いてこれをスイッチとする
- Cube に VRC_Trigger というコンポーネントを追加する
- VRC_Trigger を追加すると VRC_Event Handler という Script も追加されるがこれはユーザーが触ることはないので気にしないで良い
- Inspector で VRC_Trigger の add をクリックして表示されるビューで Custom と書いてあるセレクトボタンを見ると色んなトリガーが用意されている
- Actions の + をクリックして表示される Event の中から何かしらを選ぶと、指定したトリガーが起きた際に指定した Event を起こすことができる
- ここらへん色々種類が多くて難しいので VRCSDK -> Examples -> Scenes の中にあるサンプルの Scene で色々試してみると良い
- スイッチを押すとかやりたい場合はトリガーを onInteract にする
- Actions で SetGameObjectActive を選択するとオブジェクトのオンオフができる
- Receivers に対象とするオブジェクトを渡してあげる
- 今回は VRCMirror
- Operation は False/True/Toggle とあるので適切なものを選択する
ワープするドアを作る
- 3D Object の Cube を置いてこれをドアとする
- Cube に VRC_Trigger というコンポーネントを追加する
- Inspector で VRC_Trigger の add をクリックして表示されるビューで Custom と書いてあるセレクトボタンを押して OnAvatarHit を選択する
- Actions は TeleportPlayer を選択する
- TeleportPlayer の場合は Receivers はどこに飛ぶかを選択するものなので、適当に Empty Object を作ってそれを Receivers に入れる
- ドアに触れると Empty Object の位置にテレポートする
持てるオブジェクトを作る
- 3D Object の Cube を置く
- Cube に Add Component -> VRC_Pickup をすると持てるようになる
- VRC_Pickup をアタッチすると勝手に Rgidbody もつくので Use Gravity にチェックが入っていることを確認する
- Cube に Add Component -> VRC_Object Sync を追加する。これを追加しないと複数人でプレイするとき Cube の位置がずれる恐れがあるらしい
アニメーションを作る
- 一つのスイッチを押すと横に回って、別のスイッチを押すと縦に回る Cube を作る
- 3つの Cube を作って、それぞれ Cube, SwitchH, SwitchV とする
- 基本的に一つのオブジェクトには一つの Animation しかあてられない
- 一つのオブジェクトで複数の Animation を管理したい場合は Project で Create -> Animator Controller を使う
- Cube に Animator Controller をアタッチする
- Project -> Create -> Animation で Horizontal, Vertical の2つのアニメーションを作る
- ループしたい場合は Loop Time にチェックを入れる
- Animator タブをクリックする
- 右クリック -> Create State -> Empty を作って Idle という名前にする
- Idle は何も動いていない状態とする
- Horizontal と Vertical の Animation を Abnimator タブにドラッグ&ドロップする
- Idle で右クリック -> Make Transition で Idle から Horizontal へ線を引く。この時、 Idle から Horizontal へは線を2本、逆に Horizontal から Idle へ線を一本、合計3本の線を引く
- Vertical の方も同じように合計3本の線を引く
- Animator タブ -> Parameters -> + -> Bool で VerticalBool という名前で作る
- Animator タブ -> Parameters -> + -> Trigger で VerticalTrigger という名前で作る
- Animator タブ -> Parameters -> + -> Bool で HorizontalBool という名前で作る
- Animator タブ -> Parameters -> + -> Trigger で HorizontalTrigger という名前で作る
- Idle の Inspector で Idle -> Vertical に対して Conditions で VerticalBool: true と VerticalTrigger を渡す
- 同じように Idle の Inspector で Idle -> Horizontal に対して Conditions で HorizontalBool: true と HorizontalTrigger を渡す
- 逆に Vertical の Inspector で Vertical -> Idle に対して VerticalBool: false を渡す
- 同じように Horizontal の Inspector で Horizontal -> Idle に対して HorizontalBool: false を渡す
- ここまでで Idle と Vertical, Horizontal が条件で紐づけられた
- SwitchH, SwitchV に Add Component -> VRC_Trigger -> Add -> OnInteract を選ぶ。 Actions に AnimationBool を渡す。 Receivers は Cube を渡す。
- SwitchH の VRC_Trigger の Variable に HorizontalBool という文字列を入れて(Animation の Parameter)、 Operation を True にする
- SwitchV の VRC_Trigger の Variable に VerticalBool という文字列を入れて(Animation の Parameter)、 Operation を True にする
- これで onInteract が発生した際に Idle から Vertical(もしくは Horizontal) へと Animation の状態が移る
- 実際の Animation の動きを作る
- Animation を選択して Animation タブを開く
- 適当な時間のところをクリックして赤い線を置く
- 録画ボタンを押した後に Cube の Transform の Rotation をいじる
- そうすると Animation が記録される
- これを Vertical と Horizontal 両方やる
- 完成した
感想
作ったワールドに入って動画を撮ってみたのがこちら。
youtube:https://www.youtube.com/embed/l7hx1GBkShs
めちゃめちゃすごい。
コード何も書いてないのにここまでできてしまって本当にすごい。