Mirrativ Tech Blog

株式会社ミラティブの開発者(バックエンド,iOS,Android,Unity,機械学習,インフラ, etc.)によるブログです

ミラティブのUnityエンジニアになったら学べること

みなさんこんにちは。ミラティブUnityエンジニアの菅谷です。 私がミラティブに来てからちょうど2年が経ちました。 以前はソーシャルゲームの会社でゲームの運営や新規開発を行っていました。リードエンジニアとして広くコミットすることで、特にクライアント側の一通りの技術を学ぶことができましたが、ミラティブに来てからも事業が成長していく中で様々なことに挑戦し学んできました。振り返ってみてミラティブのUnityエンジニアとして習得できる技術や、ミラティブで活かせるスキルが分かってきたので一例として紹介します。

ミラティブのUnityエンジニアとしてのスキルは大きく3Dアバター(エモモ)系とゲーム系とに別れます。 どちらの技術もMirrativアプリで直接使われ、メンバーが変わるわけではありませんが開発における性質は異なります。 以下それぞれの特徴について説明します。

エモモ系

3Dアバター(エモモ)に関わる開発のスキルです。 新規開発と運用の2つの面に分けて説明します。

エモモの新規開発

エモモは着せ替えをしたり、アイテムを持たせたりと自分だけのアバターとして着飾ることができます。そのためにUnityでは3Dモデルをコントロールし3Dアバターとしての機能を開発します。最近では新しいアイテムの種類を増やしたり、アイテムごとにギミックを持たせたりとエモモでできることを増やしています。ほとんどの機能が1つの画面に追加されていくため、ゲームにおけるインゲーム開発と同程度の開発難易度になります。思わぬところに改修結果が影響してしまうため、注意深さや複雑さを回避する設計のスキルも求められます。

tech.mirrativ.stream

また、ギフト演出の仕組みの開発も行われます。例えばTimeline×Cinemachineを用いてリッチな演出が作れるような仕組みを作成しました。機能をリリースしてから1年以上経ちましたが今でも毎月新しいギフト演出が作られ配信を盛り上げています。最近ではシェーダーのパラメータをTimelineから切り替え一時的に見た目を変える機能などを追加しました。

tech.mirrativ.stream

新たなデザインへの挑戦なども行われます。より魅力的な見た目にするためシェーダー開発を行ったり、デザインにより柔軟性を持たせるためURPに移行したりとすでに運用中のアプリケーションとは思えないほどの新しい開発を行っています。

以下はエモモの新規開発で取り扱う技術の主なワードです。

  • 3Dを扱う知識全般
  • Animation/Animator
  • Timeline/Cinemachine
  • シェーダー
  • DynamicBone
  • VRM
  • 静的解析、Sonar

エモモの運用

毎週エモモのイベントが行われるため、その運用をサポートします。 アセットバンドルの更新やアセットの不具合修正、お問い合わせの対応などが主な対象です。 アセットバンドル更新のフローや仕組みについては以前の記事で紹介しています。

tech.mirrativ.stream

効率的なイベント運用のためには、フローやツールの改善がかかせません。 デザイナーが使用するエモモのチェックツールへの要望を吸い上げ、より使いやすいツールにしたりテストの機能を増やしてミスを減らします。 例えば、チェック時によく使う機能をプリセット化したり、テクスチャの圧縮設定の自動化などを行いました。 その他にもアイテムのサムネイルを自動で撮影するツールを開発するなど、ときにはエディタ拡張も活用しながらツールの使いやすさ向上を目指しています。

他にはアセットバンドル運用フローの整備を行っています。 Go言語でビルドツールを作成し、JenkinsやCircleCIを活用してCI/CDを構築しています。アセットは頻繁に更新が行われるのでビルドの効率化が開発速度に直結します。Jenkinsの機能で自動でビルドを行えるようにし、アセットバンドルはキャッシュを活用しビルドの高速化を図っています。

アセットバンドルのビルドやフレームワークのビルドなど複数のジョブが走ります。 更にはゲームの開発中には専用のジョブが走るなど常にJenkinsは動いているため、UnityエンジニアはCIエンジニアの役割も担っています。

また、エモモに関するお問い合わせの対応もUnityエンジニアの仕事の一つです。エモモが動かない、アイテムに不具合があるといったお問い合わせは原因を調査し、デザイナーと協力して修正します。 お問い合わせいただいたユーザーにとってはエモモが不具合によって期待したように見えずがっかりしているため、スピード感を持って優先して対応するようにしています。

以下はエモモの運用で取り扱う技術の主なワードです。

  • アセットバンドル
  • デザイナー向けツール開発
  • エディタ拡張
  • 自動化
  • テスト
  • Go言語
  • CI/CD、Jenkins/CircleCI、AWS
  • VeryAnimation

ゲーム系

Mirrativ内で遊べるゲームの開発や技術サポートを行います。 Mirrativで遊べるゲームはMirrativアプリに直接組み込まれたゲームと、WebGL×WebViewを利用したゲームがあります。 これまではMirrativアプリ組み込み型のゲームがメインでしたが、最近ではWebGL製ゲームの作成にも取り組み始めました。

Mirrativ組み込み型ゲーム

Unity as a Libraryの仕組みを活かし、エモモを動かしているUnityプロジェクトと同じプロジェクトで開発しています。すなわちMirrativアプリ内にゲームのコードを含める形で開発します。 それにより既存のエモモの仕組みや衣装をそのままゲーム内にも登場させることができ、エモモを使ったゲームが遊べるようになっています。 例えばランゲームやマルチ対戦ができるゲームをリリースしており、今後も新たなゲームをリリース予定です。

