どうも、コニーです
先日サイバーエージェントさんのゲーム開発インターンについての記事を書きました
この記事ではそのインターンで学んだサーバー通信に関する知識をまとめていきます
皆さんの中にも「Unityでゲームは作ったけどサーバーは触ったことがない」という方が多いのではないでしょうか?
私もそうでした
そんな私はインターンの事前課題である通信チュートリアルでわからな過ぎてパニック状態になりました(笑)
これからインターンに参加するあなたがそうならないために、
この記事では
・サーバーとの繋ぎこみでどんな処理をするのか
・GET、POSTメソッド
について解説していきます!
サーバーとの繋ぎこみって何するの?
まずは「サーバーとの繋ぎこみって何をするの?」について解説します
前のインターン感想記事を読んでくれた方は内容被っているので、次の章まで読み飛ばしてOKです
結論から言うと
『ユーザー情報や得点をサーバーに保存したり、呼び出したりする』という処理をやります
学生が作ったようなゲームでは「メインのゲームを遊んでハイ、終了!」というものが普通だと思います
しかし世の中のソシャゲでは手に入れたアイテムやスコアなど、ユーザーごとにデータを管理しているんですね!
そしてそのデータをもとにランキングが作られ、ユーザー同士が競え合えるようになっています
前回遊んだデータが残っていたり、ランキングがあると「またこのゲームで遊ぼう!」という気持ちになりますよね?
これらのことがサーバーからデータを送受信することで可能になるんです
・ユーザー登録機能
・ログイン機能
・ランキング機能
・セーブデータの保持
サーバーとの繋ぎこみで行う処理
次にサーバーとの繋ぎこみで行う処理についてザックリ解説していきます
- 中心となる2つの動作
- HTTPプロトコル
- 通信を簡単にするサポートアイテム
の順で説明していきます
①中心となる2つの処理
サーバーとの通信で行う処理は基本的に2つで成り立っています
それがリクエストとレスポンスです
リクエストは
サーバーに「こんな情報が欲しい!(こんなことをしてほしい)」と伝えること
レスポンスは
サーバーが「じゃあこれあげるわ」といって返したものを受け取ることです
あとで説明するメソッドも基本的にこの2つの処理で成り立っています
②HTTPプロトコル
次にHTTPプロトコルです
…はい、逃げない!!!!!!!
サーバーに無知な私たちからすればじんましんがでそうな単語ですが、一言でいえば
通信相手をURLで指定してやり取りする仕組み
です
もっとちゃんとした説明があるかもしれませんが、イメージとしてはこんなかんじです
③通信を簡単にするサポートアイテム
そして3つ目は通信を簡単にするサポートアイテムです
Unityとサーバーが連携するときに、やっぱりいろいろと手間がかかるんですよね
例えば情報のフォーマットです
サーバー側とUnity側では扱う言語も違えば表示だって違います
それをいちいち変換するのは面倒くさいです
そういった様々な面倒くさいものを取っ払ってくれるサポートアイテムを2つ紹介します
JSON
C#とGOなど異なる言語のプログラムでデータをやり取りする際に便利なのが
JSONという規格です
JSONというフォーマットを間に挟むことで異なる言語間の情報を扱えるようになります
例えるなら日本語と中国語をやり取りするとします
そこで2人の人が日本語か中国語どちらかしか知らないとしても、英語という共通言語があれば
日本語→英語→中国語
中国語→英語→日本語
と変換して理解できるますよね?
この英語に当たるのがJSONです
またUnityがJSONからC#に変換するための機能を用意しているので、情報通信の際に便利です
UnityWebRequest
そしてUnityにはHTTPで行う処理を手助けしてくれるものがあります
それがUnityWebRequestです
HTTPで使う変数などを用意してくれているので、実装がしやすくなります
(参考)
Unityドキュメント『UnityWebRequest』
サーバー通信で使ったメソッド
次に今回のインターンで使った2つのメソッドについて紹介します
GETメソッド
GETメソッドは
サーバーから情報をもらうためのメソッドです
ランキング機能を実装するときなどに使われます
このメソッドでも先ほど説明したリクエストとレスポンスが行われています
ランキングを例にすると
リクエスト:「ランキング情報くれや!」
レスポンス:「おっしゃ、ランキング情報な!各順位のユーザー名とスコアを渡すわ」
というかんじで処理が行われています
POSTメソッド
次にPOSTメソッドです
これは情報を登録するためのメソッドです
ユーザー登録やユーザー情報の更新を行うときなどに使います
この場合のリクエストとレスポンスは次のような感じです
ユーザー登録の場合
リクエスト:「ユーザー名、ユーザーID、パスワードです。登録してください!」
レスポンス:「おっけ!じゃあ登録した証として身分証明書(アクセストークン)渡すわ」
このアクセストークンについては次の章で話します
アクセストークンについて
先ほど出てきたアクセストークンについて説明します
アクセストークンとは
ユーザーが何らかのシステムに対してリクエストを送信する際に、ユーザー情報や権限を識別するための認証情報のことです
アクセストークンを使うことでプレイヤーAが本来アクセスできないプレイヤーBの情報にアクセスするのを防ぎます
具体的にどういう使われ方をしているかというと、
一例としては
UserIDとパスワードを使ってログインした際、ワンタイムパスワードとしてトークンが発行されたりします
ログイン後の通信においてUserIDやパスワードの代わりにトークンを使うことで、盗聴されたときのリスクが減らすことができます
通信を実装するのに必要な処理一覧
いろいろ書きましたが今回のインターンのようにログイン機能などを実装するのに必要な処理は以下の通りです
- C#→JSONの変換処理
- JSON→C#の変換処理
- POSTメソッドのC#実装
- GETメソッドのC#実装
- サーバーアドレスの指定処理
- HTTPプロトコルの送受信処理
- リクエスト先のURL指定
- リクエストの情報を示したC#クラスの作成
- レスポンスの情報を示したC#クラスの作成
…多いっすよね!!
今回のインターンでは①~⑥をすでに用意してもらっていました
しかしもし自分で実装するとなれば勉強すべき知識が多そうですね
まとめ
まとめとしてはこんなかんじです
・サーバーを使うとデータの保存と受け取りができる
・基本はリクエストとレスポンス
・トークンなどセキュリティ処理も行う
まとめていても感じましたが、これはパッと言われてすぐ実践できる単純なものではないですね
しかし大規模なゲームを作るには必須な知識なので、逃げずに今後も勉強していきましょう!