未分類

VRサイクリングの試作1

Meta QuestとRobloxとフィットネスバイクを組み合わせて、VRサイクリングを試作しました。

VRサイクリングとは、VR空間内でサイクリングすることです。

  • Meta Quest:VR/MRゴーグル
  • Roblox:3D/VRゲーム作成システム
  • フィットネスバイク:自転車型フィットネス器具

試作記事は2回に分けて、今回はRobloxでサイクリングコースを作る話です。

次回は、Meta Questとフィットネスバイクを使って、そのコースをどうやってサイクリングするかの話です。

  • 今回:サイクリングコース制作
  • 次回:サイクリングコース走行

 

今回の試作では、VR上での走行速度とフィットネスバイクの回転数(及び負荷)は連動していません。

つまり、フィットネスバイクをゆっくりこいでも、張り切ってこいでも、VRでの周りの景色の変化は同じです。

どちらかというと、VRの景色変化に合わせてフィットネスバイクをこぐといった使い方です。

  • VR景色の変化に合わせてフィットネスバイクをこぐ

実際にVRサイクリングすると、この差異は気にならなく、屋外を走行している圧倒的な爽快感を感じることができました。

  • VR感がとても強く、差異は気にならない

 

 

サイクリングコース

サイクリングコースは、Conveyor(コンベアー)とテレポートで作ります。

Conveyorとは、自走する床のことです。プレイヤーがその床の上に立つと自動で移動してくれます。

テレポートは、瞬時に別の場所に移動できる機能のことです。

 

コンベアー

コンベアーは、下記記事で詳細に解説されています。

 

Conveyor

下図の黄色い部分が、Conveyorです。

Conveyorの左右端に緑色のテレポートがあります。

Conveyor
Conveyor:画像クリックで拡大表示

 

 

「パーツ」から「ブロック」を選び、名前を「Part」から「Conveyor」に変更します。

Conveyor : explorer
Conveyor : explorer

 

Conveyorのサイズとポジションを変更します。

  • Size:726, 1, 20
  • CFrame
    • Position:-293, 578, -143
    • Orientation:0, 0, 0

 

Conveyorに、ScriptとConfigurationを追加します。

 

Configuration

  • Configurationの中に「IntValue」を追加
  • 「IntValue」の名前を「Speed」に変更

 

Script

変数speedの値で、移動速度を調整します。


local conveyor = script.Parent
local speed = conveyor.Configuration.Speed.Value
speed = 5
conveyor.Velocity = conveyor.CFrame:vectorToWorldSpace(Vector3.new(speed, 0, 0))

※ソースをクリックすると、綺麗なソースが表示されます

 

テレポート

プレイヤーがConveyorに乗ると終点まで移動して終わってしまいます。

そこで、終点から始点までテレポートすることで、何度もConveyorに乗ることができます。

 

下図の緑色の四角形が、Conveyor終点にあるTeleport1Aです。

プレイヤーがTeleport1Aに触れると、Conveyor始点にあるTeleport1Bにテレポートします

  • Teleport1A → Teleport1B
Teleport1A
Teleport1A:画像クリックで拡大表示

 

TeleportはConveyorの階層の中にあります。

Teleport : Explorer
Teleport : Explorer

 

「パーツ」から「ブロック」を選び、Conveyorの始点と終点に配置します。

名前は「Part」からそれぞれ「Teleport1A」と「Teleport1B」に変更します。

 

TeleportScript


local Teleport1A = script.Parent.Teleport1A
local Teleport1B = script.Parent.Teleport1B

-- A -> B へテレポート
local function TeleportA2B(part)
	local humanoid = part.Parent:FindFirstChild("HumanoidRootPart")
	if humanoid then
		-- プレイヤーの位置をテレポートブロックBにする
		humanoid.CFrame = Teleport1B.CFrame + Vector3.new(-10,0,0)
	end
end

-- B -> A へテレポート
local function TeleportB2A(part)
	local humanoid = part.Parent:FindFirstChild("HumanoidRootPart")
	if humanoid then
		-- プレイヤーの位置をテレポートブロックAにする
		humanoid.CFrame = Teleport1A.CFrame + Vector3.new(0,0,10)
	end
end

Teleport1A.Touched:Connect(TeleportA2B)
Teleport1B.Touched:Connect(TeleportB2A)

※ソースをクリックすると、綺麗なソースが表示されます
 

 

Script

テレポートの存在を点滅することで示しています。


while true do
	script.Parent.Transparency = 0
	wait(1)
	script.Parent.Transparency = 0.7
	wait(1)
end

※ソースをクリックすると、綺麗なソースが表示されます
 

 

参考

  1. 【Roblox Studio】プレイヤーが自動で移動する床を作ろう【Conveyor】
  2. Robloxでテレポート
  3. Robloxでテレポートするブロックを作る

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です