Unity

Unityでbuildして作られたファイルのコピー作業における問題点

Unityでbuildした後で、動作テストをする際には、開発環境で実施する他、インストール先で動作しないと困るので、別途必要なファイルだけ取り出して、別のPC上で動作確認を実施している。

今回 #VRCHBPのブラウザ側にファイルオープン機能を付けて、動作確認をしようとしたが、どうしても、開発環境では動作するが、別PCでは動作しないことが判明。何日も悩んでしまったが、開発環境ならば動くということで、開発環境のフォルダごと全てのファイルをコピーしたら動作することが判明した。つまりファイルのコピー状態がおかしい。そこで、WinMergeを使って確認したところ、同じファイル名でタイムスタンプも同じだが、中身が異なるものがbuildされていることが判明。そのファイルをExplorerでコピーしたら、問題無く動作する。

つまりコピー作業に問題があった。実は、フォルダのコピーにはExplorerでのコピーでは無くて、batファイルを起動すれば済むようxcopyコマンドを用いていた。その際、時間節約のため、同じファイル名ならばタイムスタンプが新しい場合だけコピー実施していたが、それが完全に裏目に出ていた。現在は、タイムスタンプに関係なく全て上書きコピーするように引数を調整した。これはUnityあるあるだろうなとは思う。

ちなみにUnityでbuildした際出来る実行ファイルは、必ずタイムスタンプが古い時間のファイルが作られるが、ファイル単位で、copyコマンドで処理していたので問題が発生していなかった。build後コピーするとタイムスタンプは古いタイムスタンプではなく、コピーした時間になるので、buildの違いが判るという効果もある。

広告
Unity · VRソフト

ローカル動画ファイル再生

#VRCHBPにて、ローカルの動画ファイル再生を実装してみました。使用してるUnity Assetは、Youtubeのストリーミング再生のみ対応しているAssetだったけれども、内部で使っているのは、UnityのVideoPlayerなので、URLの代わりにファイル名を渡すようにして、VideoClipを指定すれば、再生出来ました。

ネットワークドライブ上のファイル再生も出来たので(\\PC名\共有名\apc.mp3のような形式)、世の中のVR Video Playerでも対応することはできるのだろうと思う。

UnityのVideoPlayerでのローカルファイル再生は、軽めの動画ファイルで無いと重くて再生品質がよろしくなく、またファイルによっては、90度映像の向きがずれていて、この対応も考える必要があることが判ってきました。

それからフォーマット(360/180, ou/sbs)を手動で切り替えるのは、かなり面倒であることも理解できました。機能動作確認だとしょっちゅうHMDを付けたり外したりになるので、このあたりも改良が必要であり、動画ファイルを選ぶのもVR空間内で閉じないと、いまひとつであることは理解出来ました。これらひとつずつ解決していく必要があるでしょう。

Unity · VRソフト

VR180対応続き 3

#VRCHBP で再生可能なVR動画を増やすために、VR360 Up/Down(Over Under), Side by Side対応と、VR180 none, Up/Down, Side by Side の対応を進めてきたが、ひとつのマテリアルで、パラメーターだけ変更してということは、うまくできなかったのは先日記載した通り。結局のところ、都合6個のマテリアルを用意して、XBox ControlerのViewボタンをクリックしたら、マテリアルを切り替えるよう変更した。


void Update () {

if (Input.GetButtonDown(“XB1View”)) {
video_mode++;
if (video_mode > 5) {
video_mode = 0;
}

this.GetComponent().sharedMaterial=_material[video_mode];
RenderSettings.skybox = _material[video_mode];
video_mode_change = true;
}
}

概ね動作している様子だが、YouTubeの動画では正しいフォーマットで無いものも多く分かりにくいので、ローカルファイル再生機能を用意しようと検討中。

Unity · VRソフト

Oculus HomeのRecentアプリ一覧に登録させない方法

#VRCHBPが、Oculus HomeのRecentアプリ一覧に登録されるようになり、それではうまく使えないので、Oculusのフォーラムに質問を投げていたところ、御回答頂いた。

