あほげー参加作品「1万ニワトリ(略称)」の開発記録

あほげー第28回に参加してきました。

あほげーとは出されたお題に対して大体24時間でアホなゲームを作る企画です。
今回は2月8日に「にわとり」というお題が出され
翌9日にゲームを提出する形でした。

そしてこれが提出したゲーム
「10000円をニワトリで稼ぎたいだけの世界」

この記事ではこのゲームの開発記録なんかを記していきます

で、ここから開発記録
Twitterの情報を引っ張り出しながら話するよ


まずお題を聞いて思ったのは
ニワトリが卵を産んで、それを売って儲けるゲームにしよう
ってことでした

多分、以前のあほげーのゲームを遊んでいた際に
豆苗をひたすら育てるゲームがあって、面白かったから
結構影響を受けたんだと思います。

豆苗を育てるゲームは水道代と売値のチキンレースみたいな感じで
上手く育てて上手く売って儲けてねってゲームだったから
初期思想はかなりこの内容に引っ張られてる

で、とりあえずニワトリのグラフィック用意せんにゃってことで
グラフィックを描き始めました
使用ソフトはいつものEDGE
Asepriteも買ったんだけど
速度重視だとどうしても慣れたソフトを使ってしまう

で、卵・ひよこ・ニワトリを制作

この段階で卵を売るのか育ててニワトリにして卵生産力に充てるか
っていうところを遊びにしようと思ってた

あと、餌の概念もあって
餌をあげることで育ったり卵を産んだりするから
餌の工面とニワトリのバランスを考えるゲームにしようとしてた

当たり判定は四角じゃ面白くないから
多角形の当たり判定を使ってそれっぽく囲ってます
実際ここにある当たり判定のままいきました

とりあえず物理を乗っけて
生物は重力影響下、その他は静止オブジェクトとしてます

ツイートでは触れてませんが
掴んだところを動かすのはけっこう大変だった

最初は中心点をマウスと合わせてたけど
それだと箱が思いっきり動くので
掴まれたオブジェクトがマウスの動きを追従するように修正

実はこれでも物理演算が入ると掴んでる座標がずれまくるから正しくはない
ただ、この規模のゲームならまぁいいかなということにしました。

ホントなら掴まれた点がマウスのところに来るように
ベクトルをかけて動かすのが一番いいと思う

このツイートはいいね数が異様に多くて
やっぱみんなバグが好きなんすねぇってなった

何が起きているかというと
卵→ひよこと成長する時、
卵がひよこを生成して卵自身が消える
っていうプログラムを書いたつもりが

卵自身が消えるって部分を書き忘れていた
さらに指定時間が経過したらひよこを生成する
になっているもんだから
指定時間以降永遠とひよこを生成し続ける

ひよこ→ニワトリも然りで
時間が進むごとに増える増える
なんていうバグが起きていたんです

で、こっちはちゃんと自身が消えるっていうのを入れた版
成長時間や卵を産むインターバルは調整してないから
結局ブワーってなるけど
こっちは秩序のあるブワー

この辺りからこのゲームの方向性が決まってきてて
ニワトリがブワーって増える中で頑張って売るゲームにしようということになった

でもこの段階では販売エリアを動かす予定はなくて
その変更が入るのはもうちょっと先のお話

これはもうちょっと秩序をもたせた版で
どんな挙動をするかの確認用

で、次にUIとかを揃える必要が出てくる
個人的にuGUIが嫌いなので
自前でGUIを作りたかった

時間もないし今開発しているAegisから素材を拝借することに

それが今実装されている数字の部分
あれ実はAegisの残弾表示用の数字なんです

この辺りで眠気に限界が来て8日の開発は終了しました


翌9日、最終日の開発はGUIの制作からです


これは販売エリアを作ろうと思って
勢いだけでドットを打った結果
あれ?って思って調べて
売るってSellじゃん!ってなったシーンw

結果的に箱を販売することになったから
両方使うことにはなったけど
正直作ったものが無駄になるかと思って焦った

UIを揃えたあとは
ニワトリのステータス遺伝システムを作って
各ステータスの依存関係を作って

さて、じゃぁどうやってステータスをユーザーに伝えよう
これがほんとに大きな課題だったと思う

シミュレーションゲームって大概のステータスが
全部見えるか全部見えないんだよね

膨大になるニワトリの全ステータス管理は
人間の能力を超えるから無理

見せなかったらなんか違うぐらいの認識になる

ほぼ苦肉の策として
カーソルを合わせたやつのステータスを表示する
という形で収まりました

カーソルにステータスのウィンドウを出させるかとも思ったけど
それだと見た目が迫っ苦しいので却下したり


箱を購入で増やせるシステムも追加して
さてそろそろ完成かなと思いながらテストプレイをしてました

