Unity 1週間ゲームジャム | ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう
twitterで存在は知っていたこれに参加しようと思いました。ゲーム版ワンドロですね。お題は「積む」です。
ちなみに私はARとかライティングはよくやるけど、ゲームに関しては参考書のサンプルやチュートリアル以外で作ったことはありません。つまりオリジナルを作ったことはない。
多分完成できないだろうなと思いながらトライ。
何とか形にはなりました。
締め切り5分前に投稿しました。
— bibinba (@kagemiyaryu1) 2017年6月25日
身代金を積め | ゲーム投稿サイト unityroom #unity1week https://t.co/qEDvrATWcG
アイデア出し
積むという単語からいろいろ発想を広げて、結果的に要求された金額分の札束をアタッシュケースの中に積んでいくというゲームを考えました。
イメージ図
必要な機能
作る
プロトタイプ的な
まずunityでイメージをつかむためのプロトタイプ?を作りました。
必要そうなスクリプトもファイルだけ作ってます。
オブジェクトの用意(札束、アタッシュケース)
Unityではキューブの面ごとにテクスチャを変えることができないらしいのでCinema4Dで札を作りました。
側面はオリジナルなので使っていいですよ。
こっちはまずいかな?フォトショで加工したやつ
次にアタッシュケース。Unityでキューブを組み合わせたものを作っていたのですが、回転がへんになるバグ?が発生したのでCinema4Dで作りました。
でもこっちもUnityに持ってきたら法線の関係で表示されない面があってめんどくさくなって放置。
結局別のバグが発生しないパソコンでUnityのキューブを組み合わせて作りました。
札束をドラッグで移動
このサイトのコードをお借りしてドラッグで3次元移動できるようにしました。
ただデフォルトのキューブでやった時はできたけど、cinema4Dで作ったお札は動かない・・・
どうしよう
札束をクリックで移動
ドラッグだとプルプルして安定しないし、重力(rigidbody)もよくわからないので札束をクリックしたら勝手にケースに移動するように変更しました。
ここら辺を参考に・・・
クリックしたゲームオブジェクトを取得する関数を作って、
その位置を変更しました。数値はケースに入る範囲でランダムにしています。
小数にはfをつけないといけない
コードは最後にまとめてあります。
アタッシュケースに入ったかを判定&金額表示
ケースに移動したら(札束をクリックしたら)そのぶんの金額を表示に足していきます。
ドラッグで移動するならケースと札束の接触判定か札束の位置で判定をしないといけなかったのですが、クリックにしたのでそこらへんは無視できます!やった!
オブジェクトにタグをつけて判定しました。
Update関数の中でテキスト表示
この処理も前の移動と同じスクリプトでやっています。
ここら辺は昔勉強したことが活きた気がします。
マウスオーバーで金額表示
これがないとお札が何百万円なのかわからないから必要なんだけどよくわからなかった。
TextMeshProで表示
仕方がないので、お札のそばにテキストを表示しておくことにした。TextMeshProを使いました。
良いですね!立体的に扱えます。札束の子オブジェクトにしたのでクリックしても札束と一緒に移動します。
ゲームクリアorゲームオーバーでシーン移動
スコアが要求金額通りならクリア、オーバーしたらオーバー画面に遷移します。
まずそれぞれのシーンをtextMeshProで作って、シーンをビルドに追加して、スクリプトを書きます。
キャンバスとかUIは設定がよくわからないので、スカイボックスを無しにして、カメラの背景色を変えて、3DのtextmeshProを作ってこの画面は作りました。
スペースキーを押したらゲーム画面に戻るように別のスクリプトを書いて、それぞれのシーンの適当なオブジェクトにつけます。
using UnityEngine.SceneManagement; を忘れない。
これもやったことがあったので簡単。
エラー
割と始めの頃からNullReferenceExceptionエラーが出てました。
NullReferenceException: Object reference not set to an instance of an object
idou.Update () (at Assets/idou.cs:46)
空になっっている?nullの宣言????色々調べて何となく分かった気はするけど実際どうしたらいいかわからない。
結局最後まで治らなかったけど、ビルドできたので無視です。
ゲームプログラミングUnity,C# 今日のエラー Object reference not set to an instance of an objectピクチャ | ピクチャ
また、途中スコアが表示されなくなったけど、原因は同じスクリプトを全ての札束につけていたから。一つでよかった。
他の困りごととしてはケース底面の影が表示されないというのもありました。
底を引き上げてごまかした。
最終コード
最初は3つぐらいに分けてたのですが、わけわからなくなって一つにまとめました。
ギリギリまで、要求金額は1200万円に固定してたけど、ランダムにするのそんなに大変じゃないことに気がついたので最後の最後でランダムにしました。若干ゲーム性が増した。
書き出し
webGLで書き出さないといけない。
iosとアンドロイドぐらいしかインストールしてなかったのでダウンンロード
エラーが出たままビルドランしたら実行できなかった。
何やかんやして動くようになったけど、日本語が表示されない。
調べたらArialが日本語含んでないかららしい。
Unityゲーム開発所 - Unityで日本語フォントを使う
ここを参考にやさしさゴシックボールドを使いました。そしたらちゃんとできました。
UnityRoom
投稿はそんなに難しくなかったです。ファイルを一つ一つ間違えないようにアップして行ったらちゃんとできました。
完成
絶対間に合わないと思ってたのに5分前になぜか完成しました。
身代金を積め | ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう
ゲームの更新も簡単にできそうなので、もうちょっと見た目をいじりたいです(コードはもうやだ)
見ていただいてる。
感想
今週珍しく忙しかったのと、ひぐらしのなく頃にが今日まで無料放送だったので家にいるときはずっとそれを見てたので、マジで今日までほとんど進めてませんでした。
ブログを書きながら実装してたのですが、絶対間に合わないだろうな、途中で飽きるだろうなと思ってたのですが、何とか形にはなりました。
こういう機会がないとゲーム作らないと思うので、次回からもできるだけ参加したいです。
Unityやってるって人に言う以上はゲームも多少できないと恥ずかしいし・・・