https://a.storyblok.com/f/270183/130444/e9b33bace7/e_unity_opentok_1200x600.jpg

UnityとOpenTok、テイク・ツー!

最終更新日 May 7, 2021

所要時間:1 分

1年前に初めて リアルタイム・クロスプラットフォーム・ゲーム・エンジンであるUnityでOpenTokを使うという話を1年前にして以来、時が経つのは早いものです。.早いもので、1ヶ月前、OpenTokのv2.16リリースの際に、Unity3dとの最初のイテレーションをベータ版で紹介しました。Unityは、コンソール、PC、モバイル、インスタント、AR、VRゲームなど、プラットフォームやデバイスを問わず、ゲームの3D、2D、VR、ARビジュアライゼーションを開発できるようにします。

この2回目の反復では、Unityのクロスプラットフォーム要素を活用し、OpenTokと同じプラットフォームで動作するサンプルを構築しました。前回は、UnityとOpenTok Windows SDKを使ってWindowsで動作するサンプルを作りました。新しいサンプルでは、Android、iOS、Windows、MacOSでアプリケーションやゲームを動作させることができます。

もし試してみたいなら、サンプルを GitHubリポジトリからサンプルを入手し、Unity Editorで開いて、お好みのプラットフォーム用にビルドを開始してください。

待って、これはマジック?どうやって使うの?

このシンプルなブロック図で、すべての配置を見てみましょう: 新しいサンプルでは、サポートされているすべてのOpenTokプラットフォームライブラリをバンドルし、開発者が任意のプラットフォーム向けにゲームをビルドするときに、Unityが正しいSDKを選択できるようにしました。

図では、サンプルの各部分を区別するために色を使い分けました。青色のボックスは、Unityランタイム上にある.NETコンポーネントです。考慮すべき3つの異なるコンポーネントがあります:青色は、ゲームやアプリケーションのコードです。

それに加えて、OpenTok SDKやUnityエンジンとやりとりするOpenTokクライアントのコードも青で表示されています。

緑色のボックスは OpenTok SDK API を表しています。ここにはよく知られている Session、Publisher、Subscriber クラスがあります。unityは.NET、より正確にはC#言語を使用しているので、Windows SDKと同じAPIを使用しました。

そして最後に、黄色のボックスがあります。これらは、最終的なゲームの実行可能バージョンをビルドしたら、選択したプラットフォームで実行されるネイティブコードを表しています。これで最終的なゴールが見え、すべてのプラットフォームで同じコードを実行できるようになりました。これはOpenTokUnity.dllのおかげです。OpenTokUnity.dllはSession、Publisher、Subscribeのインタラクションを各プラットフォームのネイティブコードに転送します。

ファイルアーティファクトに関しては、すべてが Assets/DLLフォルダ,

このキャプチャでわかるように、OpenTokUnity.dllファイルがあり、すべてのフォルダにネイティブ・ライブラリがあります。cocoapods、nuget、mavenなどの公式チャンネルで配布しているものと同じバイナリがあります。

プロジェクトでこの方法を使用したい場合は、Assets/DLLからすべてのコンテンツをプロジェクトにコピーしてください。(.metaファイルには各ファイルのプラットフォーム・ターゲットに関する情報が含まれているので、忘れずにコピーしてください)。

すべての根底にはC#コードがある

さて、方程式における各コンポーネントの役割について説明したので、Unity内部でどのように動作するかについてさらに詳しく説明します。unityのゲームやアプリケーション内でビデオコールを行うために必要なものは、すべてサンプルとその4つのファイルの中にあります。 サンプルとその4つのファイル.

シーンスクリプト

このスクリプトはGameObject Sceneにアタッチされます。サンプル開始時に実行され、主に OpenTokSessionオブジェクトを作成します。

このクラスは2つのGameObjectインスタンスを保持する。1つはパブリッシャー用、もう1つはサブスクライバー用。Videoは、GameObjectのコンテンツの中でシーンに表示されます。さらに、両方のGameObjectはOpenTokSessionコンストラクタで使われます。ビデオフレームがGameObjectの中でどのように終わるのか、もう少し詳しく見ていきましょう。

また Connect()メソッドも呼び出します。

のサブクラスであることに注意してください。 MonoBehaviourのサブクラスであることに注意してください。 UpdateメソッドがUnityエンジンから定期的に呼び出されることを意味します。このスクリプトは OpenTokSessionインスタンスに通知します。

オープントークセッション

OpenTokSession は、すべての OpenTok SDK インタラクションが行われるメイン・ファイルを指します。OpenTokUnity.dllを呼び出すファイルでもあります。

これはMonobehaviourのサブクラスではないので、Unityから自動的に呼び出されるメソッドはありません。

このクラスのほとんどのコードは OpenTok セッションへの接続に関するものです。これには、opentok イベントの実装、パブリッシュ、サブスクライブなどが含まれます。基本的なビデオチャットのサンプルアプリケーションを探すと、プラットフォームサンプルリポジトリにあるものとよく似ています。

ただし、PublisherとSubscriberの作成方法には重要な詳細があります。例えば、新しいPublisherがどのように作成されるかを見てみましょう:

publisher = new Publisher(Context.Instance, renderer: 
publisherRenderer, capturer:videoCapturer);

OpenTok SDKでは、rendererとcapturerパラメータはごく一般的なものです。iOSやAndroidのようないくつかのプラットフォームでは、OpenTok SDKにはデフォルトの実装があるので、それらを提供する必要はありません。

このサンプルはすべてのプラットフォームで動作します。レンダラとキャプチャーを複数のプラットフォームで動作させたい場合は、Unity SDKを使用してキャプチャーとレンダラをビルドする方法があります。

オープントークレンダラー

このクラスの主な役割は、その名前が示すように、GameObject Texture内のVideoフレームをレンダリングすることです。

この目的のために、このクラスはMonoBehaviourのサブクラスで、Opentok IVideoRendererインターフェイスを実装しています。

Monobehaviourのサブクラスなので、PublisherまたはSubscriber GameObjectにアタッチされます。ビデオフレームをレンダリングする Texture2D インスタンスにアクセスできます。

OpenTok IVideoRenderer インターフェースを実装しているため、新しいビデオフレームをレンダリングする準備ができたときに RenderFrame メソッドが呼び出されます。

サンプルがフレームをどのようにレンダリングしているか、もっと詳しく知りたい方は クラスコード.

OpenTokVideoCapture

このクラスの役割は非常にシンプルです。WebCamTexture統一クラスを使用してデバイスのカメラにアクセスし、IVideoCapturerインターフェースを実装してカメラからOpenTok SDKにビデオフレームを送信します。

結論

最初のサンプルでは、UnityでRTC通信がどのように動作するかを紹介します。新しいバージョンでは、OpenTokを使用して、現実世界のUnity GameやApplicationsでビデオとオーディオの通信を行うことができます。

ユーザーベースを拡大したいのであれば、さまざまなプラットフォームでゲームを展開できる能力を持つことが重要です。これが、私たちができるだけ多くのプラットフォームをサポートすることを目標とした理由です。

シェア:

https://a.storyblok.com/f/270183/400x400/0444469466/roberto-perez-cubero.png
Roberto Perez Cubero

Roberto is a Full Stack Engineer on the OpenTok Client SDK team. He loves learning new bits of Android, iOS, Linux, Windows, you name it! In his free time, he is very passionate about programming languages, computer graphics, and video game development for current and old platforms like ZX Spectrum and Commodore 64.