Vader Immortalを買いました. プレイした人ならわかると思いますが, ライトセーバーが非常によくできています. これから腕試しとしてオリジナルライトセーバーをOculusとUnityで作っていこうと思います.
出来上がったものが上の動画です. まだLv01なので効果音もなく非常にシンプルな構造です.
では, Vader Immortalで使えるライトセーバーに実装されている機能をリストアップし, ライトセーバーに必要なものを確認していきます.
- 掴める.
- 掴んだ状態で他のボタンを押すと光刃が形成される.
- 振るとコントローラーが振動して音が鳴る.
- 床を切ると焦げる.
- ビームを弾き返すことができる.
- 敵を切断できる.
今回は手始めに「掴める」と「掴んだ状態で他のボタンを押すと光刃が形成される」を実装していきます. 簡単に作るためにライトセーバーの本体は円柱で, 光刃の部分はLineRendererで実装します.
「掴める」の部分はCustomOVRGrabbable
を使って実装します. CustomOVRGrabbable
はこの記事で紹介しています. 実際にはCustomOVRGrabbable
を継承したOVRLightSaber
を使います.
ちょうど別の目的で開発していたPhysicalLaserPointer
というクラスが使えそうなので, OVRLightSaber
ではこれを使っています. PhysicalLaserPointer
はRayとLineRendererを統合したクラスです. レーザー(Ray)が当たっている相手がDamagerable
を持っていたらダメージを与える機能を持っています(私のDamagerable.cs
は独自の仕様が多すぎるので公開しません). PhysicalLaserPointer
を使う場合は, 該当箇所を削除するか, Damager.cs
とDamage.Injured()
を実装してください.
実装したPreFabは次のような構造になりました.
ライトセーバーLv01の持ち手はただの円柱です. 円柱の先端にレーザーの発射口を設定しています. 作ってから気づいたんですが, LineRendererを使って光刃を出しているので, 受太刀ができません. 図らずしもライトセーバーというよりもSEEDのビームサーベルになってしまいました.
上記の実装したのが初めの動画のものになります. Lv02ではウォンって感じの例の音を出していこうと思います.
コメント