Unity:2017.7.24~Unity1week今さらレポ

去年の夏(2017.7.24~)に参加してたUnity1week、お題「夏」で作りかけたゲームが実に9か月ぶりにひとまず遊べるまでに完成しました。

なので感想というかせっかく作ったんだしレポート書いておこうみたいな。

 

作ったやつ

f:id:nosnoo:20180506185150j:plain
朝顔育成デッキ構築カードゲーム

https://unityroom.com/games/4_oclock_bloom

unityroomさんにUPしてあるのでそのまま遊べます。

こういった場所を用意してくれてるunityroomさんは神!

 

参加動機

・Unity最後に触ってから2年も経ってて、今のバージョンがどんなもんか気になった

・コードで書く作品を作りきったことなかったので、ちゃんとやってみたかった

・unity1week自体もちょっと気になってたので参加してみたかった

 

制作期間

 2017.7.24にスタートして一週間で一旦Fix。この時はカードの管理とドラッグUIくらいまでの完成度 

 2017.9月の末くらいまでチマチマと進めてたもののリアル事情も絡んで一旦心が折れる

 2018.4月頭くらいに思い立って開発再開して5月頭にゲームできるように

 トータルで大体3か月ほど(9月中はぷちコン作品を作っていたのでもしかしたら2か月くらいかも)
 一週間ゲームジャムとは……

 

作るときに考えてたこと

・とりあえず他の作品となるべくネタ被りを避けたい

 海とかスイカとか花火とか虫取りとかは被りそう。

 →夏休みの宿題で朝顔を育てるのは夏の定番なうえに割と被らなさそう!

・一週間で出来るようになるべく既存のゲームロジックに乗ろう

 育成=デッキ構築カードゲームみたいな感じにできるんじゃ?

 →ドミニオンクローンの方向性で決定

ドミニオンならペーパークラフトしてどんな塩梅になるかテストできるんじゃ?

 実際に作ってみて1日でバランス調整と既存のドミニオンにないエッセンスがちゃんと機能するか確認した

f:id:nosnoo:20180507105806j:plain

 ※カードの台紙替わりになっているのはハートオブクラウン*1
 ドミニオンライクなゲームで今回かなりデザインの参考に。

 

出来なかったこと

・一週間で完成しなかった

 そもそもドミニオンをベースにした時点で最小限でもユニークな効果のカードを10種コード書かなきゃいけない上にカード管理とかいろいろ作る必要があった。

 そしてUnityのブランクは長すぎてちょっとしたコード書くだけで瀕死に。

 いくらペーパークラフト版が一日で出来たからって同じことがUnityで出来るわけがないのであった。

・カード効果の演出をわかりやすく出来なかった

 特にお邪魔虫(毎ターン発生する妨害システム)がサイレントに効果が発生して終わりなので非常に分かりにくい。他も散々

朝顔を育てる感を出せなかった

 本当は朝顔のモデルを用意してSDユニティちゃんが水やりをやって、みたいな演出をつけたかったけど水やりのモーション作る余裕も技能もなかった。朝顔も同様

・バグとり

 手札を消滅させ過ぎて枚数が5枚以下になると進行不能になる。

 ドロー処理のセイフティが利いてないのが原因なんだけど意図してやらない限り発生しないし放置。そのうち直すかも……。

実装あれこれ

・カードの基底クラス

 コスト等の基礎的なパラメータの定義をprefabで設定できるように

    [SerializeField]
    protected int GPCost;

 カード毎のユニーク効果はinterfaceで個別に定義できるように、playerクラスからデッキや手札にアクセスするので引数でアクセス可能に

public interface CardInterface
{
    //カード効果
    void CardEffect(Player player);
}

 その他カードをドラッグする処理とか、カード詳細ダイアログとかもこのクラスで定義

・各カード

public class Study : CardBase, CardInterface
{
    public void CardEffect(Player player)
    {
        player.Add_AP(1);
        player.CardDraw(2);
    }

    // Use this for initialization
    void Start()
    {
        CardText = "GP Cost:" + base.GPCost.ToString() + " \r\n " + base.CardType.ToString() + "Card \r\n" +
            " [研究] \r\n +1AP \r\n +2ドロー";
    }
}

 一例として研究(+1AP、+2ドロー)カードの実装。Start処理はカード詳細ダイアログ用のテキストを用意

・大雑把なゲーム全体の構造図

 f:id:nosnoo:20180507133144j:plain
 かなり雑だけど大体こんな感じ

・playerクラス

 基本的にリアルで行うアクションをベースに関数を用意
 カードをデッキから引く・マーケットからカードを購入する・手札のカードを使用するetc

・マーケット・デッキとか

 各クラス内のListでカードのprefabを管理、playerクラス用の操作関数とかも用意した

反省

・いきなりカードゲームを作るのは無謀だった

 この一点に尽きる。作らなきゃいけない要素が多いので一週間ゲームジャムで作るには実力不足でした。

感想

 期間内に作りきれなかったり、いろいろ粗があったりだけど、なんだかんだカード管理のロジックを書くのは楽しかったし結構勉強になったかも。
 カードゲーム好きなのでいつかちゃんと考えてオリジナル要素の強いものが作れたらいいなぁ。