MRが楽しい

MRやVRについて学習したことを書き残す

SteamVRのインストール手順(Windows11環境)

本日は環境構築の手順枠です。
Windows 11 環境で SteamVR のインストールを行ったので手順を記録します。

SteamVR

SteamVR は Steam で VR 機器を利用するためのツールです。
Steam 以外のアプリでも本ツールを利用するものがあるので、VR機器を持っている場合はインストールしておくと便利です。
store.steampowered.com

Steam のインストール手順

Steam 本体のインストール手順については以下の記事を参照ください。
bluebirdofoz.hatenablog.com

SteamVR のインストール手順

上記のページから Steam を起動するか、Steam 内のストア検索から[SteamVR]を検索すると、インストールページを開けます。

案内に従って SteamVR のインストールを実行します。
開始すると、バックグラウンドでインストールが行われます。

インストールが完了すると、[ライブラリ]の[ツール]項目に SteamVR が追加されます。
これで SteamVR のインストールは完了です。

Steamのインストール手順(Windows11環境)

本日は環境構築の手順枠です。
Windows 11 環境で Steam のインストールを行ったので手順を記録します。

Steamのインストール手順

Steam のダウンロードページは以下です。
store.steampowered.com

インストールボタンをクリックして、Steam のインストーラをダウンロードします。

ダウンロードした SteamSetup.exe を実行します。
インストーラが起動するので、次へ をクリックします。

使用言語の選択が表示されます。ラジオボタンを選択し、次へ をクリックします。

インストールディレクトリの選択が表示されます。
Steam のインストール先を指定し、インストールをクリックします。

インストールが開始します。後は完了まで待つだけです。

以上で Steam のインストールは完了です。

STEAMライブラリフォルダの変更手順

デフォルトだと steam のインストールディスクにゲームデータが保存されます。
ゲームデータは大容量のため、インストール先にシステムドライブを指定しているとすぐに容量が足りなくなります。
以下の手順で、STEAMライブラリフォルダを大容量の HDD に変更しておくのがオススメです。

メニューから Steam -> 設定 で設定ダイアログを開きます。

「ダウンロード」タブを開き、「STEMライブラリフォルダ」のボタンをクリックします。

フォルダの追加ダイアログが表示されます。
このとき、ドライブをそのまま指定してフォルダを追加すると「(ドライブ):\SteamLibrary」のデフォルトフォルダが作成されます。

フォルダも指定したい場合は[別の場所を選択]をプルダウンから選びます。

[別の場所を選択]の場合、フォルダ選択のダイアログが表示されるので任意のフォルダを指定します。

これでゲームのインストール時にフォルダを選択できるようになります。

VisualStudioの機能でUnityの提供関数を自動生成する

本日は VisualStudio と Unity の小ネタ枠です。
VisualStudioの機能でUnityの提供関数を自動生成する方法を記事にします。

前提条件

本機能は Visual Studio Tools for Unity のインストールが前提となります。

通常、Unity インストール時に自動でインストールが行われます。
機能が利用できない場合は VisualStudio Installer から確認してください。

基本関数の生成

試しにスクリプトを作成して VisualStudio で開きます。

右クリックから[Unityメッセージの実装]を選択します。

[Unityメッセージの実装]ダイアログが開き、Unity で提供されている関数の一覧が表示されます。
マウスオーバーで各関数の実行タイミングも確認することができます。

関数を利用したい場合は利用したい関数にチェックを入れて[OK]をクリックします。

指定した関数が自動生成されました。
実行タイミングの説明も確認できるので利用したい Unity の関数名が思い出せない場合などにも便利そうです。

参考ページ

docs.unity3d.com

MRTKのファークリップを変更して遠くのモデルを表示できるようにする

本日は MRTK の小ネタ枠です。
MRTKのファークリップを変更して遠くのモデルを表示できるようにする手順を記事にします。

MRTKのファークリップ

MRTK のカメラ設定にはどの距離までメッシュを描画するかを決定するファークリップの設定項目があります。
デフォルトでは HoloLens で 50 メートルの設定になっているので、そのままだとこの距離より遠いオブジェクトや大きさのオブジェクトは描画されなくなります。
docs.microsoft.com

このため、MRTK を使った HoloLens2 アプリで 50 m以遠の箇所やそれより大きいオブジェクトを表示する場合はこの設定を変更する必要があります。
なお、等価ディスプレイでない環境(VRやエディター)では自動で参照設定が切り替わり、デフォルト設定が 1000 メートルになります。

サンプルプロジェクトの作成

実際に手順を実施してみるため、MRTK をインポートしたサンプルプロジェクトを作成します。

MRTK のインポートと基本設定

MRTK のインポートと HoloLens 向けプロジェクトの基本設定を行い、サンプルプロジェクトを作成します。
手順の詳細は以下の記事を参照してください。
bluebirdofoz.hatenablog.com

ファークリップの変更手順

カメラプロファイルを変更するため、カスタム用のプロファイルを作成します。
[MixedRealityToolkit]からプロファイルの[Copy&Customize]をクリックして新規プロファイルを作成します。

プロファイルがカスタマイズ可能になるので[Camera]タブを開き、同じように[Clone]をクリックして Camera の新規プロファイルを作成します。
これでカメラ設定のカスタマイズが可能になります。

HoloLens2 上でのファークリップを変更するには[Display Settings]パネルを開きます。
[Transparent(透過ディスプレイ)]項の[FarClip(m単位)]の設定を変更することでより遠くのモデルを表示できるようになります。

MRTKのボタンプレハブにスクリプトからイベントを登録する

本日は MRTK の小ネタ枠です。
MRTKのボタンプレハブをスクリプトからイベントを登録する方法についてです。

