はじめに

直前の経験を終えて新しいUnityプロジェクトを始めようとしていたところ、10年前に見た静かな映画をもう一度見て、経験が持つ影響力について考えるようになりました。考えがある程度まとまった後、良い映画が良い経験として残るように、私もそういうものを作ってみたいと思うようになりました。普段から何かを作ったり表現したりしたい気持ちもありました。

concept-art友人と話しながら描いた簡易コンセプトアート兼企画

経験に焦点を当て、単にプレイヤーが何の操作をしなくてもシーン内のオブジェクトが勝手に互いにインタラクションする環境を構想しました。スコアやゲーム終了条件なしに、単に眺めて歩き回るだけのゲームです。
上のアイデアをもとに素早く絵を描いてみたら、思ったより感じが良くて周りの反応も悪くなかったので、これを基に企画を構想し始めました。

企画

以前最も残念だったのは企画の不在です。参考にできる指標と長期プランがないので、マクロ的にはゲームの方向性を定めにくく、ミクロ的には例えばリテンションや収益性を考えにくかったです。そこで今回は企画を先にある程度構成してから進もうと思います。

ゲーム企画に役立つ概念があるか探してみたところ、GDD(Game Design Document)というものを知りました。一種のゲーム仕様書で、決まった形式があるわけではなく、Unityが制作したGDDのフォーマットを参考に、必要な部分だけを事前に記述しておこうと思います。

簡易GDD

  • 基本説明
    • 名前: 行先地 (英語: waybound)
    • ジャンル: 横スクロールアドベンチャー
    • 形式: 2.5Dモバイル
  • ゲームプレイ
    • プレイヤーは都市郊外の環境で人、犬、猫、蟻など環境を構成する生物になり、その生物に与えられたインタラクションを行う。例えば人は自動販売機で飲料を取り出して飲み、犬は路上のベンチの匂いを嗅ぐ。
    • プレイヤーが特に生物を操作しなくても、生物は互いにインタラクションをして都市郊外の雰囲気を構成し、それぞれの生物は与えられた範囲内で外見的な個性を持つ。
  • 主な特徴
    • オブジェクト間の多様なインタラクション
    • 手書きの絵画像とカットアニメーション
    • 雨、雪など天候によって変わる体験

オブジェクト例

mindmap
    root((オブジェクト))
        生物オブジェクト






        非生物オブジェクト
            自動販売機
            椅子
            ゴミ箱
            屋台
        背景オブジェクト
            集合住宅
            コンビニ
            カフェ
            居酒屋
            地下鉄

インタラクション例

graph TD;
    人 -- 飲料を買う --> 自動販売機;
    人 -- 散歩させる --> 犬;
    人 -- なでる --> 猫;
    人 -- 見る --> 蛍;
    人 -- 座る --> 椅子;
    人 -- 食べ物を買う --> 屋台;

目標

技術的目標

これまでは変数や関数名の記述に混乱が多くありました。一貫性と直感性のどちらも上手くいかず、徐々にコードを読んで修正するのが大変になりました。

そんな中、Unityブログでネーミングコンベンションをまとめた記事を目にして少し衝撃を受けました。最初から知っていたらもっと楽だったのにと思いました。結果的に、変数名と関数名についてC#でいつ何を使うべきか、どのように書くべきでないかを明確に知ることができました。

自分が知るべき慣行が他にもあるか探していたところ、同じくUnityが発行した”Level up your code with game programming patterns”というE-Bookをさらに知りました。ゆっくり精読しながらSOLID原則やファクトリーパターン、状態パターンなど様々な活用可能な技術があることを知り、これをもとに派生パターンを探しながら、より体系的なコード設計のために挑戦してみたいことが生まれました。整理すると以下のようにまとめられます。

  • PlasticSCM
  • イベント駆動型プログラミング
  • プロシージャルアニメーション
  • 厳格なネーミングコンベンション

このうちPlasticSCMはGitHubを代替するためのバージョン管理システム(VCS)として、開発中に間々作業物を保存しておくために使用しようと思います。イベント駆動型プログラミング、ネーミングコンベンションなどはこのプロジェクトを通じて得たい開発能力の核心です。この他にシングルトンパターン、コルーチン、デリゲート、get setプロパティなどまだ慣れていないものもより活用してみたいという小さな目標もあります。

芸術的目標

基本的に線と絵が動く経験を通じて、私たちの周りの日常的な雰囲気を描写することが目標です。そういったものを目に十分留まりつつも刺激的ではない感じで表現できればと思います。可能なら映像作品のような演出を目指しながら、具体的には以下程度を活用しようと思います。

  • カットアニメーション
  • 動的被写界深度
  • トーンカーブ曲線

全体的にユーザーがじっとゲーム画面を見つめているだけでも面白いレベルにできればと思います。ただ自分にその程度の力量があるかは悩ましいところで、特に犬、猫、鳩など動物の動きをカットアニメーションで描き出すのはプロのアニメーターの領域だと聞いたことがあります。私がそこまで精密なアニメーションを描く必要はありませんが、背景知識や経験がないので試行錯誤があるでしょう。

ロードマップ

gantt
    title 1次ロードマップ

    Section 企画
    企画 :a1, 2024-02-28, 1d

    Section 開発
    プロトタイプ開発 :a2, 2024-02-28, 85d
    ビジュアル構成: a3, 2024-05-23, 10d

    Section リリース
    リリースおよびサポート :a4, 2024-06-01, 213d

    %% a2["プロトタイプ完成"] : 初期バージョンのプロトタイプを開発して機能を確認しテストします。