Genvid SDK&サンプル実行トラブルシューティング(随時更新)


Genvid SDKについて

Genvidは、動画ストリーミングとブラウザを介したインタラクティブな体験を組み合わせた「大規模インタラクティブ・ライブ・イベント」(Massive Interactive Live Events)を実現するSDKです。
https://www.genvidtech.com/ja/mile%E3%81%A8%E3%81%AF%EF%BC%9F/

ゲーム技術をベースに、リアルタイムで進行する動画番組に対して、動画視聴者が能動的に参加できるシステムを提供します。
コンテンツ内のキャラクターが次に何をするかを投票で決めたり、ミニゲームをプレイしてポイントをため、特定のキャラクターを応援するなどの活動を経て、物語が変化していきます。
MILEは、Unityを使いFacebook上で配信されている「Rival Peak」と、Unreal Engine 4を使った「Project Raven」があります。

『RIVAL PEAK』が示す次世代の視聴者参加型デジタルエンタテインメント
https://news.yahoo.co.jp/byline/onokenji/20210326-00229353

Genvid SDKの導入については、Genvidディベロッパーサイトの日本語マニュアルからご確認ください。
https://www.genvidtech.com/for-developers/

さて、GenvidのシステムはWindowsクラウドサーバーで様々なミドルウェアを動作させるというシステム上、ゲーム開発者には不慣れなツールの利用などもあります。
本投稿は普段ゲーム開発(フロントエンド開発、個人開発)をしている方向けに、Genvidを試そう・導入しようと思っているときの引っ掛かりポイントを書いていきます。

インストール時のポイント

Genvid SDKにはさまざまなツールやライブラリが同梱されています。

  • Python 3.5.4
  • C++ Build Tools
  • Node.js
  • AWS Command Line Interface
  • TightVNC

そのため、すでにPCにインストールされているソフトウェア・ライブラリとかち合うことがあります。

Microsoft Visual C++ Build Toolsセットアップに失敗(エラー)

その中には「Microsoft Visual C++ Build Tools」も含まれています。
しかし、¥PCに既に別のバージョンのMicrosoft Visual C++ Build ToolsやVisual Studio 2017, 2019などがインストールされている場合は、そのインストールプロセスに失敗したり、
再インストールのダイアログでエラーになる場合があります。
先に「Microsoft Visual C++ Build Tools」が入っている場合は、ダイアログで再インストールを聞かれたら「いいえ」を選択します。

詳しい情報はGenvid公式サイトのガイドがあります。
https://answers.genvidtech.com/articles/151/unable-to-install-microsoft-c-build-tools-with-sdk.html

genvid-toolboxのインストール時にcryptographyライブラリがインストールできずに中断される

genvid-toolboxのwheelsで指定されているCryptographyのバージョンが古く、pipの処理がうまく進まないことがありました。

pipの再インストールで治ります。

py -3.8 -m pip install -U pip

関連
https://github.com/pyca/cryptography/issues/5101

genvid-toolboxインストール後にgenvid-bastionなどのコマンドが動かずNo Module named 'chardet'などのエラー

動作に必要なpythonモジュールが何らかの理由でインストールされていません。
(ふつうはtoolboxインストール時に依存関係を見て自動的に入れてくれます)

pip install [モジュール名]

でインストールできます。

サンプルビルド時のポイント

Genvid SDKのサンプル(Cube Sampleとよばれる四角が転がるもの)やGenvid Tanks Sampleのビルドと実行には、UnityやUE4をメインで使っている方には少々不慣れなコマンドでの操作が必要になります。
踏みがちなトラブルを見ていきましょう。

Unity EditorでMultiple versions of Newtonsoft.jsonエラー

(またはMultiple precompiled assemblies with the same name Newtonsoft.Json.dllエラー)

Genvid Unity SDKが同梱しているNewtonsoft.jsonライブラリがUnity Editor内に既にあり、競合しています。

ややこしいことにUnity 2020.3のどこかから、Unity Editorをインストールすると自動でUnity Package Managerが「Version Control package」をインストールする挙動になったのですが、これにNewtonsoft.Json.dllが含まれているためエラーの原因になっています。

Version Control(Plastic SCM)を使っていない場合はこのパッケージをアンインストールしましょう。
Genvid SDK側のNewtonsoft.Json.dllの削除でも構いません。

py unity.py buildに失敗する( Aborting batchmode due to failue)

Unityのプロジェクトに何らかのコンパイルエラーがあるとコマンドでのビルドも失敗します。
上記で紹介したNewtonsoft.jsonライブラリの重複でも同様のエラーになります。
いちどUnity Editorを起動して、コンパイルエラーの原因を取り除いてください。

Project has invalid dependenciesエラー

