サマーインターン課題から見えてきたf4samuraiのゲームづくりへの思想

:::note info
* はじめに
* 課題内容
    * 作成するゲーム
    * 課題実施にあたり考慮すべきこと
    * 実装における条件
* 課題の意図
    * ゲーム制作能力を図れる課題であること
    * データから動的に画面を作る能力を確認できること
    * 使用者の事を考え、運用方法を考えられる能力を確認できること
* f4samuraiのエンジニアの思想とは
::: 

## はじめに
2022年夏、f4samuraiではサマーインターンシップを実施致しました！
![20220908194134 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3190574/225f2dd5-9eaa-fd2e-842b-87e25fe05358.png)
サマーインターンシップ内の１シーン

内容は

* ゲームを作る上での考え方、必要な知識を教える講義パート
* 6人のチームで、指定された内容のゲームを４日で作る制作パート
* 所属社員と自由に会話をしたり、フィードバックを受けれる交流パート

というボリュームたっぷりのものです。

 

今回、エンジニア、プランナーが組んで自由にゲームを作るパートがあったため、ゲームをしっかり開発できる人に参加いただくことが重要でした。

そこで、エンジニアについては簡単なゲームを作る選抜課題を行っていただく事にしました。

 

今回は、この選抜課題を作ることで、見えてきたf4samuraiのエンジニアの思想をお伝えしたいと思います。

課題は以下の内容となっております。

 

## 課題内容
以下のPDFを確認し、環境構築、実装、動作確認を実施してください。

[Unity公式玉転がしチュートリアル](https://unity-beginners-blog.unity3d.jp/wp-content/uploads/2021/01/749c6898c4e914951a781c220870c56d.pdf)

 

## 作成するゲーム
作成するゲームは玉転がしゲームです。

キーボードを使って白いボールを転がし、触れるとゲームオーバーになる赤いブロックを避けながら、黄色いアイテムを取得するというものです。
![20220908102859 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3190574/3792b076-c759-5276-35cc-599a721eae05.png)
課題となる玉転がしゲーム



 

## 課題実施にあたり考慮すべきこと
今回作成するゲームは、エンジニア、プランナー、デザイナーのチームでステージを量産するという想定で実装してください。

その際、何人のチームで、各々のメンバーがどのようなスキルを持っているか、想定したチーム構成を記載してください。

 

## 実装における条件
実装を行う上で、チームで分業しやすくするためと、運用時のデータ量を考慮して、

ステージの配置情報をデータからロードし、動的にステージを生成するようにしてください。

（データ形式はJSON、csv、バイナリ、ScriptableObjectなど自由です。

但し、PrefabやSceneを作成し、それをロードすることは禁止します)

 

## 課題の意図
課題の内容については複数人のエンジニアで話し合い作成したのですが、重視したのは以下の要素です。

* ゲーム制作能力を図れる課題であること
* データから動的に画面を作る能力を確認できること
* 使用者の事を考え、運用方法を考えられる能力を確認できること

## ゲーム制作能力を図れる課題であること

まず考えたのは、技術力のみを図る課題ではなく、ゲーム制作能力を図る課題とすることです。

ゲーム制作は正解がない事が多く、加えて面白さを理解し実装していく必要があります。

 

実装していく上で感じる

「こういう機能を作ったらプレイする人は更に楽しめそう！」

「この機能をまとめると、次のプロジェクトでも使えるようになるのではないか？」

といった考えが浮かんだ時に追加実装が行いやすい課題と致しました。

 

実際に提出頂いた作品の中には、プレイヤーを強制移動させる床、画面内を移動するオブジェクトなど、ギミックを作り込んでエンジニア的なものづくりを楽しんでいると感じられるものがありました。

![20220908143100 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3190574/e3176069-4eb3-1306-1d7c-5cbcbd431e1e.png)
ギミックを作り込んできた作品

また、操作操作難易度が高いステージを作り、制限時間をつけることで、ゲームバランスを考慮した作りとなっているものなど、製作者側になった時のゲームに対する向き合い方が感じられるものもありました。


