はじめに
ようこそソーシャルゲーム開発へ。 この文書は難しいコードとかが出てこない読み物なので、そこは安心してください。
この文書の対象読者としては「Unityでゲームを作る、というのは分かるけどサーバサイドが絡むソーシャルゲームは作ったことがない人」を想定しています。
そういった人が、ソーシャルゲームの開発にUnityのクライアントエンジニアとして初めて参加すると、「サーバネットワークなんもわからん。専門用語多すぎワロタ。死ぬ」と固まってしまうかもしれません。(実際に現場で固まってしまって大急ぎでこの文書を読んでる人、大丈夫です。そういう人は結構多いです。何人も見てきました)
概念さえ知っておけば固まるのではなく、ググり始めることも出来るので、まずはこの文書を読んで「ソーシャルゲームのクライアントエンジニアってこんな事を気にして作るんだなあ」とふんわり理解してもらえると、嬉しいです。
情報系の前提知識がある(例:基本情報を持っていたり、専門学校で学んだ、大学で情報系だった)場合は既知の概念も出てくるので、その場合は飛ばして読んでかまいません。それらの前提知識が無い人を主な対象読者とします。具体的には独学でUnityを学んできた人で、Unityが初めてのプログラミング経験の人も対象読者です。
また、入門以前と書いていますが、あなたがソーシャルゲームの現場にクライアントエンジニアとして入った瞬間、以下のすべての実装タスクが降ってくる事は早々無いので、とりあえず担当になった場所だけ読もう、という読み方をしても大丈夫な章構成を心がけています。
また、目次を確認して、おおよその用語に馴染みがある場合や、サーバの様子を見たい場合は以下のリンクをチェックしておくと良いです。
https://github.com/SnowCait/game-development-notes
ソーシャルゲームの定義
ソーシャルゲームの定義はとても難しい気もしますが、この文書では
- 基本無料で、会員登録無しで遊び始めることが出来る(ユーザ数を稼いでおく)
- iOS,Android(多くの場合は両対応)のスマートフォンプラットフォームで動く(ユーザに専用ハードウェアを買わせない)
- 有料の消費アイテムをプラットフォーム課金で購入し、ゲームを有利に進めることができる(売上をここで建てる)
- サーバサイドとのデータのやり取りを行う(ログ分析も行う)
- アプリリリースだけでなく、継続的なアップデートを行い、運用フェーズがある(ユーザのフィードバックを元に、アップデートをします)
くらいの緩い定義にしています。ガチャが必須、とかフレンドが必須、は結構ゲームによっては変わってくるものです。
この文書を読むことで身に付くこと
- ソーシャルゲーム特有の考慮すべきポイントについて、概要を理解できる
- ゲームエンジンから、オンラインシステムへ疎通するときに、スタンドアロンとの実装違いを考えられるようになる
- 自分が担当する実装箇所になったときに、検索エンジンに聞く単語がわかるようになる
- 他のクライアントエンジニアが実装の話をしている時、どこを作っているのかわかるようになる
を目指しています。
この文書を読んでも身に付かないこと
- ゲーム自体の面白さの担保
- ソースコードレベルの実装例
- サーバサイドのアーキテクチャや処理内容
- 厳密なチート対策 (こちらのサイトを読むことで、IL2CPPであっても十分に解析されることを理解できます。 https://engineering.linecorp.com/ja/blog/unity-from-a-security-engineer-point-of-view/ )
これらについては触れていません。この文書に対応するサーバサイドの物があれば、リンクを貼ろうと思います。
本当に悲しい事ですが、ソーシャルゲームのUnityクライアントとしてちゃんと動く、という事は、ゲームの売上や面白さに対してほとんど寄与しません。例えば、iPhoneXの切り欠きノッチ対応が適当なソーシャルゲームも、売上は良かったりします。
なので、この文書を読んでも面白いソーシャルゲームが作れるようにはなりません。
ゲームを面白くするには、この文書を読んでいるあなたの力が必要です。僕と一緒のチームで働くことになったら、あなたの力をお借りしたいです。よろしくお願いします!
この文書の全体の流れ
この文書は、「はじめに」を除くと大きく分けて3章に分かれています。
1章の「サーバサイドと仲良くなろう」はサーバサイドの中の、特にAPIサーバとの通信を扱います。
この時点でAPIサーバって何、と思っている人も大丈夫です。ソーシャルゲームでは基本的に主なデータをサーバ側で持っていて、サーバとの通信を通してレベルアップしたり、買い物をしたり、パーティ編成をしたり、アカウント登録をしたりします。
こういった通信をUnityで行う際に留意すべき点や、サーバサイドの人が使う用語を確認しておきましょう。
2章の「ソーシャルゲーム向けのUnityクライアント作成」は、ソーシャルゲームのUI画面を作ったり、ゲームを作ったりする時に、留意すべき点をまとめています。特にインゲーム以外のアウトゲームのUI周りは、Unityならではのprefab運用や使用するUIライブラリに応じた設計が必要になってくるため、この章でフォローしています。
(注意:いきなり「インゲーム」とか「アウトゲーム」って言う謎の言葉を使ってごめんなさい!インゲーム=戦闘やライブなど、中核的な面白さの部分。アウトゲーム=マイページ、ガチャ、お知らせ、編成、ショップなどの部分。という事を指します)
3章の「運用を見据えて作っておこう」は1,2章でカバー出来ない点で、ソーシャルゲームの特徴でもある「リリース後の運用」を円滑に進めるために開発時に考慮すべき点について書いています。この章を読んでおくことで、ゲームが運用に向いてない作りだった!とか考慮漏れしてた!というリスクを減らせると思います。
これらの章ごとに独立性が高いので、まずは興味があるところから読んでも大丈夫ですし、ここまでで分からない点がある場合は、Unity自体の入門書を見るのも良いかもしれません。
ここまで読んでくれた素敵なあなたへのお願い
いくつかのお願いがあります。これらを実行してもらえると、著者の励みになって更新意欲がわいてきます。
- https://github.com/neon-izm/before_join_socialgame このサイトの管理リポジトリの ☆を押してくれると、励みになります。
- 巻乃もなかさん https://twitter.com/monaka_0_0_7 のツイッターをフォローしてくれると、励みになります。(僕の推しです)
- ここは書けるかも。という部分があれば、お気軽にプルリクを送ってください。誤字脱字の訂正も歓迎します。
それでは前置きはこれくらいにして、1章をはじめます。