トマシープが学ぶ

Mac/Unity/AR好きのミーハー初心者 記事内容は自分用のメモ。何も求めないで

Unity1week「積む」に参加しました

 

Unity 1週間ゲームジャム | ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

twitterで存在は知っていたこれに参加しようと思いました。ゲーム版ワンドロですね。お題は「積む」です。

ちなみに私はARとかライティングはよくやるけど、ゲームに関しては参考書のサンプルやチュートリアル以外で作ったことはありません。つまりオリジナルを作ったことはない。

多分完成できないだろうなと思いながらトライ。

何とか形にはなりました。

イデア出し

積むという単語からいろいろ発想を広げて、結果的に要求された金額分の札束をアタッシュケースの中に積んでいくというゲームを考えました。

f:id:bibinbaleo:20170622161510j:plain

イメージ図

f:id:bibinbaleo:20170622161448j:plain

必要な機能

f:id:bibinbaleo:20170622161458j:plain

作る

プロトタイプ的な

まずunityでイメージをつかむためのプロトタイプ?を作りました。

f:id:bibinbaleo:20170624125136p:plain

必要そうなスクリプトもファイルだけ作ってます。

f:id:bibinbaleo:20170624125234p:plain

オブジェクトの用意(札束、アタッシュケース

Unityではキューブの面ごとにテクスチャを変えることができないらしいのでCinema4Dで札を作りました。

f:id:bibinbaleo:20170624125008p:plain

側面はオリジナルなので使っていいですよ。

f:id:bibinbaleo:20170622160619j:plain

こっちはまずいかな?フォトショで加工したやつ

f:id:bibinbaleo:20170622160624j:plain

次にアタッシュケース。Unityでキューブを組み合わせたものを作っていたのですが、回転がへんになるバグ?が発生したのでCinema4Dで作りました。

f:id:bibinbaleo:20170624125446p:plain

でもこっちもUnityに持ってきたら法線の関係で表示されない面があってめんどくさくなって放置。

blog.goo.ne.jp

結局別のバグが発生しないパソコンでUnityのキューブを組み合わせて作りました。

f:id:bibinbaleo:20170625163050p:plain

札束をドラッグで移動

このサイトのコードをお借りしてドラッグで3次元移動できるようにしました。

neareal.com

ただデフォルトのキューブでやった時はできたけど、cinema4Dで作ったお札は動かない・・・

どうしよう

札束をクリックで移動

ドラッグだとプルプルして安定しないし、重力(rigidbody)もよくわからないので札束をクリックしたら勝手にケースに移動するように変更しました。

ここら辺を参考に・・・

rikoubou.hatenablog.com

mono-pro.net

qiita.com

 クリックしたゲームオブジェクトを取得する関数を作って、

f:id:bibinbaleo:20170625205746p:plain

その位置を変更しました。数値はケースに入る範囲でランダムにしています。

小数にはfをつけないといけない

f:id:bibinbaleo:20170625210030p:plain

f:id:bibinbaleo:20170625205743p:plain

コードは最後にまとめてあります。

アタッシュケースに入ったかを判定&金額表示

ケースに移動したら(札束をクリックしたら)そのぶんの金額を表示に足していきます。

ドラッグで移動するならケースと札束の接触判定か札束の位置で判定をしないといけなかったのですが、クリックにしたのでそこらへんは無視できます!やった!

オブジェクトにタグをつけて判定しました。

f:id:bibinbaleo:20170625210418p:plain

Update関数の中でテキスト表示

f:id:bibinbaleo:20170625210511p:plain

この処理も前の移動と同じスクリプトでやっています。

ここら辺は昔勉強したことが活きた気がします。

hiyotama.hatenablog.com

teratail.com

docs.unity3d.com

マウスオーバーで金額表示

これがないとお札が何百万円なのかわからないから必要なんだけどよくわからなかった。

d.hatena.ne.jp

docs.unity3d.com

TextMeshProで表示

仕方がないので、お札のそばにテキストを表示しておくことにした。TextMeshProを使いました。

f:id:bibinbaleo:20170625210925p:plain

良いですね!立体的に扱えます。札束の子オブジェクトにしたのでクリックしても札束と一緒に移動します。

f:id:bibinbaleo:20170625211016p:plain

bibinbaleo.hatenablog.com

ゲームクリアorゲームオーバーでシーン移動

スコアが要求金額通りならクリア、オーバーしたらオーバー画面に遷移します。

まずそれぞれのシーンをtextMeshProで作って、シーンをビルドに追加して、スクリプトを書きます。

f:id:bibinbaleo:20170625211227p:plain

f:id:bibinbaleo:20170625211234p:plain

キャンバスとかUIは設定がよくわからないので、スカイボックスを無しにして、カメラの背景色を変えて、3DのtextmeshProを作ってこの画面は作りました。

f:id:bibinbaleo:20170625211214p:plain

スペースキーを押したらゲーム画面に戻るように別のスクリプトを書いて、それぞれのシーンの適当なオブジェクトにつけます。

f:id:bibinbaleo:20170625211501p:plain

using UnityEngine.SceneManagement; を忘れない。

これもやったことがあったので簡単。

mynavi-agent.jp

エラー

割と始めの頃からNullReferenceExceptionエラーが出てました。

f:id:bibinbaleo:20170625155553p:plain

f:id:bibinbaleo:20170625165642p:plain

NullReferenceException: Object reference not set to an instance of an object
idou.Update () (at Assets/idou.cs:46)

空になっっている?nullの宣言????色々調べて何となく分かった気はするけど実際どうしたらいいかわからない。

結局最後まで治らなかったけど、ビルドできたので無視です。

teratail.com

ゲームプログラミングUnity,C# 今日のエラー Object reference not set to an instance of an objectピクチャ | ピクチャ

docs.unity3d.com

また、途中スコアが表示されなくなったけど、原因は同じスクリプトを全ての札束につけていたから。一つでよかった。

 

他の困りごととしてはケース底面の影が表示されないというのもありました。

f:id:bibinbaleo:20170625163050p:plain

底を引き上げてごまかした。

最終コード

最初は3つぐらいに分けてたのですが、わけわからなくなって一つにまとめました。

gist.github.com

ギリギリまで、要求金額は1200万円に固定してたけど、ランダムにするのそんなに大変じゃないことに気がついたので最後の最後でランダムにしました。若干ゲーム性が増した。

書き出し

webGLで書き出さないといけない。

blog.naichilab.com

iosとアンドロイドぐらいしかインストールしてなかったのでダウンンロード

f:id:bibinbaleo:20170625155648p:plain

エラーが出たままビルドランしたら実行できなかった。

f:id:bibinbaleo:20170625155753p:plain

何やかんやして動くようになったけど、日本語が表示されない。

f:id:bibinbaleo:20170625212100p:plain

調べたらArialが日本語含んでないかららしい。

Unityゲーム開発所 - Unityで日本語フォントを使う

ここを参考にやさしさゴシックボールドを使いました。そしたらちゃんとできました。

f:id:bibinbaleo:20170625212543p:plain

UnityRoom

投稿はそんなに難しくなかったです。ファイルを一つ一つ間違えないようにアップして行ったらちゃんとできました。

blog.naichilab.com

f:id:bibinbaleo:20170625203949p:plain

f:id:bibinbaleo:20170625155712p:plain

完成

絶対間に合わないと思ってたのに5分前になぜか完成しました。

身代金を積め | ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

ゲームの更新も簡単にできそうなので、もうちょっと見た目をいじりたいです(コードはもうやだ)

f:id:bibinbaleo:20170625220548p:plain

見ていただいてる。

感想

今週珍しく忙しかったのと、ひぐらしのなく頃にが今日まで無料放送だったので家にいるときはずっとそれを見てたので、マジで今日までほとんど進めてませんでした。

ブログを書きながら実装してたのですが、絶対間に合わないだろうな、途中で飽きるだろうなと思ってたのですが、何とか形にはなりました。

こういう機会がないとゲーム作らないと思うので、次回からもできるだけ参加したいです。

Unityやってるって人に言う以上はゲームも多少できないと恥ずかしいし・・・