【Game A Week】The Wise【week1】

Game A Week

【Game A Week】The Wise【week1】

Game A Week (サイト外リンク)チャレンジを始めてみます。一週間に一個ゲームを作ってゲーム開発の経験値を積もうというチャレンジです。この記事は第一週目のゲームについてです。期限ぎりぎりで一応プレイ可能なぐらいにはなったので、開発を振り返りたいと思います。ゲーム自体はunityroomにアップロードしました。

The Wise | フリーゲーム投稿サイト unityroom

The_Wiseのゲーム内画像

The Wiseはunityを使ってある程度まで作った初めてのゲームです。(以前にp5.jsというjavascriptのライブラリを使って、なんちゃってブラウザゲームなら二つほど作ったことはあります。)

【ひきこもり脱却チャレンジ】p5.jsとの出会い。私の先生 Daniel Shiffman【プログラミング】
プログラミングの勉強をしていたら、Daniel Shiffmanという男の動画を見つけ、p5.jsを知り、彼からプログラミングのいろはを学ぶことになりました。彼のNature of Codeというコースは、遺伝的アルゴリズムをはじめとして、私に影響を与えました。

Create with Code(サイト外リンク)というunity learnのプロジェクトに自分でゲームを作るというパートがあって、そこで以前にちょびっと作っていたものを下地にしました。なので、厳密に一週間という期限を守ったわけではありません。

項目説明

  • Idea: アイデア。コンセプト。テーマ。元ネタ
  • What went right: やってみて良かったこと。うまくいったところ。成功したところ。次回に活かせそうなこと
  • What went wrong: ダメだったところ。うまく機能しなかったところ。問題点。改善すべき点
  • What I learned: 学んだこと。効果的なゲームデザインの方法やツールの使い方、獲得したテクニックなど

Idea

  • 3D弾幕ゲーム。気づいたらそうなっていた
  • 仲間を増やす要素
  • 子を守る→成長
  • 3Dエンジンならではのメソッドをゲームを作りながら学習したい

What went right

  • アイテム購入システム
    • よくある要素だが予想通りゲーム性が増した
  • ミサイルの爆発
    • colliderのenableで実現
    • 多少派手さが出た
    • エフェクトはないけどね…
  • ミサイル視点のカメラ
    • ゲーム作成中に苦戦しながら実装した
    • 実装できたことは満足だが、ゲーム内であまり使い道なし
      • 一応全ミサイルのうち1%を強制でカメラ追従します。プレイヤーはバグだと思うでしょうね

What went wrong

  • player系統は抽象クラスから継承すべきだった。共通する項目がたくさんある
  • エフェクト、サウンドには全然手が回らなかった
    • プレイヤー体験が貧相に
  • ゲーム内容
    • 子狐を生むメリットが薄い。
      • 正直動作の邪魔になる
      • プレイヤーに追従するようにしたがそれ自体はok?
      • 子狐だけcolliderなしにする案はあった
  • オブジェクトのプール化についてはスルー。時間がない
  • enumを使用して当たり判定のswitch化を実現したかった
  • SpawnManagerがオブジェクトの湧きを管理しているが、コードがハードコーディングになっているので、だいぶrefactoringの余地がある。一つのメソッドにまとめたかった。

What I learned

  • 基礎全般
    • Awake/Start, Update/FixedUpdateの違い
    • オブジェクトごとに座標の基準がバラバラになっていた。例えば、x方向がスプライト的には「前」向きになっていたり。z方向がforward。
    • localとglobal座標。Transformがもつメソッドで互いに変換できる
    • キャラクターの移動方法はかなり奥が深い
  • quarternion
    • 回転の合成。
    • 回転とは開始状態が決まれば姿勢になる。
    • vector*quartenion
  • rigidbody
    • rigidbodyをつけていないとcollision判定はできない
    • rigidbody.moveposition vs transform.translate
    • collision detection
      • continuousなどなど
    • interpolate
  • git関連
    • .gitignore
    • .gitattributes LFS
      • でかいファイルは別のところの保存して、参照のやり取りだけにする
  • singletonデザインパターン
    • オブジェクトは、シーンごとに切り離されているほうが依存関係が解消され独立するのでゲーム全体が安定する。一つのオブジェクトですべてを管理しない方がよい
    • シーン間でデータをやり取りする際は参照ではなくセット。受け取りに行くのではなく、与える。こうすることで依存関係を断ち切れる
  • attributes
    • RuntimeInitializeOnLoadMethod
      • どのシーンからプレイをはじめようが必ずawake前に実行される
      • 例えばGameManagerをどのシーンでも必ず作るとか
  • scriptable object
    • ショップデータに使える?
    • 個別のアイテムデータとそのデータベースに利用
  • UI
    • クソみたいなUIですが一応作ったので、次回からはもうちょっとすんなりできるはず
    • render textureをcameraのtarget textureにセットしてリアルタイムUIレンダリング
  • エディタの拡張、attributesの拡張
    • ほぼコピペだが可能だということがわかった
  • Dictionary
    • 要はただの連想配列?

コメント

タイトルとURLをコピーしました