みらいテックラボ

音声・画像認識や機械学習など, 週末プログラマである管理人が興味のある技術の紹介や実際にトライしてみた様子などメモしていく.

Unityに再チャレンジ!!

最近メタバースが話題となっているので, 少し試してみようかと昨年末にMeta Quest2を購入した.
せっかくなので, Unityを使ってMeta Quest2のコンテンツを作れたらと思い, Unityに再チャレンジしてみることにした.
(実は, かなり昔に一度Unity 5にチャレンジしたことあるのだが, その時はあまり続かなかったー)

今回, リコーTHETAで撮影した360度動画を再生できるようにビューワーを作成してみる.


1. 事前準備
1.1 Unityプロジェクトを作成する
Unityのインストールや新規プロジェクトの作成方法ついては, ネット上に多くの記事があるので, ここでは省略する.
また, UnityでAndroid版をビルドする環境の構築についても, 同様にここでは省略する.
今回使用したUnityのバージョンは, 2021.3.19f1である.

1.2 360度動画を準備する

  • RICHO Theta SC2を使って, 360度動画を撮影する.

素材:荒川でリコーTHETA SC2を使って撮影した映像.


2. ビューアの実装[1]
2.1 動画をUnityに取り込む

  • ProjectウィンドウのAssetsで, 右クリックしてメニューを出し, 「Import New Asset」を選択する. 360度動画(SampleMovie.MP4)を選択して, Importする.

2.2 投影する天球をシーンに置く

  • 今回, 天球モデルは「Sphere100.fbx」[1]をダウンロードし, 利用させていただく. (作成者に感謝ですね!!)
  • ProjectウィンドウのAssetsで, メニューから「Import New Asset」を選択し, 「Sphere100.fbx」をImportする.
  • Assetsの「Sphere100」をHierarchyウィンドウにD&Dする.
  • Hierarchyウィンドウの「Sphere100」を選択し, Inspectorウィンドウ内のTransform - Scale - (X, Y, Z)を(-100, 100, 100)に設定する.


(注) Xを正数としている記事もあるが, 天球の内側からみるので負数となる.

  • Hierarchyウィンドウの「Main Camera」を選択し, Inspectorウィンドウ内のTransform - Position - (X, Y, Z)を(0, 0, 0)に設定する.

2.3 マテリアルを作成する

  • ProjectウィンドウのAssetsで, メニューから「Create」>「Material」を選択し, 新しいMaterialを作成する.
  • Assetsに作成された「New Material」を選択して右クリックでメニューを出し, 「Rename」を選択し名前を変更する. ここでは, 「MovieMat」とした.
  • MovieMatを選択し, Inspectorウインドウ内のShaderを「Unlit」>「Texture」に変更する. これにより, 影がつかなくなる.

2.4 天球モデルに動画/マテリアルを追加する

  • 360度動画をHierarchyウィンドウの「Sphere100」にD&Dする.
  • 「MovieMat」をHierarchyウィンドウの「Sphere100」にD&Dする.
  • InspectorウィンドウのVideo PlayerのLoopにチェックを入れる. (Loop再生設定)


(注) 再生スクリプトを実装する古い記事(以前は映像再生にMovieTextureを使用)もあるが, 現在はVideo Playerを使用するようになっているので, InspectorウィンドウのVideo PlayerのPlay On Awakeにデフォルトでチェックが入っていることを確認するのみでOK.

2.5 マウスで方向を変える
こちらの「MouseLock.cs」というスクリプト利用させていただく.

  • ProjectウィンドウのAssetsで, メニューから「Import New Asset」を選択し, 「MouseLook.cs」をImportする.
  • 「MouseLook.cs」をHierarchyウィンドウの「Main Camera」にD&Dする.

これで, 「Build And Run」すると, WIndows版のexeをビルド後, 実行される.


3. Android版ビューア実装
ついでに, Android版ビューアも作成し, Androidのジャイロセンサを使って向きを変えるようにする.

3.1 PlatformをAndroidに切り替える

  • File > Build SettingsでPlatformのAndroidを選択する.
  • Swtch PlatformでAndroidに切り替える.

Androidのビルド環境が正しく設定されていれば, 問題なく切り替わる.

3.2 ジャイロで方向を変える[2]

  • ProjectウィンドウのAssetsで, メニューから「Create」>「C# Script」を選択し, 新しいScriptを作成する.
  • Assetsに作成された「New Material」を選択して右クリックでメニューを出し, 「Rename」を選択し名前を変更する. ここでは, 「MovieMat」とした.
  • スクリプトを実装する.

[コード]

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

public class CameraMove : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        if (!Application.isEditor)
        {
            Input.gyro.enabled = true;
        }
    }
    // Update is called once per frame
    void Update()
    {
        if (!Application.isEditor)
        {
            mainCamera.transform.rotation = Quaternion.Euler(0, 0, -180) * Quaternion.Euler(-90, 0, 0) * Input.gyro.attitude * Quaternion.Euler(0, 0, 180);
        }
    }
}
  • 「GyroCamera.cs」をHierarchyウィンドウの「Main Camera」にD&Dする.

これで,  Android端末をPCに接続して「Build And Run」すると, Android版のapkをビルド&インストールが行われ, 実行される.


360度ビューアの作成を通して, 少しUnityの使い方を思い出してきたー.
次は, Meta Quest2で動画再生できるようにトライしてみようと思う.

---
参照URL:
[1] No hack, no work・UnityとOculusで360度パノラマ全天周動画を見る方法【無料編】
[2] スマホのジャイロでカメラを回転させる方法