「せっかく作ったVR世界なのに、コントローラーで振り向くと『カクッ、カクッ』と視界が飛んでしまって、まるでロボットになったみたい…」 そんな風に感じて、せっかくの没入感が削がれてしまっていませんか?
VRテンプレートの初期設定である「スナップターン(一定角度でパッと切り替わる回転)」は、確かにVR酔いを防ぐ効果があり、[[vr移動の改良(スナップターン)]]でも触れたように対策としては優秀です。しかし、現実世界のような滑らかさがなく、どうしても「ゲームの中」という感覚が抜けきらない大きな要因にもなってしまいます。
「もっと自然に、自分の思った通りの速度でヌルッと滑らかに振り向きたい!」 そう思うのが、世界を作り手としての正直な気持ちですよね。
「でも、ブループリントを一から組んで回転を作るなんて、難しそう…」と不安に思うかもしれません。でも安心してください。実はたった3つのステップ(ノード)をつなぐだけで、この「スムーズターン」は誰でも簡単に実装できてしまうんです。
今回は、滑らかな視点移動を実現する魔法のロジックを、初めての方にも分かりやすく図解付きで解説します。
スムーズターン実装の全体像
まずは、全体の地図を見てみましょう。処理の流れはとてもシンプルです。
- 入力(Input): スティックを倒した!
- 計算(Multiply): どれくらいの速さで?
- 実行(Rotation): 回れ!
この3つの要素をつなぐだけで完成します。それでは、順番に作っていきましょう。
【STEP 1】入力設定(Input Action)の作成
Meta QuestなどのVRコントローラーで、スティックを倒した分だけ滑らかに回転する準備を行います。
1. 入力アクションファイルの作成
まずは「回転」という動作を定義するファイルを作ります。
- コンテンツブラウザを開き、
All > Content > VRTemplate > Input > Actionsフォルダへ移動します。 - 何もない場所で 右クリック し、[入力] > [入力アクション] を選択します。
- 名前を
IA_SmoothTurnにして保存します。
2. 数値とデッドゾーンの設定
作成した IA_SmoothTurn をダブルクリックして開き、以下のように設定します。
- Value Type:
Axis 1D (float)に変更。- これで「ボタンのON/OFF」ではなく「倒した量(数値)」が取れるようになります。
- Modifiers:
Dead Zone(デッドゾーン)を追加。- Lower Threshold:
0.2 - Upper Threshold:
1.0 - ※これはスティックの微細な揺れによる誤作動を防ぐ設定です。
- Lower Threshold:
3. コントローラーへの割り当て(IMC)
次に、このアクションを実際のコントローラーに紐付けます。
Inputフォルダに戻り、IMC_Default を開きます。- Mappings の横の「+」を押して行を追加し、
IA_SmoothTurnを選択します。 - キー設定(下層のプルダウン)で
Oculus Touch (右) サムスティックの X軸を選択します。
【STEP 2】ブループリントで回転処理を記述
入力設定ができたら、VRPawn のブループリントを開いてロジックを組みます。 ここからは、初めての方でも迷わないように、マウス操作一つ一つを丁寧に解説していきます。
1. ノードの配置(右クリック検索)
まずは、何もないキャンバスに必要な部品(ノード)を呼び出します。
- VRPawn のイベントグラフを開きます。
- 何もないスペースで 右クリック します。
- 検索バーが出てくるので、
IA_SmoothTurnと入力します。 - リストに出てきた Event IA_SmoothTurn を選択(クリック)します。
- これで「スティック操作を受け取る」ノードが出現しました。
- もう一度、何もないスペースで 右クリック します。
- 今度は
Add Actor World Rotationと入力して検索し、選択します。- これが「自分自身を回転させる」命令のノードです。
2. ピンの分割(最重要ポイント!)
ここで初心者がつまづきやすいポイントです。 Add Actor World Rotation の Delta Rotation ピン(紫色の丸)は、そのままだとX, Y, Zが一つにまとまっています。
- Delta Rotation という紫色のピンの上で 右クリック します。
- 出てきたメニューから [構造体ピンを分割 (Split Struct Pin)] を選択します。
- ピンが X(Roll), Y(Pitch), Z(Yaw) の3つに分かれたことを確認してください。
- 今回は横回転させたいので、この一番下の Z (Yaw) だけを使います。
【STEP 3】計算式をつないで完成
最後に、それぞれのノードを電線でつなぐように配線していきます。
1. 入力値の取り出しと計算(Multiplyノード)
スティックの傾き具合(数値)を取り出し、回転スピードを掛け合わせます。
IA_SmoothTurnノードにある Action Value という緑色のピンを 左クリックしたままドラッグ し、何もないスペースで 離します。- すると自動的に検索メニューが開くので、
Multiply(または*)と入力します。 - Multiply(乗算)というノードを選択します。
- これで「入力値 × 何か」をする準備ができました。
- 新しくできた Multiply ノードの下側の入力欄(Bピン)に、直接
5.0と入力します。- この数字が「回転スピード」になります。数字を大きくすればもっと速く回ります。
2. 回転命令への接続
計算した結果を、回転ノードに渡します。
- Multiply ノードの右側にある出力ピン(結果が出るところ)をドラッグします。
- そのままマウスを動かして、
Add Actor World Rotationの Delta Rotation Z (Yaw) ピンの上で離します。- これで線がつながり、計算結果が回転角度として渡されるようになりました。
3. 実行信号の接続
最後に、「いつ実行するか」という信号をつなぎます。これを忘れると動きません。
IA_SmoothTurnノードの一番上にある Triggered という白い矢印ピンをドラッグします。Add Actor World Rotationの左上にある実行ピン(同じく白い矢印)につなぎます。- これで「スティックが動いている間(Triggered)、ずっと回転しなさい」という命令が完成しました!
まとめ
今回は、UE5でのVRスムーズターンの実装方法を解説しました。 Input Actionで入力を受け取り、ブループリントで計算して回転させる。この一連の流れは、スムーズターンだけでなく、移動や他のアクションにも応用できる非常に重要な基礎テクニックです。
「右クリックで検索」「ドラッグして離して検索」という操作に慣れてくれば、もっと自由にVR世界を構築できるようになりますよ。
スムーズターンができたら、次は実際にオブジェクトに触れてみたくありませんか? [[Ue5vr オブジェクトを掴む]]の記事では、VRならではのインタラクションの実装方法を解説しています。ぜひ合わせてチェックして、あなたのVRギルドをさらに賑やかにしていってください!

