VR 人気記事
まだデータがありません
はじめに:VRの世界を、自分の足で歩きたい!
VR体験の没入感を大きく左右する「移動方法」。コントローラーでの移動は手軽ですが、どうしても「ゲームを操作している」感覚が拭えず、VR酔いの原因にもなります。市販のVR用歩行デバイスは非常に高価で、なかなか手が出ません。
しかし、諦めるのはまだ早いかもしれません。もしあなたの家にNintendo Switchがあれば、そのJoy-Conと少しのプログラミング知識で、驚くほど没入感の高い「足踏み歩行(Walking-in-Place)」を実現できるのです。この記事では、その具体的な方法をステップバイステップで解説します!
準備するもの
- Nintendo SwitchのJoy-Con (L)または(R): 1つでOKです。
- PC: Bluetoothが使えるWindows PCを想定して解説します。
- Joy-Conを足に固定する道具: 100円ショップで売っている幅広のゴムバンドやマジックテープがおすすめです。最悪、長めの靴下やズボンのポケットでも代用できます。
- Pythonプログラミング環境: 公式サイトからインストールしておきましょう。
- ViGEmBusドライバー: これがキモです。PCに「仮想的なゲームパッド」を作り出すためのドライバーです。GitHubリリースページから最新版をダウンロードし、インストールしておいてください。
STEP1: ドライバーのインストールと設定
今回作成するプログラムは、Joy-Conの動きを検知して「仮想的なゲームパッドのスティックを倒す」という信号をPCに送ります。そのために、PC側で仮想ゲームパッドを受け入れるための準備が必要です。
まずは、準備物リストにあるViGEmBusドライバーをインストールしてください。これにより、私たちのPythonプログラムが、自由に操作できる仮想のXbox 360コントローラーを作り出せるようになります。
STEP2: Joy-Conの接続とライブラリの準備
-
Joy-Conのペアリング: Joy-Conの側面にある小さな丸い「シンクロボタン」を長押しします。LEDが点滅し始めたら、PCのBluetooth設定画面から「Joy-Con (L)」または「Joy-Con (R)」を選んでペアリングします。
-
Pythonライブラリのインストール: コマンドプロンプトやターミナルを開き、以下のコマンドを実行して、Joy-Conを操作するためのライブラリと、仮想ジョイスティックを操作するためのライブラリをインストールします。
pip install pyjoycon pyvjoystick
STEP3: 足踏みを検出するロジックを考えよう
Joy-Conには「加速度センサー」が入っており、これを使えば足の上下動を検知できます。足踏みをすると、足を上げた時と、地面に着地した時に、上下方向の加速度が大きく変化します。この特徴を利用します。
以下は、Joy-Conの加速度データから足踏みを検出するシンプルなPythonコードの例です。
# このコードはまだ動きません。STEP4で完成させます。
from pyjoycon import JoyCon, get_R_id
import time
# Joy-Conに接続
joycon_id = get_R_id()
joycon = JoyCon(*joycon_id)
# 足踏み判定の閾値(この値は環境に合わせて調整が必要)
STEP_THRESHOLD = 0.8
# 歩いているかどうかの状態
is_walking = False
while True:
# 加速度センサーのY軸(上下)の値を取得
accel_y = joycon.get_accel_y()
# 加速度が閾値を超えたら「歩いている」と判断
if accel_y > STEP_THRESHOLD:
if not is_walking:
print("歩行開始!")
is_walking = True
else:
if is_walking:
print("停止!")
is_walking = False
time.sleep(0.05)
STEP4: VRに動きを伝えよう(仮想ジョイスティック編)
次に、STEP3で判定した「歩いている/いない」の状態を、仮想ゲームパッドの入力に変換します。pyvjoystick
ライブラリを使い、歩いている間は「左スティックを前に倒し続け」、止まったら「スティックを中央に戻す」という処理を実装します。
# 完成版コード
from pyjoycon import JoyCon, get_R_id
import pyvjoystick
import time
# 仮想ゲームパッドを作成
joystick = pyvjoystick.VJoyDevice(1)
# Joy-Conに接続
joycon_id = get_R_id()
joycon = JoyCon(*joycon_id)
# 足踏み判定の閾値(環境に合わせて調整してください)
STEP_THRESHOLD = 0.8
# 歩いているかどうかの状態
is_walking = False
print("VR足踏み歩行プログラム、起動。Joy-Conを振るか、足踏みを開始してください。")
while True:
accel_y = joycon.get_accel_y()
if accel_y > STEP_THRESHOLD:
if not is_walking:
print("歩行開始!")
# 仮想スティックを前に倒す (Y軸を最大値に)
joystick.set_axis(pyvjoystick.HID_USAGE_Y, 0x8000)
is_walking = True
else:
if is_walking:
print("停止!")
# 仮想スティックを中央に戻す (Y軸を中央値に)
joystick.set_axis(pyvjoystick.HID_USAGE_Y, 0x0)
is_walking = False
time.sleep(0.05)
STEP5: ゲームで動かしてみよう!
-
Joy-Conの固定: Joy-Conを、ストラップを手首に通した上で、ズボンの太もも横のポケットに入れるか、ゴムバンドなどで足首に固定します。加速度の変化が分かりやすい場所がおすすめです。
-
プログラムの実行: 上記の完成版コードを
vr_walk.py
のような名前で保存し、実行します。 -
ゲーム側の設定: SteamVRのゲームを起動し、移動方法の設定を「スムーズ移動(Smooth Locomotion)」や「ジョイスティックでの移動」に変更します。(テレポート移動では動作しません)
-
いざ、歩行!: その場で軽く足踏みをしてみましょう。ゲーム内のキャラクターが前に進めば成功です!
STEP_THRESHOLD
の値を調整することで、歩行判定の感度を変更できます。
おわりに
いかがでしたでしょうか。少しの工夫で、VR体験の没入感は劇的に向上します。今回作成したデバイスは、市販品には及ばないかもしれませんが、自分の手で「VRの世界を歩く」という体験を作り出す感動は、何物にも代えがたいはずです。
ここからさらに、左右のJoy-Conを使って歩く方向を制御したり、足踏みの速さで移動速度を変えたりと、改善の余地は無限にあります。ぜひ、あなただけの「VR歩行の極限」を追求してみてください!