こんにちは!
MYTHRIL Inc.(以下、弊社)で、クライアントエンジニアをやっている利光と申します。
弊社では現在、新規プロジェクトが複数動き出しており、今回、私も新規プロジェクトの初期から参加することになりました。
私がミスリルに転職をした理由として、前職では新規プロジェクトに携わることができず、新規プロジェクトに最初から携わりたい、という想いがあった為「よし来たか!」と嬉しい気持ちになりました。
今回は新規プロジェクトの立ち上げ時期において弊社ではどのような動きをするかという点を、エンジニア視点で話していきたいと思います。
開発環境を選定する
新規プロジェクトを始めるにあたって、エンジニアはどういう開発アプローチをとるべきか、プロジェクト要件を鑑みて検証・決定していく必要があります。
「どのゲームエンジン・ミドルウェアを使うか」「どういった技術を使うか」「求めるグラフィックレベルを満たせるのか」などです。
今回、自分が参加するプロジェクトではPCブラウザ向けに3D描画を必要とされており、開発のアプローチとしてはThree.jsやUnity、WebGLを直接記述するなどの手法が候補に挙がりました。
弊社では元々Unityを主に使ってモバイルネイティブアプリの開発を行っていた経験があり、できれば今回のプロジェクトでもUnityを使いたいという思惑があったのですが、UnityはWebGLでの描画が強くないという懸念があり、実際に調べたところ公式リファレンスにも
モバイルデバイスはUnityWebGLにサポートされていません
との悲しい記述がありました。
モバイルブラウザはサポートされていないですが、PCブラウザで使用できない訳ではないので、実際にUnityのサンプルにあるFPSゲームをWebGLに書き出しを行い動かして見たところ、問題なく動作することが確認できました。
PCブラウザでの動作確認が出来たので、ノウハウもありThree.jsを生で触るよりGUIで作業できるUnityを使用することになりました。
これがモバイルブラウザへの対応も行わないといけないのあれば別のアプローチを考えないといけませんでした。
開発言語の選定をする
Unityを使用するということでクライアントの開発言語はC#に決まりましたが、サーバーサイドの言語は何にするのが良いでしょうか?サーバーサイドの言語選定の軸として、パフォーマンスやフレームワークの充実度、情報量など様々な観点がありますが、今回は「サーバーとクライアントで言語を統一する」という観点から、サーバーサイドもC#で開発することに決まりました
このような言語をサーバーとクライアントで統一しての開発は弊社にとって初めての試みです。
今までサーバサイドでC#が採用され辛かった理由として、昔はWindowsサーバーでしか使えなかったということもあり、使用しているプロジェクトが少なく、サーバー利用としてのナレッジが少ないことが挙げられます。
そのため、何かしら問題に嵌ってしまうと、解決に時間がかかる可能性もあります。
ですが、サーバーとクライアントをC#で開発を行うということには良いところもあります。
・サーバーとクライアントで同一のコードが使えるためチート検出のためにクライアントでのユーザー入力をもとにサーバー側でシュミレートを行うことが容易にできる
・サーバーとクライアントが同じ言語なので学習すべき言語が1つで済む
このようなことなどが考えられます。
枯れた技術の方が、安全に開発を進めることができるという話もありますが、上記のメリットがあるのなら挑戦する価値はあるため、C#統一での開発をすることになりました。
今までの開発に囚われず、より良いものを見つけるために、新しいことへ挑戦することが出来る環境が、弊社にはあると感じる良い機会でした。
これから様々な壁にぶつかることになると思いますが、チーム一体となって乗り越えていくことを楽しみに励んで行きたいと思います。
「新しいことをやりたい!」「新規プロジェクトで最初からいろんなことにチャレンジしたい!」そんな思いがある方は我々と一緒に働きませんか?
ミスリルでは一緒に働く仲間を募集しています!
MYTHRIL Inc.(ミスリル株式会社)では一緒に働く仲間を募集しています