残念ながら解決策は無いとのことだが、VR側単独で起動したことは判るので、Desktop側を自分で起動させて連動させる方向で、検討する予定。

Unity · VRソフト

VR180対応続き 2

Unity上で、マテリアルのSkybox/Panoramicのパラメータ(_ImageTypeや_Layout)を動的に変更して、VR360とVR180の切り替えを実現させようと試作してきたが、マテリアルの取得も問題なく、EnableKeywordの設定も入れて、値の変更を実施してもエラーにはならないのだが、どうにもSkybox/Panoramicの設定は変更されない。

ただ色を変えるなどとは異なり、描画中に変更できる代物ではないのかなと思い立ち、複数のマテリアルを用意して、それを切り替える方向で再検討中。うまくいけば、VR180対応だけでなく、2Dの描画もできるだろうと思う。

Unity · VRソフト

ZfBrowserの音を止める

Asset提供元に問い合わせしていたのだが、返信が来ていた。結論としては音を止める手段は無いので、EvalJs機能で、表示しているコンテンツに対して介入せよとの御神託。

UnityではScene全体で音を止めることは可能であるが、ZfBrowser自身は、Audio sourceは無いが勝手に音を出しているようで困ったなと思う。これでは同じSceneにBrowserとPlayerを同居出来ないので、Sceneを分けることになるが、UI上イマイチだなと思う。

Unity · VRソフト

VR180対応試作中

#VRCHBP が使用しているUnity Video Playerの映像出力方法を変更して、Skybox/Panoramicを使うことにして、VR360ではなくVR180の動画が再生出来るようと試作中。

Textureのサイズは本来は動画の解像度に合わせるべきなのだが、Youtubeの場合、環境や動画によってまちまちなので、そうならばRiftやFOVEのLCD解像度に近くても良いだろうと、2160×1080にしてみると、YoutubeのVR360では、空間内で細く縦に隙間が一か所空いてしまう。とりあえず1280×720にすると隙間なくなったが、1920×1080を後で試してみようと思う。

またVR180を再生すると、どうもおかしいので、左右の目をそれぞれつむって確認したところ、左右のレンズに表示されるものが全く異なることが判明した。スマートフォン向けにはSide by Side形式のものがほとんどだと考え、それがデコードできるよう試作したのだが、両眼用の映像になっていないものが多いことになる。案外きちんと作ってあるものは少ないのだなと再認識。スマートフォンで表示している場合、3D感が低い場合が多く、そんなものだという認識で居たが、どうやら実は映像の方もサボっていることになる。それではVRを楽しめないわけで、RiftなどのHMDで見ている人は非常に少ないのだなと思う。

それからVR180は上下が球型に歪んでいるのでコンテンツに依るのだろうが、Skyboxではダメなのかもと思う。なかなか奥が深い。

 

VRソフト

Mute設定とVolume設定値を覚えるようにする

#VRCHBP 更新中。VRコンテンツを再生する際、毎回MuteとVolumeの設定がデフォルトに戻る実装にVer1.01ではなっていたが、それでは使いにくいので調べていました。

Unityではゲームのハイスコアなどを記録するPlayerPrefsというクラスが存在し、変数の値を簡単に記録することができるので、Mute/Volumeの設定を変えるたびに覚えるようにして、起動時にその値を読みだして設定するように修正しました。

[Unity][Unity3d]ゲームのスコア情報などを簡単に保存出来るPlayerPrefsクラス

YouTubeのコンテンツの場合、音が大きかったり小さかったりバラバラなので、音量制御は少しこだわった実装(Mute中でもVolume位置を変更できる)にしていますが、さらに使いやすくなったように思います。

さて次はVR180への対応と、Playlistへの対応。ブラウザをVR側に入れるのは現在保留中。

VRソフト

アドオン ソースコード

ソースコードはきちんと記述できないのでインデントが壊れていますが、以下、動かないコード。batファイルまでは動いていますが、最後のjscriptはダメです。