ニワトリを増やして
いらないニワトリを販売エリアに運んで
そんなことしてる間にニワトリが爆発的に増えて

頑張って箱増やしてニワトリを溜めて
また運んで売る

そんなことをしているとふと頭によぎったのが
自動生成施設を作りたい…

つまり売却エリアを動かせれば解決なのでは!?

その考えに行き着くのはすぐでした
早速動かせるようにしてみたところ
思ったより面白い!

もちろん欠点はありました
画面外に持っていってしまうと
取り返せなくなる点

でもまぁあほげーだからいいじゃない
それぐらいあほでも

そう考えさせてくれる点で
本当にいいゲームJAMだと思います

そしてブラウザー上でテストして
Unityroomに登録して
提出じゃー


ブラウザ上でマウス操作が効かないんですけど!?

ほんとにこれは困りました
試しにマウスカーソルの座標とマウスボタンを画面上に出してみたら
ちゃんと操作したとおりになるんですよね

つまり
マウス操作は出来る、ゲームも動く
ただしゲームは操作を受け付けない
っていう状況に陥ったわけです

創作仲間の方々にいろいろと質問したり
ネットで似たような事例がないか調べたりしましたが
なにもない

これは本当に困った
Unityの公式ページを10回ぐらいは見直したと思います

で、いろんなブログを渡り歩いていたら
WebGLはデバッグしにくいからCtrl+Jでログ出して
エラーログとか全部見たほうがいいよ
って言われました

そんなもんかねぇと思いつつ
ビルドしたやつを動かしながらログを追いかけると

警告でも注意でもない普通のコメントに
未知のタグが指定されているオブジェクトがあります
的な文面を発見

タグはunTaggedになってたオブジェクトがいくつかあったので
これしかないだろうなぁと思って適当なタグを指定

なんとタグを指定するだけでうまくいきました
悩みに悩んだ4時間は何だったんだ!?

これでやっと完成
一回Unityroomにアップしたあと
一通り遊んでみてバグがないことを確認して


あほげーに作品提出して開発は完了しました!

ちなみに餌要素は
ブワーッと増えるゲームと相性が悪いので
仕様ごとボツりました


はい、ここから後日談
あほげー参加者の方、身内、Unityroom見ている方
様々な方にこの略称「1万ニワトリ」を遊んでいただけました

様々な意見をいただく機会もありましたが
特に多かったのが
・ブワーって増えだしたらめっちゃ面白い
・最初待つのが長い
・ニワトリ売って詰んだ
・タイマーあるならランキングあってもいいかも
という意見

