Unity:2017.7.24~Unity1week今さらレポ
去年の夏(2017.7.24~)に参加してたUnity1week、お題「夏」で作りかけたゲームが実に9か月ぶりにひとまず遊べるまでに完成しました。
なので感想というかせっかく作ったんだしレポート書いておこうみたいな。
作ったやつ
朝顔育成デッキ構築カードゲーム
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か月くらいかも)
一週間ゲームジャムとは……
作るときに考えてたこと
出来なかったこと
・一週間で完成しなかった
そもそもドミニオンをベースにした時点で最小限でもユニークな効果のカードを10種コード書かなきゃいけない上にカード管理とかいろいろ作る必要があった。
そしてUnityのブランクは長すぎてちょっとしたコード書くだけで瀕死に。
いくらペーパークラフト版が一日で出来たからって同じことがUnityで出来るわけがないのであった。
・カード効果の演出をわかりやすく出来なかった
特にお邪魔虫(毎ターン発生する妨害システム)がサイレントに効果が発生して終わりなので非常に分かりにくい。他も散々
実装あれこれ
・カードの基底クラス
コスト等の基礎的なパラメータの定義を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処理はカード詳細ダイアログ用のテキストを用意
・大雑把なゲーム全体の構造図
かなり雑だけど大体こんな感じ
・playerクラス
基本的にリアルで行うアクションをベースに関数を用意
カードをデッキから引く・マーケットからカードを購入する・手札のカードを使用するetc
・マーケット・デッキとか
各クラス内のListでカードのprefabを管理、playerクラス用の操作関数とかも用意した
反省
・いきなりカードゲームを作るのは無謀だった
この一点に尽きる。作らなきゃいけない要素が多いので一週間ゲームジャムで作るには実力不足でした。
感想
期間内に作りきれなかったり、いろいろ粗があったりだけど、なんだかんだカード管理のロジックを書くのは楽しかったし結構勉強になったかも。
カードゲーム好きなのでいつかちゃんと考えてオリジナル要素の強いものが作れたらいいなぁ。