Kilimanjaro Warehouse

WEBとかゲーム開発のことについて書きます。

VRChatで空を飛ぶ方法(外部ツール不使用)

今回はVRChatで空を飛べるアバターを作成する方法について解説します。
宗教上の理由でPlayspaceMoverなどの外部ツールを利用できない方向けです。


外部ツールに比べると不便な点がいくつかあります。
・操作が若干複雑
・飛行中に変な方向にぶっとんだり、回転が止まらなくなることがある

この辺を許容できる方のみ、実践してみるとよいと思います。


記事の内容は2018/09/24時点でのものです。
今後のアップデートなどで使えなくなる場合があります。
また、この方法を使用したことで何か不利益が生じたとしても、
私は責任を負いませんので自己責任で実行をお願いします。

完成図

まず最初に、これが実際に飛んでみた感じです。


火炎放射のパーティクルを手と足につけています。

動画では上方向へ上昇しているだけですが、
空中で浮遊したまま横方向へ移動することもできます。

空を飛ぶ仕組み

ColliderのついたCubeを足元に置いて、足場として利用することで空中浮遊を実現しています。
足元のCubeにジャンプで飛び乗る動作を繰り返すことにより、空中に浮くことができます。


以下、具体的な流れです。

1. 足元にColliderのついたCubeを置き、アバターの子オブジェクトとして非アクティブにする
2. CubeをActiveにするAnimationを作成し、AnimationOverrideControllerへと割り当てる
3. CubeのMeshを非表示にして見えなくする
4. VRChatへアップロードした後、VRChat内でAnimationを再生しつつジャンプを連打すると、キャラクターが浮遊する

以下で画像付きの解説を行います。

画像付き解説

1. 足元にColliderのついたCubeを置き、アバターの子オブジェクトとして非アクティブにする

Unityのシーン上にCubeを作成して、アバターの子オブジェクトとします。
その後、値をresetして画像のようにします。
f:id:kilimanjaro-a2:20180924141512p:plain

Cubeを非アクティブにします。
f:id:kilimanjaro-a2:20180924141510p:plain

2. CubeをActiveにするAnimationを作成し、AnimationOverrideControllerへと割り当てる

新規にAnimationを作成し、Animation再生中にCubeをActiveにするようにします。
f:id:kilimanjaro-a2:20180924141740p:plain

Animationの作成の方法については、こちらの記事がとても参考になります!
shiasakura.hatenablog.com
(私も初めて表情をつけた際にお世話になりました...感謝)

作成したら、使用しているAnimationOverrideControllerに割り当てます。

3. CubeのMeshを非表示にして見えなくする

CubeのMeshRendererコンポーネントのチェックを外して、Meshを非表示にします。
f:id:kilimanjaro-a2:20180924141507p:plain

4. VRChatへアップロードした後、VRChat内でAnimationを再生しつつジャンプを連打すると、キャラクターが浮遊する

これで下準備は完成です。
ですがおそらく、後述の変な動作に対処するため、何回か試行錯誤を繰り返すことになると思います

VRChat内でアップロードしたアバターへ切り替え、
先ほど作成したAnimationを再生します。
そのAnimationを再生した状態を維持したままジャンプを連打します。
上手く設定できていれば、あなたのアバターが空へと舞い上がっていく様を見ることができるでしょう。

空に浮いている状態は、ColliderのついたCubeに乗ることで生じているため、
Animationを解除すると浮遊状態も解除され、下に落ちます。

欠点

VRのコントローラーだと、片方のコントローラーだけで上記の操作を行うのは難しいです。
上昇したい場合、片方のコントローラーでAnimationを再生した状態で、もう片方でジャンプを繰り返す。
横移動したい場合、移動を行う方ではないコントローラーでAnimationを再生するようにして、移動を行う。
このような若干複雑な操作を行うことになります。

また、アバターやプレイヤーの身長の設定によっては、
空中浮遊中に変な方向へぶっとんだり、回転が止まらなくなったりします。


正直、この辺の不具合の原因が私にはわからないです(すみません)
Cubeの位置・プレイヤーの身長設定などの数値を変更して、
不具合が起きないような設定を見つけ出すか、運命を受け入れるかしていただきたいです...

終わりに

結構不便な点がありますが、外部ツールをインストールせずにUnityだけで完結することができるので、
一定の層に需要があるのではないかと思います。
変な不具合の解消法が分かった方は、教えていただきたいです。

今回の記事で使用させていただいたアバターは、
こまど (@komado_vrc) | Twitterさんの「しろねこラムネ」を改変したモデルです。
booth.pm
ありがとうございました。