![見出し画像](https://assets.st-note.com/production/uploads/images/119445019/rectangle_large_type_2_3ebf0d702ffd6632932230bb0ddc3998.png?width=1200)
VRインタラクションをつくろう:【両手で発射する気弾】編
この記事は、私がVRコンテンツを触る・作るうえで特にこだわっている「インタラクション」の部分を自ら解説・明文化することで、私が発信したい「VRインタラクション」というテーマを明確に示すこと、ひいては後進のVRコンテンツ開発者の一助になることを目的としている。
なお、ここでいう「VRインタラクション」とは、「市販のVRデバイスに付属するコントローラーなどを使ったVRコンテンツ特有の操作方法・表現」という意味合いである。
イントロ
先日、VRChatにて簡単なシューティングゲームを制作した。
今回はこちらのゲームで実装した「敵を倒す弾を発射するVRインタラクション」について解説を行う。
今回のモチーフ
「両手で発射する気弾」と一口にいっても、「かめはめ波」や「波動拳」など多種多様な技が存在するが、今回は、漫画「呪術廻戦」に登場する作中最強格の技、虚式「茈」をモチーフにした。
![](https://assets.st-note.com/img/1697088214280-uShxIAFStZ.png)
発生した質量弾を高速で押し出す、五条悟の究極奥義。
画像はアニメ「呪術廻戦」から引用。
仕様をまとめる
ギミックを制作する前に「仕様」として、ある程度の設計方針を立てる。今回制作するギミックは、
指定のオブジェクト同士を近づけるとチャージが始まり、
任意のタイミング(両手を離すこと)で気弾を放つことができる
ことを満たすものとする。
実装過程
雛形として、まずは両手に装着するオブジェクトを用意する。今回はVRChat上での実装のため、掴んで動かせるオブジェクトとして設計するが、VR対応アプリやソロプレイに特化させる場合はあらかじめ両手トラッカーに追従させる方法でも良いだろう。
完成品 その1
「蒼」オブジェクトと「赫」オブジェクトの2つを接触させるとチャージが始まり、
接触を解くことで「蒼」に追従する照準から「茈」が発射される。
![](https://assets.st-note.com/production/uploads/images/119437110/picture_pc_75fe77ac0ecb2c64ccd74d41076e2376.gif)
仕様の再考・変更
発射弾の弾道が片側に寄る仕様はあまり直感的ではないと感じたため、2つのオブジェクトの中間座標から発射されるよう再設計する。
両手の中間座標を取り、その位置で弾を発生させる。
完成品 その2
「蒼」オブジェクトと「赫」オブジェクトの2つを接触させるとチャージが始まり、
接触を解くことで中間点の照準から「茈」が発射される。
![](https://assets.st-note.com/production/uploads/images/119438193/picture_pc_04422765f3dea7b7937eb9f3a471c4b2.gif)
実装方法について説明すると、Unityの場合、position, rotationともにLerp()関数を使うことで容易に2オブジェクト間の座標と回転角度を取得できた。下記のコードは発射点制御部分のみを抜粋したものである。
...
//スクリプトは「蒼」側に適用
public GameObject aka; //「赫」オブジェクト
public Transform firepoint; //発射点
void Update()
{
//発射点制御部分
firepoint.position = Vector3.Lerp(transform.position, aka.transform.position, 0.5f);
firepoint.rotation = Quaternion.Lerp(transform.rotation, aka.transform.rotation, 0.5f);
}
...
以上で、解説を終了する。これ以降も、私が制作したVRインタラクションの解説記事や、既存のVRコンテンツのインタラクションについて私の視点からの分析記事を執筆したいと思う。