![20220908143114 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3190574/80d58eee-fc8a-6db3-6748-41454af62826.png)
ゲームバランスにこだわりを感じた作品
 

## データから動的に画面を作る能力を確認できること
次は、スマートフォンで運用型のゲームを作る上で重要となる、運用を考慮し、マスターやテキストファイルなど、データから画面を作る要素を入れました。

 

運用を行うゲームを作る場合、定期的にイベントを開催し、また機能を追加していく必要があります。

このためデータの設計、実装をしっかりしておかないと、イベントを行う度に実装が必要になり工数を圧迫したり、新機能を行う場合に大改修が必要になり、工数の圧迫に加えて不具合が発生する可能性も格段に上がります。

 

このため、データから画面を作るという条件を入れ、上記のデータ設計、実装のセンスを見る事にしました。

加えて、ただ作るだけでなく、課題を行ったことで、実際に仕事でも役に立つノウハウや知識を得てほしいという思いもあり少し難しいですが必須の条件といたしました。

 

提出していただいた作品では、スプレッドシートやエクセルからCSVを作り

そのCSVを読み込みステージを作るという方法が多かったです。

以下のように、関数化などをしっかり行い、コメントも適切で読みやすいコードも書いている方もおられました。

 
```
    /// <summary>
    /// ステージを生成するメソッド
    /// </summary>
    /// <param name="stageData">ステージデータ(ScriptalObject)</param>
    public void GenerateStage(StageData stageData)
    {
        //初期化
        InitializePlayerPosition(stageData);
        InitializeMainCameraPosition();
        //csvファイルを二次元配列に変換する
        int[][] objectPosisionDates = CsvReader(stageData.csvFile);
        for (int y = 0; y<objectPosisionDates.Length; y++)
        {
            for(int x = 0; x<objectPosisionDates[y].Length; x++)
            {   
                // オブジェクトを設置する                      
                DeployObject(objectPosisionDates[y][x], x, y); 
            }
        }
    }
 ```

## 使用者の事を考え、運用方法を考えられる能力を確認できること
そして、エンジニアとして時に忘れてしまいがちな、使用者の事を考え、運用方法を考えるという要素を課題に追加しました。

 

ゲーム開発は、ユーザー様が遊ぶゲーム内のバトルや育成要素を作成するのに加えて、

ゲームを開発するためのマスターやスクリプト等のデータ構造や、マスター編集ツール、スクリプトエディタ、マップエディタなど、開発ツールを作る事があります。

この時重要になるのが、運用する時にミスが少なく、誰でもすぐに理解できるデータ構造や、ツールを作ることです。

 

実際のインターン生の作成例では以下のように、マップデータの作成例や

使い方についても丁寧なドキュメントが作られていたものもありました。

 


![20220909162051 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3190574/851f41f4-d795-5cd9-1b61-b962dfa16f22.png)
スプレッドシートによるステージデータの作成例

![20220909162205 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3190574/591f3ff1-8aa0-0869-cd21-19b7e3280280.png)
ステージデータの作成マニュアル
 

エンジニアは時に技術の追求にのみに走ってしまいがちです。

しかし、重要なのはユーザー様や、一緒に開発する仲間がどう感じるかです。

f4samuraiのエンジニアは、使ってくれる人の視点を考えて作るようにしています。

## f4samuraiのエンジニアの思想とは
今回の課題を作成する作業を経て、f4samuraiのエンジニアには以下のような思想があると感じました。

 

* 発想、思考力を活かし、言われたことをこなすだけでなく、面白いゲームを作る
* ただ作るのではなく、面白さや、運用コストを含めて考えて作る
* 技術を活かして、誰に何を届けるかを考えて作る
 

一言でまとめるなら、「考えてものを作る、作るだけでなく、使う人の事を考えて作る」といったところでしょうか。

 

 

f4samuraiが気になった方は、エンジニア採用特設サイトを作成しましたので、ご覧いただければと思います。


[エンジニア採用特設サイトはこちら](https://www.notion.so/f4samurai-Engineer-Recruiting-33fd41dc956242f6a172ad52038fc653)