第11回一週間ゲームジャム「つながる」に参加しました

作ったゲーム

マグロながし

マグロを水で流して売りさばこう。
マグロを画面外に出すと10000円で売れるよ。
あらゆる手段を使ってお金を稼ごう!

(10000円は安すぎるかと・・・)
製作期間:7日

アイデア

今回のお題は「つながる」。Twitterを見ると、多くの人が「TUNA-GIRL」と解釈していました。
いろいろ考えていたところ、私の兄が提案してきました。

「じゃあマグロを流すゲームだ」

提案通りに作ったら、案の定迷走しました。
とりあえずツイートしてみました。
すると、100いいね突破。

動揺しました。つい3日前まで、初めていいねが2桁ついて喜んでいましたが、いきなり3桁に到達しました。
どうやら気に入ってくれたらしいです。これはチャンスとばかりに、完成までもっていきました。
Twitterでの反応としては「豊洲市場みたい」「マグロを必死に生き返らせるゲーム」などありましたが、なぜか画面外まで飛ばすゲームになりました。
豊洲市場のマグロを必死に生き返らせるゲームでも良かったかもしれません。どうせクソゲーに仕上がるのですから。

実装

// マウスカーソルの座標をワールド座標で取得する  
var pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);  
pos.z = 0;  
return pos;  

2Dの場合、Z座標を初期化しておく必要があるようです。詳しくはわかりませんすみません。
画面サイズによって操作性が変わる可能性があるので、画面サイズを決めておくと良いでしょう。
@参考:ワールド、スクリーン、ビュー座標

なお今作では、画面内でクリックし→画面外までドラッグすると、水圧が想定よりも強くなります。
別途で対策が必要です。

水流はWater 2Dというアセットを使いました。Happy Glassなんかで使われてるアレです。
設定が分からないので、サンプルシーンを改造しました。おかげでプロジェクトはカオスです。
背景を豊洲市場にしたかったのですが、なぜか水が見えなくなるのでやめました。

曲線型の壁は2d-spriteshape-samplesを使いました。
思いつかないし、時間もないので、3ステージだけになりました。

バグ

今回一番苦戦したのがシーン変遷です。

シーンの変遷でぬるぽを吐きまくったので、静的変数、DontDestroyOnLoad、シングルトンなど、すべて取り払いました。
かかった時間の合計でランキングを作る想定でしたが、諦めました。

2019/03/17 20:54
ランタイム版で致命的なエラーが発覚しました。
シーン変遷(ステージのリトライ、次のステージに進む)するとクラッシュするのです!

原因1:OnBecameInvisible()

OnBecameInvisible()は、ゲームオブジェクトがカメラにレンダリングされなくなった時に呼ばれます(詳細は割愛)。
ゲームオブジェクトが画面外に行ったときはもちろん、非アクティブになったとき、シーンがアンロードされたときにも呼ばれます。
この2つがバグの原因でした。シーンがアンロードされたときに金額オブジェクト(¥10000)が生成され、
Some objects were not cleaned up when closing the scene. (Did you spawn new GameObjects from OnDestroy?)
と例外を吐きます。

下側以外の画面端をブロックで囲い、マグロの座標が-10以下になったら売られる、という強引な対処をしました。

原因2:DOTween

DOTweenのTweenの再生中にシーンをアンロードすると、警告を吐きます。
(めんどくさくなったから省略)
警告なら致命的じゃないからいいかもしれませんが、直します。
シーンをロードするときに、TweenをKill()することで対処しました。

2018/03/17 21:42
修正版をアップしました。
今回初めてランタイム版でエラーに見舞われました。カナシイ。
誰か上手いシーン変遷の仕方教えてください。

おわりに

迷走しながらも、なんとか完成にこじつけることができました。
次回も参加できれば参加します。