一番最初のミラティブ内ゲームのエモモRUN。Unityでのゲーム開発×ネイティブでの配信体験とUnity as a Libraryだからできたオリジナルゲームでした。

ゲーム開発ではインゲーム開発の比重が大きく、日々ライブゲーミングの面白さを追求しています。エンジニアであっても企画や仕様を一緒に考え、取捨選択をしながら開発する必要があります。ゲーム開発基盤も1から構築しており、少人数でソーシャルゲームを開発するフローに近いです。昨今のソーシャルゲームと比べると規模は小さく開発期間も短いため、新しい挑戦も積極的に行いやすいです。

例えばマルチ対戦にはDiarkisを利用し、大規模のユーザーがいる中でも安定した運用ができるようになっています。

diarkis.io

また、今後リリースされるゲームの開発初期においては、デザイナー兼プランナーとUnityエンジニアとの2名でゲームの体験に集中して開発を進めました。そこではBolt(VisualScripting)を使用してUnityエンジニアでなくても一部のロジックを組めるようにしています。Boltの利用事例とテクニックについては後日紹介する予定です。 他にも負荷対策、ログ取得、デバッグツール開発などゲーム開発でも使われる技術や経験を活かしています。

Diarkisを利用したエモモバトルドロップ。配信しながら気軽にマルチプレイゲームが遊べます。

Boltを利用した敵のロジック例。ノードベースのVisualScriptingにもメリット・デメリットがあるため、ゲームの基盤部分はC#でコードを書き、敵の攻撃パターンなどバリエーションが増える部分にはBoltを使うようにしています。

以下はミラティブ組み込み型ゲームで取り扱う技術の主なワードです。ゲームによって開発の仕方や使用する技術は異なるため、広い知識が必要です。

  • uGUI、UI/UX
  • エフェクト開発
  • VisualScripting、Bolt
  • マルチプレイ、Diarkis
  • サーバー通信
  • 負荷改善
  • デバッグ機能、SRDebugger

WebGL型ゲーム

最近、ミラティブアプリ内でWebGLで動くゲームが遊べるようになりました。WebGL製のゲームはUnityで開発しており、ミラティブアプリとは独立して開発することができるため、オリジナリティあふれるゲームが開発できます。 Unityで作ったゲームをWebGLでビルドし、ミラティブのWebView上で動くようになっています。 また、ミラティブの配信機能とも連携することができ、ミラティブのコメントをゲーム内の要素として利用したり、視聴者と一緒に同じゲームを遊ぶことができます。 モバイルでのWebGL利用はUnityもアップデートに注力しているトピックでもあり、Unity2021でも大幅な改善が行われています。 WebGLの利用は今後拡大していく予定で知見を積極的に集めています。

WebGL製ゲームのけずってゼリー。WebViewの上でWebGLを動かしています。WebGLならではの不具合や負荷に対する厳しさが開発の難しいポイントです。

ミラティブのゲーム開発ではUnity as a Libraryの活用だけでなくWebGLにも挑戦し、幅広い選択肢を持って開発できる組織を目指しています。

エモモ系とゲーム系の共通技術

エモモもゲームもミラティブのアプリ上で動いているため、iOS/Androidといったネイティブアプリの開発知識が活かせます。 Unityエンジニアが直接ネイティブのコードを書くことは少ないですが、エモモやゲームで不具合が起きたらネイティブのコードも調査して原因を特定します。また、新規機能の開発時にはネイティブで何ができるかを把握し、Unityとネイティブのどちらで処理を行うかを決めることあもります。例えば最近のゲーム開発では、ミラティブのサーバーとUnityとを直接通信する仕組みを整え、ネイティブを介さずにゲームの更新ができるようになりました。これまではネイティブが必ず通信を中継していましたが、新しいゲームでは中継に無駄が多かったため、Unityがサーバーと通信する仕組みに改修しました。

Unity as a Libraryの技術を利用しているため、通常のUnityだけの開発では得られない事象や不具合に見舞われることも多くあり、非常にチャレンジングです。特にミラティブではUnityのViewとネイティブのViewとを独立させずに同一の画面に出すことが多いため、常にネイティブのことも考慮しつつ開発するテクニックが求められます。 また、WebGLの開発においてもまだまだ発展中の技術のため開発難易度は低くありません。直近では最新版のiOSでWebGL製ゲームが正常に動かない不具合があり、Unity社とともに原因を突き止めていました。

ミラティブではUnityエンジニアであっても、ネイティブのスキルを習得することができます。 Unityチームではネイティブ開発が最初からできる人は少ないため、ネイティブ開発のチュートリアルから学ぶ勉強会を定期的に行い、技術力の向上を目指しています。

採用について

将来の同僚は自分で見つけることが大切と考えているため、カジュアル面談や面接はもちろんのこと、リファラルやSNSでの直接のお声がけをしています。 テックブログもその一環で、この記事を通じて少しでも興味を持っていただけると嬉しいです。 今後も私からいきなりDMすることがあるかもしれません。その際は上記の技術についてもっと濃い話ができると思いますので一緒に語りわかりあいたいですね。 もちろん、私へのいきなりのDMも大歓迎です。(Twitter

We are hiring!

ミラティブでは様々なことに挑戦していますが、Unityチームのメンバーは決して多くはないため、個々人にパフォーマンスの高さが求められます。 また、イベント運用をしながら新規ゲームの開発もしているため開発・運用ともに幅広い知識が要求されます。ただし、最初はわからないのは当然なので、関わっていく中で少しずつ理解していき、全員がつよつよエンジニアに成長していけるチームを目指しています。 ミラティブにはどこもやっていない新しい挑戦がこれからも待っています。一緒に開発を通じてわかりあい、ともに成長していけるメンバーを募集しています! www.mirrativ.co.jp