Slide 1

Slide 1 text

Android上でUnityを 動かすためのノウハウ LIVE STREAMING HACK #1 2018.08.22 YUTA MORIOKA Mirrativ, Inc. © 2018 Mirrativ, Inc.

Slide 2

Slide 2 text

●Profile ●morizooo ●2018年2月入社 ●ミラティブのAndroid作ってます ●UnityはAndroidビルド部分しか触ってません

Slide 3

Slide 3 text

●Android上でUnityを動かす

Slide 4

Slide 4 text

●Unityからのエクスポート ● ARM64はUnity 2018.2から使用可能 ● apply pluginをlibraryに変更 ● Manifestの不要な部分を削除 → AARを作成

Slide 5

Slide 5 text

●UnityPlayerの使い方 ● UnityPlayerにcontextを渡してFrameLayoutにAddすればOK ● SurfaceViewにアバターが映るのでリフレクション使って透過させる

Slide 6

Slide 6 text

●UnitySendMessageについて UnitySendMessage("GameObjectName1", "MethodName1", "Message to send"); ●NativeからUnityのコールバックを実行するための関数 ●主な用途はUnity用のプラグインをNativeで書くときに使われている → MirrativではAndroid/iOSからUnityを操作するために利用

Slide 7

Slide 7 text

●困ったこと ●UnityPlayerを破棄するとアプリが落ちる →android:processを設定することで対処

Slide 8

Slide 8 text

●困ったこと ●UnityPlayerを一度破棄すると、再生成できない - 配信視聴時にインスタンス作成、終了時に破棄したかった - 原因わからず。そもそも複数回作られるような想定がされてなさそう  → Applicationクラスにグローバルインスタンスとして作成して対処  → UnityPlayerを破棄することはできないので、 Activity破棄時にUnityPlayer.pause()を実行

Slide 9

Slide 9 text

●困ったこと ●UnityPlayerの上にViewを重ねる - Viewを配置するだけだとUnityPlayerが最前面になる - WindowManagerでアプリに重ねて表示する →配信時にパーミションは取っているが視聴時は取ってない ... - 透過したDialogFragmentを使うことで実現

Slide 10

Slide 10 text

●今後の展望 ●Android5,6系のパフォーマンス改善 - 電池使用量が多いので現状対象外(充電中でも30分で10%減る) - 原因調査中。内部で動いているのがSurfaceViewなのが原因か? ●リップシンクの精度向上 - 配信時はマイク音声、視聴時はRTMP音声を基にリップシンクしてます ●他にもやりたいことが沢山あります!!

Slide 11

Slide 11 text

現在ゲーム好きなAndroidエンジニアを積極採用中! © 2018 Mirrativ, Inc. 詳細はこちら! https://www.wantedly.com/projects/226247 ◆具体的な業務内容 ・MirrativのAndroidアプリ開発 ◆必須の経験/能 ・Java or Kotlinでの Androidアプリ開発経験 ・Mirrativのサービス内容や コンセプト、未来像に共感できる