インフラエンジニアだけどスマホゲームを自作してみたいと思ったので、(?)
ゴールデンウィークも暇だしUnityのシューティングゲームのチュートリアルをやってみた。
以下公式のチュートリアルページ Home · unity3d-jp-tutorials/2d-shooting-game Wiki · GitHub
- シューティングゲームチュートリアル完成版
- シューティングゲームチュートリアルでハマったところメモ
- シューティングゲームチュートリアル 第一回
- シューティングゲームチュートリアル 第二回
- シューティングゲームチュートリアル 第四回
- シューティングゲームチュートリアル 第十回
シューティングゲームチュートリアル完成版
で、まずはスマホじゃなくブラウザ用にビルドしました。
出来たのかこちらです!
ShootingGame
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を押す。
と思ってたら原因判明
再生マークみたいなのをクリックすると
この通り
この手の感覚的な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の追加ですが、文字をクリックするのではなく、右端のプラスマークをクリックする。
(私の環境では見切れており、スクロールしないと見えませんでした。
クリックしても追加されない!?と数分悩んでました)
AnimationEvent has no function name specified
というエラーが出ました。
Animationにて矢印の個所を削除すれば消えました。
次のエラーがこれ
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で順番を決めると解決した。
エラーは全部解決したが、なぜか自機が常に赤い。Animatorに問題がある模様
まだよくわかってないけど、ゲームオブジェクトごとにstateの設定があるのか?
Enemyに作成したDummyがPlayerプレハブにはなかったので、Dummyを作成したところ常時赤状態は解消した。
ということで以上です。
一応ハイスコア等は記録していますが自分のしか記録しないので、
次はハイスコア記録用のサーバとか作ってみたいですね。