Genvid Tanksサンプル1.25をUnity Asset Storeからインストールしたときに、Unity Package Managerの依存設定が変(com.unity.package-manager-ui: Package [[email protected]] cannot be foundエラー)となってインストールが正常に完了しないことがありました。
こちらは、サンプルのバージョンを上げれば問題ありません。
特定の理由で1.25を使う場合は、以下のダイアログが出た時に「Skip」とすれば進めます。

python.exe: can't open file 'Unity.py'(または 'Web.py')エラー

「そんなPythonスクリプトは無い」というメッセージです。現在のディレクトリまたは指定したパスに使用したいpyファイルがないということです。

Genvidのマニュアルでは、ディレクトリ移動のコマンドは(細かすぎるので)省いていることがあります。
よくあるのが、pyファイルがあるディレクトリが実は一段下だった(web.pyがフォルダwebの下にある)などによるディレクトリ指定忘れです。
ディレクトリに直接移動したり、適切なパスを指定します。

verification failed while extracting genvid-math@file:modules\genvid-math.tgz エラー

Webのビルド時にこれが表示された場合は、そのWebサイトの動作に必要なライブラリのバージョンや依存関係がおかしくなっている可能性があります。
web用のデータ一式が入ってィるフォルダ内のnode_modulesフォルダとpackage-lock.jsonを消してから、再度Webのビルドコマンドを実行してみましょう。

npm WARN tar ENOENT no such file or directoryエラー

こちらもpackage-lock.jsonが悪さをしている可能性が高いです。package-lock.jsonを削除して再実行しましょう。
また、npmのキャッシュが壊れている可能性もあるため、次のコマンドでキャッシュをクリアします。

npm cache verify

それでも変な場合はcache clean

npm cache clean --force

[Errno 2] Cannot find executable in the path: 'Unity.exe'

Genvidのビルドプロセス(unity.pyに含まれるスクリプトを利用)は、PCにインストールされているUnity Editorを自動的に探してきてビルドを行うスクリプトが含まれています。
(run.py の class UnityTool(SDK):がパス探しをしています)

が、何らかの理由でUnity Hubのjsonにアクセスできなかったり、そのフォールバックであるレジストリキーでのUnity.exeの位置情報が消えていたりすると、exeが見つからずこちらのエラーになります。
理由としてよくあるのが、エディタで別プロジェクトを起動状態のまま、というのがあります。閉じるとコマンドが通るようになります。

動かないときは、レジストリエディターを確認します。適切なデータを与えることでビルドが通るようになります。
具体的にはHKEY_CURRENT_USER\SOFTWARE\Unity Technologies\Installer\Unityの中に「Location x64」と「Version」の文字列値を作ります。


「Location x64」にはUntiy.exeまでのフルパス、「Version」にはUnityバージョンを記入しておきます。

それでもうまくいかない場合は、run.pyのfind_unity関数内にエディタバージョンも含めてパスを直打ちします(最終手段)。

        for pfpath in pfpaths:
            candidate = os.path.join(pfpath, "Unity","2020.3.27f1","Editor", "Unity.exe")
            if os.path.isfile(candidate):
                return candidate

(pfpath)にはC:/ProgramFiles等が入ります

サンプル実行時のポイント

Genvidのセットアップが一通り終わり、管理画面であるCluster UIでタスク「Services」「Unity」「web」が3つとも起動すればOKなのですが、設定や環境によって初回でうまくいかないことがあります。
よくある見落としポイントをおさらいしましょう。

タスクServicesが起動しない、存在しない

Genvid Clusterの初期設定がロードされていない可能性があります。
初期設定をロードするコマンドを実行します。

genvid-sdk load-config-sdk

タスクUnityが存在しない

Unityのゲームインスタンス(Unityでビルドしたexe)を実行するための設定情報がロードされていません。
パスまたは設定情報が書かれたunity.nomad.tmplまたはgame.hclなどのファイルを個別にロードするか、サンプルの場合は以下のコマンドでロードされます。

py unity.py load

タスクUnityが起動しない

Genvid Clusterに読み込まれたゲームのexeファイルのパス情報がおかしい可能性があります。
サンプルの場合は、unity.nomad.tmplファイル内でexeまでのパスを書いてあります。
このファイルに正しいパスを記入してロードするか、Genvid Cluster UI内で直接書き換えます。

Settingsタブ内Jobsタブで、「unity」タスク設定のEditボタン(メモ帳みたいなアイコン)をクリックして設定編集ウィンドウを開きます。

ちょっと見づらいですが、Task ”Unity”内のConfig -> commandにexeの位置を指定する箇所があります。

タスクWebが起動しない

Webサイトの実行に必要なビルドがされていない可能性があります。
py web.py buildコマンドを実行して、実効に必要なライブラリ群をダウンロードします。

py web.py build

今後のSDKバージョンアップに向けて

Genvid SDKのバージョンアップは日々行われており、Unity / UE4も同様です。どうしても開発環境や併用しているアセット等の組み合わせがうまくいかないケースもありますので、
随時情報収集して更新していきます。