conf t

インフラエンジニアのメモ

Unityのシューティングゲーム チュートリアルをやって見た

インフラエンジニアだけどスマホゲームを自作してみたいと思ったので、(?)
ゴールデンウィークも暇だしUnityのシューティングゲームチュートリアルをやってみた。

以下公式のチュートリアルページ Home · unity3d-jp-tutorials/2d-shooting-game Wiki · GitHub

シューティングゲームチュートリアル完成版

で、まずはスマホじゃなくブラウザ用にビルドしました。
出来たのかこちらです!
ShootingGame
f:id:monaski:20150502191803p:plain

Chrom 42 の方はブラウザにchrome://flags/#enable-npapiと入力し、NPAPIを有効にしないとUnityWebPlayerが起動しません。
(私の環境だと上記をやってもエラーで起動できなかったので素直にIEでやるほうがいいかも。てかバランス調整なしのクソゲーなので別にやらなくても。。。)
「Google Chrome 42」でNPAPIが無効化。Unity Web Player/Silverlight/Lyncなどに影響 - 窓の杜

製作期間

・休日2日
・平日夜2日ぐらい

で2.5日くらいでしょうか。

UnityのGUI操作方法や概念はまだまだ勉強不足といった感じですが、
たった2日ちょっとでとりあえず動くものが出来ました。Unityすごい!

シューティングゲームチュートリアルでハマったところメモ

シューティングゲームチュートリアル自体はチュートリアルページに沿って勧めていけばOKなので、
ここで改めて1から説明はいたしません。
ですが私がハマったところについてもしかしたら皆様のお役に立つかもしれないので、情報共有いたします。
今回最新のUnity5で作成したんですが、チュートリアルがちょっと前に作成されたものだったので、 いくつか条件が変わっていました。

それを簡単に書いていきます。

シューティングゲームチュートリアル 第一回

Home · unity3d-jp-tutorials/2d-shooting-game Wiki · GitHub
sliceしてもProjectViewに分割された画像が表示されない時がある。
applyもしてるのに...。

apply=プレハブの更新=プレハブからシーンに出したゲームオブジェクトへの設定変更を、
元のプレハブにも反映すること。

具体的にはシーン中のゲームオブジェクトを選択し、inspectorのapplyを押す。
f:id:monaski:20150502114246p:plain

と思ってたら原因判明

再生マークみたいなのをクリックすると
f:id:monaski:20150429185003p:plain

この通り
f:id:monaski:20150429184728p:plain

この手の感覚的なUIは大体の人は気づくように出来てるとは思うんだけど、気づけないと悲惨だ。
「こんなのわかるでしょ」みたいな感じで説明書に書いてくれていないから。

↓実際載ってはいない
スプライトエディター - Unity マニュアル

シューティングゲームチュートリアル 第二回

Home · unity3d-jp-tutorials/2d-shooting-game Wiki · GitHub

rigidbody2D.velocityはもう使えないらしく、以下の通りGetComponent()を利用する必要がある。

// 移動する向きとスピードを代入する
        GetComponent<Rigidbody2D>().velocity = direction * speed;

http://answers.unity3d.com/questions/927523/unity-standard-assets-is-recieveing-error.html

シューティングゲームチュートリアル 第四回

Home · unity3d-jp-tutorials/2d-shooting-game Wiki · GitHub
動いたけど、敵のスピードがやけに速い
speedの値を0.01とか極端に小さくしてもスピードが変わらない・・・。
スクリプトのどこかに数値埋め込んでしまってるのか?
とか考えていたが、実際にはGravityScaleが1のままだった。
GameObjectとかPrefabの作成が多くなってきて、基本であるGravityScaleを0にするを忘れていた模様。

シューティングゲームチュートリアル 第十回

AnimationでAddCurveはなくなってるので、AddPropertyを選択する。 colorの追加ですが、文字をクリックするのではなく、右端のプラスマークをクリックする。 (私の環境では見切れており、スクロールしないと見えませんでした。
クリックしても追加されない!?と数分悩んでました)
f:id:monaski:20150502122358p:plain

AnimationEvent has no function name specified

というエラーが出ました。

Animationにて矢印の個所を削除すれば消えました。
f:id:monaski:20150502111358p:plain

開発メモ 「エラー処理」 - シヴァのブログ

次のエラーがこれ

NullReferenceException: Object reference not set to an instance of an object
Manager.IsPlaying () (at Assets/Scripts/Manager.cs:41)
Emitter+<Start>c__Iterator0.MoveNext () (at Assets/Scripts/Emitter.cs:27)

Manager.csでタイトルオブジェクトが取得されないうちに Emitter.csがManagerのタイトルオブジェクトを参照していえるため、見つからない となっているらしい。

エラーが出ていてもゲームは再生できるが、Waveの敵が出てこない状態。

ExecuteOrderで順番を決めると解決した。

f:id:monaski:20150502113545p:plain

f:id:monaski:20150502113058p:plain

エラーは全部解決したが、なぜか自機が常に赤い。Animatorに問題がある模様
f:id:monaski:20150502114638p:plain

まだよくわかってないけど、ゲームオブジェクトごとにstateの設定があるのか?
Enemyに作成したDummyがPlayerプレハブにはなかったので、Dummyを作成したところ常時赤状態は解消した。
f:id:monaski:20150502120415p:plain

ということで以上です。
一応ハイスコア等は記録していますが自分のしか記録しないので、
次はハイスコア記録用のサーバとか作ってみたいですね。