ファッション
【2018 水着】体型カバー水着がかわいい!
隠すと見せるを使い分けて、最大限に良く見せるポイント
暮らしと仕事にちょっと役立つかも知れないエンタメ系情報サイト
はじめまして、VRアプリケーションが大好きなVR太郎です。
「Unityを使用したVRゲーム開発をしたいけど、何から手をつけていいのか分からない」
とお困りの方はいらっしゃいますか?
私自身も開発する際にゲームの根本となる「移動」方法をどう実装するべきかとても悩みました。
そこで、VR酔いを抑えることができ、初心者の方にも安心してVR体験を提供できるオススメの移動方法「テレポート」について解説したいと思います。
Unityでプログラムを作成してコントローラに機能を適応するため、コントローラ間の情報操作の流れを掴むことができ、様々なアクションに応用できるので是非挑戦してみてください。プログラミングができない方でもソースコードがあるので安心して取り組めますよ。
今回の開発では、下記の動画を参考にしました。
海外クリエイターのため日本語ではないですが、作業工程を動画で確認できるので、とてもオススメの動画です。
(ご本人に紹介許可を頂いております!)
まずは開発機材と開発環境を用意しましょう。
SteamVRの機能をUnityで扱えるようにしましょう。
Unityを起動し、上の段にある【 Window -> 「Asset Store」】を開きます。
アセットストアが表示されました。
アセットストアとはゲーム開発に必要な素材やシステムの販売、流通システムです。
今回使用するSteamVRは無料なので、安心してインポートしてください。
「SteamVR」と検索すると上記の画像のようにアセットが表示されるので、インポートをクリック。
VR空間に床となるオブジェクトを生成してみましょう。
まず【 GameObject -> Create -> 3D Object 】で 「Plane」 を選択してください。
VR空間に床が生成されました。
Unityで作成したオブジェクトは「Hierarchy」ビューに表示されます。
プレイヤーや敵、壁や床からカメラなど、ゲーム制作に使う道具が詰め込んである場所です。
同じ要領で、テレポート先を指し示すポインターを作成しましょう。
メニューバーの【 GameObject -> Create -> 3D Object 】で 「Cube」 を選択してください。
大きさは「Inspector」の「Scale」から変更可能です。
このままだと床と同じ色で識別しにくいため、色をつけるためのマテリアル設定を行います。
マテリアルを例えるなら「服」です。オブジェクトに設定することで様々な色を反映できます。
赤線枠内の【 Assets内で右クリック -> Create -> 「Material」】 を選択しましょう。
生成されたマテリアルをクリックして選択後、Inspector内の「Main Maps」から「Albedo」でマテリアル色の設定が可能です。
完成したマテリアルをポインターへドラックアンドドロップで適応できます。
VR専用のカメラを設定します。
このカメラを通して、プレイヤーはゲーム内を見通すことができます。
Projectビューから 【 Assetsフォルダ -> SteamVR -> Prefabs -> [CameraRig] 】を「Hierarchy」ビューへドラッグアンドドロップしましょう。
この[CameraRig]にはプレイヤーのカメラ情報のほかに、コントローラ情報も含んでいます。
【[CameraRig] -> Camera 】の「Inspector」のコンポーネントに「SteamVR_Camera」を追加します。
スクリプトを作成して、テレポート機能を作りましょう。
スクリプトを作成するには【 Assetsフォルダ内(右クリック) -> Create -> C# Script 】で作れます。
スクリプトの内容は以下のとおりです。
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using Valve.VR;
- public class Teleporter : MonoBehaviour
- {
- public GameObject m_Pointer;
- public SteamVR_Action_Boolean m_TeleportAction;
- private SteamVR_Behaviour_Pose m_Pose = null;
- private bool m_HasPosition = false;
- private bool m_IsTeleporting = false;
- private float m_FadeTime = 0.5f;
- private void Awake()
- {
- m_Pose = GetComponent<SteamVR_Behaviour_Pose>();
- }
- void Update()
- {
- m_HasPosition = UpdatePointer();
- m_Pointer.SetActive(m_HasPosition);
- if(m_TeleportAction.GetStateUp(m_Pose.inputSource))
- {
- TryTeleport();
- }
- }
- private void TryTeleport()
- {
- if(!m_HasPosition || m_IsTeleporting)
- return;
- Transform cameraRig = SteamVR_Render.Top().origin;
- Vector3 headPosition = SteamVR_Render.Top().head.position;
- Vector3 groundPosition = new Vector3(headPosition.x, cameraRig.position.y, headPosition.z);
- Vector3 translateVector = m_Pointer.transform.position - groundPosition;
- StartCoroutine(MoveRig(cameraRig, translateVector));
- }
- private IEnumerator MoveRig(Transform cameraRig , Vector3 translation)
- {
- m_IsTeleporting = true;
- SteamVR_Fade.Start(Color.black, m_FadeTime, true);
- yield return new WaitForSeconds(m_FadeTime);
- cameraRig.position += translation;
- SteamVR_Fade.Start(Color.clear, m_FadeTime, true);
- m_IsTeleporting = false;
- }
- private bool UpdatePointer()
- {
- Ray ray = new Ray(transform.position, transform.forward);
- RaycastHit hit;
- if(Physics.Raycast(ray , out hit))
- {
- m_Pointer.transform.position = hit.point;
- return true;
- }
- return false;
- }
- }
冒頭で紹介した動画内でもスクリプトの確認ができますので、そちらと合わせて作業をすると良いと思います。
次に、コントローラに移動処理をアタッチ(適応)します。
【[CameraRig] -> Controller[left]】に作成したスクリプトをアタッチしてください。
アタッチしたスクリプトに、テレポートで使用する際のコントローラ情報を任意に設定すれば完成です。
いかがだったでしょうか。
私はホラーゲームが好きなので、VRホラーゲームを作成してみました。
Unityでは様々なアセットを使用すればゲーム制作も思いのままに進みますので、これをきっかけにチャレンジしてみてください!
また、今回紹介した動画投稿者andrewさんはDiscordというアプリを通して連絡が可能です。
質問やandrewさんを通じて集まったクリエイターの作品を閲覧することも可能なので、英語が得意な方は是非交流してみてください。
(文/VR太郎)
※記事内容はすべて公開日時点の情報となります。
記事をシェアする!