Upgrade to Pro — share decks privately, control downloads, hide ads and more …

僕が考えた最強のゲーム制作フロー

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for guu guu
November 22, 2024
400

 僕が考えた最強のゲーム制作フロー

Avatar for guu

guu

November 22, 2024
Tweet

Transcript

  1. 目次 第1部 全体の流れをざっくり解説  企画  ゲーム企画の考え方  企画を詰める・文書化 

    設計  画面設計やり方  役割分担やり方  実装  見直し 第2部 ゲームシステムの考え方 じっくり解説  必要な機能を考える  機能を具体的に  機能をさらに分割  機能をグループ分け  機能を関数に  変数、関数をクラスに  公開する範囲を考える  クラスのグループ分け  クラス同士をつなげる  同じものは共通化する
  2. ゲーム企画の考え方 何のためにゲームを作る? 誰が 私 30代の仕事で 疲れた男性 大人数で遊ぶのが好き な小学生 技術力向上 仕事忘れられるといい

    簡単なルール 何を学びたい? ローカルマルチゲーム 短時間で遊べる サーバを動かす 必要があるゲーム 爽快感があるゲーム ソーシャルゲーム的な 少ない操作で遊べる 白熱するゲーム
  3. 企画を詰める・文書化 ゲームの仕様を決めよう  ゲームスタートからゲームクリアの流れは?  できるだけ詳しく  ゴール扉に入るとステージクリア → ゴールの扉にプレイヤーが触れたら、扉に入る動作をしてリザルト画面を表示

    この時、プレイヤーは空中にいてもよい また、プレイヤーはいかなる動作中でもそれを中断し、 扉の地面に移動した後、扉にはいる動作を行う  認識の違いを減らす  ゴールの扉にプレイヤーが触れたら、扉に入る動作をしてリザルト画面を表示 →プランナーは、空中でゴールしたら、扉の前まで移動するモーションが入ると思っていたが、 プログラマーは、扉の前に瞬間移動すると思っていた
  4. 変数、関数をクラスに 1つのクラスには、1つの責任 作成した変数、関数をクラスにまとめるときには、複数の機能が入り込まないよ うに気を付けましょう public class PlayerInputReader: MonoBehaviour { const

    string HORIZONTAL_KEY_PARAM = "Horizontal"; float IsHorizontalKeyDown() { return Input.GetAxisRaw(HORIZONTAL_KEY_PARAM ); } } 入力 public class PlayerMover: MonoBehaviour { void Move(Vector3 direction, float speed) { transform.position += direction * speed; } } 座標変更
  5. 公開する範囲を考える public class PlayerInputReader: MonoBehaviour { private const string HORIZONTAL_KEY_PARAM

    = "Horizontal"; public float IsHorizontalKeyDown() { return Input.GetAxisRaw(HORIZONTAL_KEY_PARAM ); } } 入力 public class PlayerMover: MonoBehaviour { public void Move (Vector3 direction, float speed) { transform.position += direction * speed; } } 座標変更
  6. クラス同士をつなげる 作成したクラスは独立しています クラスをつなげるクラスを 作成しましょう namespace Player { public class Mediator:

    MonoBehaviour { [SerializeField] private Transform _transform; [SerializeField] private float _speed = 0.1f; [SerializeField] private InputReader _inputReader; [SerializeField] private Mover _mover; private Vector3 _forward => _transform.forward; pivate void OnValidate() { _transform = _transform ?? Transform; } private void Update() { if(_inputReader. IsHorizontalKeyDown >= 1f) { _mover. Move(_forward, _speed); } } } } クラスをつなげる
  7. 同じものは共通化する コードのコピはエラーの元 同じコードは書かないように共通クラスや共通メソッドなどにまとめましょう namespace Common { public static class UtilityData

    { public static float MIN_ROTATION = 0f; public static float MAX_ROTATION = 360f; public static float ClampRotation(float rotation) { return Mathf.Clamp(rotation, MIN_ROTATION, MAX_ROTATION ); } } }