-
Notifications
You must be signed in to change notification settings - Fork 3
環境構築
Unityプロジェクトをダウンロードして、apkファイルを作り、OculusQuestで動作を確認するまでの手順です。
- Unity2018.3.8f1,Unity 2018.4.17f1
- Windows10
- OculusQuest(Ver14)
- Oculus Integration(Ver14.0)
- Photon(Pun:2.17 Photon lib 4.1.3.0)
以下からUnity 2018.3.8 or 2018.4.Xをインストールします。
https://unity3d.com/get-unity/download/archive
AndroidBuildSupportにチェックを入れます。
VirtualCollaboBaseのUnityプロジェクトをGithubからCloneやDownloadZipなどでダウンロードします。
https://github.com/tech-sketch/VirtualCollaboBase
ダウンロードしたUnityプロジェクトをUnity 2018.3.8で開きます。
こちらのOculusのアーカイブページからバージョン14.0をダウンロードします。
https://developer.oculus.com/downloads/package/unity-integration-archive/14.0/
ダウンロードされたOculusIntegration_14.0.unitypackageをUnityにドラッグ&ドロップでインポートします。
右下のImportボタンをします。
インポートには時間がかかります。
その後ポップアップが出た場合、Yes,Upgrade,Restartを押してUnityを再起動します。
ルームを管理したり、会話をしたりするのに必要なマルチプレイヤープラットフォームであるPhotonを設定します。
Photonのサイトでアカウントを作ります。
https://dashboard.photonengine.com/ja-JP/account/SignUp
「新しくアプリを作成する」を押します
Photonの種別は「PhotonRealtime」と「PhotonVoice」をそれぞれ作ります。
名前は自由です。
2つ作るとこのような画面になります。
アプリケーションIDと書いてある部分をクリックするとID全体が表示されます。このIDを後ほど使います。
アセットストアからPhoton Voice 2をインストールします。
https://assetstore.unity.com/packages/tools/audio/photon-voice-2-130518
Unityにインポートします。
エラーが出ていると思います。
MicWrapper.csのコードを修正します。この作業をしないと、VirtualCollaboBaseでアバターの口パクを動作させる部分でエラーが出てアプリが動きません。
MicWrapper.csをダブルクリックで開きます。検索で探すと便利です。
元のコードの中身をすべて消して、以下のコードをコピーペーストします。
MicWrapper.cs書き換え用
using UnityEngine;
using System;
using System.Linq;
namespace Photon.Voice.Unity
{
// Wraps UnityEngine.Microphone with Voice.IAudioStream interface.
public class MicWrapper : Photon.Voice.IAudioReader<float>
{
// Change to public static
public static AudioClip mic;
private string device;
public MicWrapper(string device, int suggestedFrequency, Voice.ILogger logger)
{
try
{
this.device = device;
if (Microphone.devices.Length < 1)
{
Error = "No microphones found (Microphone.devices is empty)";
logger.LogError("[PV] MicWrapper: " + Error);
return;
}
if (!string.IsNullOrEmpty(device) && !Microphone.devices.Contains(device))
{
logger.LogError(string.Format("[PV] MicWrapper: \"{0}\" is not a valid Unity microphone device, falling back to default one", device));
device = null;
}
int minFreq;
int maxFreq;
logger.LogInfo("[PV] MicWrapper: initializing microphone '{0}', suggested frequency = {1}).", device, suggestedFrequency);
Microphone.GetDeviceCaps(device, out minFreq, out maxFreq);
var frequency = suggestedFrequency;
// minFreq = maxFreq = 44100; // test like android client
if (suggestedFrequency < minFreq || maxFreq != 0 && suggestedFrequency > maxFreq)
{
logger.LogWarning("[PV] MicWrapper does not support suggested frequency {0} (min: {1}, max: {2}). Setting to {2}",
suggestedFrequency, minFreq, maxFreq);
frequency = maxFreq;
}
mic = Microphone.Start(device, true, 1, frequency);
logger.LogInfo("[PV] MicWrapper: microphone '{0}' initialized, frequency = {1}, channels = {2}.", device, mic.frequency, mic.channels);
}
catch (Exception e)
{
Error = e.ToString();
if (Error == null) // should never happen but since Error used as validity flag, make sure that it's not null
{
Error = "Exception in MicWrapper constructor";
}
logger.LogError("[PV] MicWrapper: " + Error);
}
}
public int SamplingRate { get { return Error == null ? mic.frequency : 0; } }
public int Channels { get { return Error == null ? mic.channels : 0; } }
public string Error { get; private set; }
public void Dispose()
{
Microphone.End(this.device);
}
private int micPrevPos;
private int micLoopCnt;
private int readAbsPos;
public bool Read(float[] buffer)
{
if (Error != null)
{
return false;
}
int micPos = Microphone.GetPosition(this.device);
// loop detection
if (micPos < micPrevPos)
{
micLoopCnt++;
}
micPrevPos = micPos;
var micAbsPos = micLoopCnt * mic.samples + micPos;
var bufferSamplesCount = buffer.Length / mic.channels;
var nextReadPos = this.readAbsPos + bufferSamplesCount;
if (nextReadPos < micAbsPos)
{
mic.GetData(buffer, this.readAbsPos % mic.samples);
this.readAbsPos = nextReadPos;
return true;
}
else
{
return false;
}
}
}
}
Asset>Photon>PhotonUnityNetworkingにResourcesフォルダがあるか確認します。
Resourcesフォルダがない場合手動で作ってください。(このフォルダがないと、次の工程でPhotonServerSettingsが作成できません)
Window > Photon Unity Networking > PUN Wizzard を開きます。(すでに開いているかもしれません)
Skipを押します。
Window>PhotonUnityNetworking>PUN Wizardを押して、
SetupProjectを押してPhotonServerSettingsを開きます。
(もしくはPhoton>PhotonUnityNetworking>Resourcesの中のPhotonServerSettingsをクリックしても開きます)
Server/Cloud Settings左の三角形を押して入力欄を開き入力していきます。
-
AppID Realtime : webで取得したPhotonRealtimeのアプリケーションID
-
AppID VoiceAppID : webで取得したPhotonVoiceのアプリケーションID
-
Fixed Region : JP
それ以外の項目はデフォルトのままで大丈夫です。
Asset>VirtualCollaboBase>Scenes>Product>にCoreのシーンがあるので開きます。
CoreのシーンのPlayerオブジェクトの下にあるLocalAvaterのLayerの設定を確認します。設定がAvatarでなければ、後続の設定作業を行います。
Layerの名前の右の上下のUIをクリックし、でできたUIのAddLayerを選択します。
User Layer 8の設定値をクリアします。
User Layer 8の設定値をAvatarに変更します。
LocalAvaterのLayerの設定がAvatarになっていればOKです。シーンを保存します。 Layerの設定作業は以上です。
以上でUnityプロジェクトでの設定は終了です。
以降「apkファイルを作る」 or 「Unityエディタで動かす」の工程に進めます。
File>BuildSettingsでAndroidを選びSwitchPlatformを押します。
かなり時間がかかります。
SceneInBuildに以下のシーンを以下の順番にセットします。
既にAndroidSDKがPCに入っている場合、 Buildを押すと「C:\Users\XXX\AppData\Local\Android\sdkにsdkがありませんが直接sdkを探しますか?」やOpenJDKに関する許可ダイアログが出るのでYesなどを押していけばビルドできます。
今のPCでAndroidビルドをしたことがない場合、AndroidのSDKをインポートする必要があります。
AndroidStudioからダウンロードできます。
https://developer.android.com/studio/?hl=ja
UnityでEdit>Preference>ExternalToolsでUse Embedded JDKにチェックを入れれば、JDKは自動でインストールされます。
詳しくはこちら!
Unity2018インストールからAndroidビルドするまでの手順
BuildSettings右下のBuildを押してapkファイルを作ります。
保存場所や名前は自由です。
時間がかかります。
成功すると、apkファイルが入ったフォルダが開きます。
コマンドプロンプトを使ってadbコマンド経由で入れる方法と、SideQuestという外部ソフト経由で入れる方法を説明します。
こちらの記事が詳しいです。
SideQuestを使ってOculus Questに非公式アプリ(apk)を楽々インストール
Oculus Quest/Oculus Goに非公式アプリ(apk)をインストールする(上級者向け)
スマートフォンなどに入れたOculusアプリで開発者モードに設定します。
設定>OculusQuestを選択>その他の設定
開発者モードを選択
開発者モードをONにします
OculusQuestをPCにUSBケーブルで接続します。
SideQuestを以下からダウンロードします。
https://sidequestvr.com/#/download
SideQuestを開き、右上の下矢印マークを押してapkファイルを開きます
もしくは左上のロゴ付近にapkファイルをドラッグします
コマンドプロンプトを開き、以下のadbコマンドでapkをインストール
adb install apkの場所.apk
新しいPCからOculusQuestにapkを入れる際、OculusQustの画面で、「Allow USB debugging?」(このPCを信頼しますか)のようなダイアログが出るのでOKを押します。
Successと出たら成功です。
(adb install と入力した後に、apkファイルをコマンドプロンプトの画面にドラッグすると楽です)
2回目からは
adb install -r apkの場所.apk
で再インストールができます。
ライブラリ>提供元不明のアプリからVirtualCollaboBaseを開きます。
ここまででOculusQuestでアプリを動かすための環境構築は終了です。
VirtualCollaboBaseの基本的な使い方はこちら
Unityエディタ上で、PCVR(もしくはOculusLink)をつなぎ、動作確認をすることができます。
Asset>VirtualCollaboBase>Scenes>Product>Coreを開きます。
実行をするとアプリが始まります。
PlayerSettings>XRSettings>VirtualRealitySupportにチェックが入っている必要があります。