manifest.json
{
"manifest_version": 2,
"name": "vr_launcher",
"version": "1.0",
"description": "Adds a browser action icon to the toolbar. Click the button to #VRCHBP YouTube VR Channel Player. See https://appletllc.wordpress.com/",
"homepage_url": "https://appletllc.wordpress.com/",
"icons": {
"48": "icons/button_theme7_10B_48.png",
"96": "icons/button_theme7_10B_96.png",
"128": "icons/button_theme7_10B_128.png"
},

“applications”: {
“gecko”: {
“id”: “vr_launcher@appletllc.wordpress.com”,
“strict_min_version”: “50.0”
}
},

“permissions”: [“nativeMessaging”,
“tabs”
],

“background”: {
“scripts”: [“background.js”]
},

“browser_action”: {
“default_icon”: “icons/button_theme7_10B_32.png”,
“default_title”: “vr_launcher”
},

“web_accessible_resources”: []

}

background.js
(function() {
/*
On startup, connect to the #VRCHB&P Player app.
*/
var port = browser.runtime.connectNative("applet_llc.vr_launcher");

/*
Listen for messages from the app.
*/
port.onMessage.addListener((response) => {
console.log(“Received: ” + response);
});

/*
On a click on the browser action, send the app a message.
*/
browser.browserAction.onClicked.addListener(() => {
console.log(“Clicked”);
var tabUrl = browser.tabs.url; //tab.url; //tabs[0].url;
port.postMessage(tabUrl);
});

})()

vr_launcher.json
{
"name": "applet_llc.vr_launcher",
"description": "vr_launcher",
"path": "vr_launcher.bat",
"type": "stdio",
"allowed_extensions": [ "vr_launcher@appletllc.wordpress.com" ]
}

レジストリ
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Mozilla\NativeMessagingHosts\applet_llc.vr_launcher]
@=”C:\\Users\\kazunori\\AppData\\Local\\applet_llc.vr_launcher\\vr_launcher.json”

vr_launcher.bat

@echo off
rem from http://doudemoexe.com/Batch/0005.jsp

setlocal

for /f “tokens=1,* delims=:” %%I in (‘findstr /n .*’) do (
cscript vr_launcher.js %%J
)

vr_launcher.js

// #VRCHBP luncher

var objStdIn = WScript.StdIn;
var objStdOut = WScript.StdOut;
var fs = new ActiveXObject(“Scripting.FileSystemObject”);

var objArgs = WScript.Arguments;

var myShell = WScript.CreateObject(“Shell.Application”);
myShell.ShellExecute(“VR_Channel_Player.exe”, objArgs(1));

WScript.Quit(0);

VRソフト

FireFox/Chromeアドオン開発中

#VRCHBP  のプレイヤーを自前のブラウザからではなく、FireFox/Chromeのアドオンとして、動かせないかまずはFireFox向けでアドオン作成中。

manifest.jsonやbackground.jsを作成し、レジストリにパスを書いて、vr_launcher.batから、vr_launcher.jsを起動するところまでは出来たけど、ブラウザからnativeMessagingで、JSON形式でURLを取得したいところ、batファイルが受けてしまい、うまく動かず。それでもbatファイルを直して標準入力を受け取り、引数として渡せる部位は出来たけれども、コマンドプロンプトからなら動くけど、ブラウザからボタンクリックしても起動せず。どうやら権限の問題が発生している様子。batでjscript起動ではなく、C言語で書いたランチャーを書いた方が良さそうだが、解決しないかも知れない。まずは権限を確認してみて、なんらかの実行ファイルの場合との違いを見た方が良さそう。

ちなみにFireFox向けのアドオン作成は、どこのサイトのドキュメントも、どこかに誤りがあり、英文サイトでもレジストリの位置の情報が無いとか、URL取得に、tab.urlではなく、browser.tabs.urlであるとか、いろんなところでハマり続けてしまい、最初はChrome向けに作り始めれば良かった感じがする。