確かに最初は長いし
初めてだからスルーしたけどオレもランキングがほしい
ニワトリを売ってしまって詰むのは仕様です(あほげー要素

ということで
開発に区切りをつけるためにも
Ver.2を作ろうとなりました

まず最初の課題
始まってから面白くなるまで時間がかかる

これは2つの問題を孕んでいると考えました
1.ニワトリが一定数にならないとあふれるほどにならないのでヒマ
2.卵を産む時間分更に待ち時間が発生している

そもそもこのゲームはねずみ算式にニワトリが増える
ニワトリなのにねずみ算とはこりゃ如何に
みたいなところがあるので
最初は数が少ないんですよね

それでもまずは2羽いればオーバーフローまでの時間を
かなり短縮できると考えたので
初期は2羽スタートに変更しました

次に待ち時間問題
最初2羽いようが卵を産むまでの時間が長いと
1羽が成長する分の時間を短縮したに過ぎないので

ニワトリになった直後に卵を産むように調整しました
開始早々に卵を産んで
成長したらすぐに次の卵を産む

ニワトリに成長してから卵を産むまでの時間を縮めることで
プレイ全体でのサイクルを短縮してプレイの高速化に成功

プレイ時間問題は一先ずこれで解決しました。

そして次の課題
ランキング実装について

これについて
ここでは深く語りません

すでに実装方法を素晴らしい方がまとめてくださっているので
そちらを御覧ください。
【Unity、WebGL】なるべく簡単にオンラインランキング機能をつけるサンプル
WebGLからツイートするサンプル

非常にわかりやすく実装もカンタンだったので
ランキングの実装自体は30分もかかりませんでした

仕上げにランキングで日本語が使えるよう
プラグインを追加して完成です
WebGLでIME入力を可能にします


画像つきツイート・オンラインランキングは
先駆者様のおかげで非常に早く実装できました

そしてこれらが正しく動作することを確認して
「10000円をニワトリで稼ぎたいだけの世界」の開発が終了しました

今回の開発を通して
今まで積み重ねてきた経験が
技術として身についていることを実感しました

また、様々な反応をいただいたことで
これからどんなゲームを開発していきたいのか
についても方向性が見えたように思います。

以上
質問等あればTwitterやコメントなどでご連絡ください

いろいろ開発進んだよって話とかとかとかクラウドファンディングよろしくお願いしますって話

結構まえの記事から間があいてしまった…
とりあえずあけましておめでとうございます。

で、開発の方ですが
ゴリゴリ進んでおります。
どれぐらい進んだかって

UI周りが一通り完成して
一回大きな仕様修正が入って
必要なシステムは全部揃って
タイトル考えて
タイトル画像作って
クラウドファンディングして資金集めたいぜ!!
ってとこまで出来てます
(あまりにも読みにくい…)

とりあえずある程度体験してもらえる準備は揃っているということです。



そして次に目指したいのが皆さんに支援をお願いすること。
この記事をご覧の方々にもお願いすると思います

何卒よろしくお願いします。

動画をGIF化するときに役立ったツール

ちょいちょいツイッターにゲーム開発の進捗GIFをあげてるんですが
そのGIFの作り方について、最近やり方を変えたのでまとめとこうと思います。

まず私のやり方は「スーパーアマレココ」でUnityの開発画面をキャプチャして
AviUtl」でAVI動画データを作ります。

その動画データをなんとかしてGIF化させていたのですが…
今まではEZGIF.COM様でGIF動画化していました。

こちらのサービスも結構具合が良くて
動画をアップするだけでトリミングからGIF化、更にはいろんな調整も出来てしまうわけです。

ですがフレームレートの制限とかがあったので
どうも不自由な時があるなぁと思っていたら
もっといい手段に巡り会えました。

動画編集ソフトのAviUtlにプラグインでGIF出力ができるようになるのがあったんですよ!
その名も「Direct Animated GIF Export Plugin

これが結構具合が良くて
そもそも私の作業手順であるAviUtlから作業用ファイルの出力を省略できるので大助かり

サクッとものが作れるのは本当に便利ですな。

「public const」ってstatic化するんですってよ

ボスの行動ルーチン作成中に困ったことが起きました。

行動内容を変数で取っていたんで、そのケース分けを定数で管理しようと思ったんですよ。
以下のような感じで

const int a = 100;


int state;


switch(state){
  case a:
    …
    break;
}

で、Unityってパーツ分けしてパーツごとにアニメーション指定できるので
別のパーツ部分からこの行動分岐ルーチンにアクセスしたかったんです。

その際、現状の行動内容をいれたかったから定数を参照したかったんですよね。

なので以下のように調整しました。

public void class ClassX(){
  public const int a = 100;
  …
}

public void class ClassY(){
  ClassX x = new ClassX();
  x.state = x.a;
  x.WayPoint();  //行動分岐ルーチン
}

するとエラーが起こるんですよね
x.state = x.a;」この部分で

頑張って調べた結果やっとこさ情報が出てきました。
public const」で指定したものはstaticと同じ扱いになるらしいです。
つまりプログラム状は一つしか存在できない定数になるんですね。

この状態の定数にアクセスするにはnewで作られたクラスからではダメらしいです。
なので以下のように修正したらうまくいきました。

public void class Y(){
  ClassX x = new ClassX();
  x.state = ClassX.a;
  x.WayPoint();  //行動分岐ルーチン
}

クラス名からの参照をすれば正しくアクセスできるみたいですね。

実際はGet関数とかを使うのが健全だと思います。
一つ一つ作るのが面倒だったので横着した結果ですね…。

とりあえずこれで解決したのでこのまま行こうと思います。


敵がプレイヤー関連を狙うようにしてみた

このゲームはプレイヤーの他にもコア・ユニットと敵が狙うべき要素が多いので
そのへんを一元管理して誰を狙うべきか教えてくれるクラスを作ってみました。

ざっくり言うと
敵自身の座標を送ると、ターゲットとなる相手の座標が返ってくる感じです

まぁ内部的にはプレイヤーとコアと全ユニットの距離を調べて
一番近いものを返してるんですけどね

ユニットにはターレット型や妨害型の用意を考えていて
特に妨害型は移動の邪魔になり、攻撃の邪魔になるものなので
敵はこれを攻撃しないと流石にバカ過ぎるだろうと思うわけです。

ひとまずは現状で様子見して、もし重いようだったらいろいろ修正かけます。

あほげー参加作品「1万ニワトリ(略称)」の開発記録

あほげー第28回に参加してきました。 あほげーとは出されたお題に対して大体24時間でアホなゲームを作る企画です。 今回は2月8日に「にわとり」というお題が出され 翌9日にゲームを提出する形でした。 そしてこれが提出したゲーム 「10000円をニワトリで稼ぎたいだけの...