MRが楽しい

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

スクリプトからHoloLensの3Dオブジェクトフォルダにアクセスする

本日は HoloLens の小ネタ枠です。
スクリプトからHoloLensの3Dオブジェクトフォルダにアクセスする手順を記事にします。
f:id:bluebirdofoz:20200829224604j:plain

3Dオブジェクトフォルダへのアクセス

スクリプトからHoloLensの3Dオブジェクトフォルダにアクセスするには KnownFolders Class を使います。
docs.microsoft.com
docs.microsoft.com

サンプルスクリプト

テキストファイルの文字列を読み込んで表示するサンプルシーンを作成しました。
f:id:bluebirdofoz:20200829224616j:plain

以下のようにUnity上では SteamingAssets を参照するスクリプトを利用します。
・GetObject3DPath.cs

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

public class GetObject3DPath : MonoBehaviour
{
    /// <summary>
    /// 3Dオブジェクトフォルダ配下のファイルパスを取得する
    /// (%USERPROFILE%\3D Objects)
    /// </summary>
    static public string GetFilePath(string filename)
    {
        return System.IO.Path.Combine(GetFolderPath(), filename);
    }

    /// <summary>
    /// 3Dオブジェクトフォルダのパスを取得する
    /// (%USERPROFILE%\3D Objects)
    /// </summary>
    static public string GetFolderPath()
    {
        string directorypath = "";
#if WINDOWS_UWP
        // HoloLens上での動作の場合、3D Objectsフォルダを参照する
        directorypath = Windows.Storage.KnownFolders.Objects3D.Path;
#else
        // Unity上での動作の場合、Assets/StreamingAssets/Documentフォルダを参照する
        directorypath = System.IO.Path.Combine(UnityEngine.Application.streamingAssetsPath, "3D Objects");
#endif

        return directorypath;
    }
}

読み込みを確認するため、指定テキストファイルの先頭行の文字列をテキストに表示するスクリプトを追加しています。
・KnownTextToPanelMessage.cs

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

public class KnownTextToPanelMessage : MonoBehaviour
{
    /// <summary>
    /// メッセージテキスト出力ゲームオブジェクト
    /// </summary>
    public GameObject MessageTextObject;

    /// <summary>
    /// メッセージテキストUI
    /// </summary>
    private UnityEngine.UI.Text p_MessageText;

    // Start is called before the first frame update
    void Start()
    {
        // メッセージテキストUI参照の取得
        p_MessageText = MessageTextObject.GetComponent<UnityEngine.UI.Text>();

        // メッセージの読み込みと表示
        ShowMessage("message.txt");
    }

    /// <summary>
    /// メッセージの読み込みと表示
    /// </summary>
    /// <param name="p_filename"></param>
    void ShowMessage(string p_filename)
    {
        string filepath = GetObject3DPath.GetFilePath(p_filename);

        // ファイル読み込み
        // (UWP で動作するように new StreamReader(string, System.Text.Encoding) を利用する)
        using (System.IO.StreamReader streamreader =
            new System.IO.StreamReader(filepath, new System.Text.UTF8Encoding(false)))
        {
            // 最初の一行を読み込み
            string message = streamreader.ReadLine();

            // パネルテキストに表示する
            p_MessageText.text = message;
        }
    }
}

3Dオブジェクトフォルダにアクセスするには Capability の設定を行う必要があります。
メニューから Edit -> Project Settings.. を開き、[Capabilities]の[Objects3D]のチェックを有効にします。
f:id:bluebirdofoz:20200829224702j:plain

HoloLens上での確認

HoloLensの3Dオブジェクトフォルダにテキストファイルを配置します。
f:id:bluebirdofoz:20200829224713j:plain

HoloLens上でアプリケーションを起動すると、テキストファイルの先頭行が表示されました。
f:id:bluebirdofoz:20200829224721j:plain