MRTKのボタンプレハブ

MRTK には様々なボタンのサンプルが提供されていおり、それらには ButtonConfigHelper コンポーネントが設定されています。

この ButtonConfigHelper コンポーネントを参照してタップ時のイベントの追加・削除やテキストの変更がスクリプトからも行えます。

サンプルコード

スクリプトからボタンにイベントを追加・削除する以下のサンプルスクリプトを作成しました。
・ButtonControl.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

// ButtonConfigHelper参照のため
using Microsoft.MixedReality.Toolkit.UI;

public class ButtonControl : MonoBehaviour
{
    [SerializeField]
    private ButtonConfigHelper buttonConfigHelper;

    /// <summary>
    /// スクリプトからボタンの OnClick イベントを登録するサンプル
    /// </summary>
    [ContextMenu("AddButtonListener")]
    public void AddButtonListener()
    {
        buttonConfigHelper.OnClick.AddListener(ChangeText);
    }

    /// <summary>
    /// スクリプトからボタンの OnClick イベントを解除するサンプル
    /// </summary>
    [ContextMenu("RemoveButtonListener")]
    public void RemoveButtonListener()
    {
        buttonConfigHelper.OnClick.RemoveListener(ChangeText);
    }

    /// <summary>
    /// スクリプトからボタンのテキストを変更するサンプル
    /// </summary>
    private void ChangeText()
    {
        buttonConfigHelper.MainLabelText = "CurrentTime : " + System.DateTime.Now.ToString();
    }
}

適当なオブジェクトにサンプルスクリプトを設定して、ボタンの参照を追加します。

動作確認

シーンを再生して動作を確認します。
デフォルトではタップ時のイベントを設定していないため、ボタンをタップしても何もイベントは発生しません。

サンプルスクリプトコンテキストメニューから関数を実行してイベントを登録します。

もう一度ボタンをタップしてみると、イベントが発生してボタンの文字列が変わりました。

永続的リスナーと非永続的リスナーの違い

このとき、スクリプトから登録したイベントは Unity の Inspector 上には表示されません。
Inspector から登録したイベントと、スクリプトから登録したイベントはそれぞれ永続的リスナーと非永続的リスナーという異なる扱いになります。
bluebirdofoz.hatenablog.com

Unityでスクリプトの日本語が文字化けするのを修正する(VisualStudioのエディタ設定の変更)

本日は Unity と VisualStudio の小ネタ枠です。
VisualStudio のエディタ設定を変更して Unity でスクリプトの日本語が文字化けするのを修正する手順を記事にします。

Unityでの文字化け

例えば、Unity でスクリプトを作成した以下のケースです。

スクリプトを VisualStudio で編集して日本語のコメントを追加します。

すると以下のように Unity の Inspector では日本語が文字化けして表示されます。

これはテキストの文字コードが Shift-JIS で保存されていることが原因です。
Unity と VisualStudio の双方で日本語を正しく解釈させるには UTF-8 または UTF-8(BOM付き) などの文字コードで保存する必要があります。

VisualStudioのエディタ設定

VisualStudio の[.editorconfig]を使ってデフォルトの文字コードを変更しておくと文字化けが発生しなくなります。
Unity プロジェクトの直下に以下の .editorconfig ファイルを追加します。
・.editorconfig

# Top-most EditorConfig file
root = true

# encode
[*.cs]
charset = utf-8
# UTF-8(BOM付き)を利用したい場合は以下
# charset = utf-8-bom

この状態で同じようにスクリプトを作成して編集してみます。

以下の通り、スクリプトUTF-8文字コードで保存されて Unity 上でも日本語が正しく表示されました。

1ファイルずつの変更

1ファイルずつ個別に文字コードを変更したい場合は以下の記事の手法を参考にしてください。
bluebirdofoz.hatenablog.com

参考ページ

docs.microsoft.com
noracle.jp

MRTKの言語認識のキーワードに関する動作を調べる (その2 数字の音声コマンド)

本日は MRTK の技術調査枠です。
MRTKの言語認識で数字を指定した際にどのような動作をするか調査したので記事にします。

MRTKの音声認識

MRTK を使って音声認識を利用する詳細な手順は以下の記事を参照ください。
bluebirdofoz.hatenablog.com

今回は音声認識の単語に数字を登録してみた場合の動作を確認しました。

音声コマンドに数字を登録した場合

以下の通り、3種類の数字を登録して動作を確認してみました。
また今回は条件の重複が発生しないように別々のプロファイルに切り替えて試しました。
・「1」「2」「3」「4」という単体の数字

・「11」「23」「100」という複数桁の数字

・「one」「two」「three」という英単語での数字

動作結果

シーンを再生してそれぞれの数字がどのような発声で認識するかを確認しました。

・「1」「2」「3」「4」という単体の数字の場合
「いち」「に」「さん」「し」という日本語の発声で認識される。
また「4」に関しては「し」でも「よん」でも認識され、複数の呼び方で認識される数字がある。
英語の「ワン」「ツー」という発声では反応しない。(著者の日本語OS環境において)

・「11」「23」「100」という複数桁の数字
「じゅういち」「にじゅうさん」「ひゃく」という複数桁の数字の発声で認識される。
また「ひとひと」「にさん」「いちまるまる」のような1桁ずつの数字の発声でも認識される。
英語の「イレブン」「ワンハンドレッド」という発声では反応しない。(著者の日本語OS環境において)

・「one」「two」「three」という英単語での数字
「ワン」「ツー」「スリー」という英語の発声で認識される。
日本語の「いち」「に」「さん」という発声では反応しない。