Yoshidayo diary

I choose the form of Oculus Go with Unity

02: Unityチュートリアル「Space Shooter」から得られた知識をまとめてみた

シューティングゲームといえば、縦スクロールで進行するゲーム、迫りくる敵と弾幕の嵐。そんなゲームが作れることを期待して…!

 

UnityのSpace Shooterチュートリアルやってみた

作っている途中から、これってなんで無料で公開してるんだろうって不思議になるくらいクオリティの高い教材でした。

最近、Unityの本を買って1冊やってみたのですが、こっちのチュートリアルの方が内容が濃い気がします!!w

 

得られた知識をまとめてみる

開発するプラットフォームを簡単に変えられる

Command + Shift + B でBuild Settings を開き、開発プラットフォームを変更することができます。Unityの良いところは、いろんなデバイスに対応したゲームが作れることです。

  • ブラウザゲームを作りたかったら WebGL(or WebAssembly)
  • iPhoneやiPad向けに作りたかったらiOS
  • Android...以下略

f:id:zyoryzyory:20180218013040p:plain

 

編集したいゲームオブジェクトのあれこれ

任意のゲームオブジェクトを画面の中央に拡大したい場合があります。そんな時は、ヒエラルキーウィンドウのゲームオブジェクトをダブルクリックか、フォーカスした状態でFキーで拡大できます。マウススクロールでも拡大・縮小はできるのですが、マウスポインタの位置に合わせてスケーリングされるので、ちょっとコツが必要です。

 

 Unityには左上に6つツールが用意されています。

f:id:zyoryzyory:20180218013929p:plain

これはゲームオブジェクトを動かしたり、回転させたり、スケーリングさせたりする機能ですね。僕はシーンウィンドウでゲームオブジェクトをこねくり回すタイプなのですが、最近までこのメニューをカチカチとマウスで押していました。が、ななな、なんとショートカットキーが用意されているのですね!

QWERTY

マウスを右手に握りながらの操作性を考えると、かなりしっくりくる配置ですよね。感動しました。。

 

UnityのColliderが凄すぎて使い方を把握しきれない

f:id:zyoryzyory:20180218015019p:plain

こんな感じで種類がわりとあります。

Colliderってそもそもどんな時に使うのでしょうか。

ピンポンゲームを作るとColliderはこうなります。

  • ラケットはMesh Collider
  • ボールはSphere Collider
  • テーブルはBox Collider
  • ボールが画面外に出てしまった場合に削除するためのBox Collider

ゲームの主要な要素だけで考えてみても、すぐにこれだけ思いつくのでColliderのみなさんと仲良くお付き合いしていきたいですね。

 

ちょっと視覚的な情報を入れておきたいので下図をみてください。Box Colliderはその名の通り、ボックス型のゲームオブジェクトに使われていますね。ヒエラルキーウィンドウで

3D Object > Cube

を選択するとBox Colliderが最初から当たっているので、特に意識することなく使えます。

f:id:zyoryzyory:20180218140559p:plain

反対に棘棘しているものや、形の認識が難しいものについてはMesh Colliderが使えるのですね。Mesh Colliderはメッシュを元にColliderを設定してくれるものです。

メッシュって何かな〜と思い、自機のメッシュを見てみることにしました。

ProjectウィンドウからModels > vehicle_playerShip の中にあるこれですね。

f:id:zyoryzyory:20180220110337p:plain

このボディのアミアミがそのままColliderになってくる…というイメージでしょうか。

なんだこれメッシュってすごーーーい\(^o^)/

ただし、これらのColliderはゲームの実行速度が重くなってしまう原因になるので、極力シンプルなColliderで対処できないか考えるほうが良さそうです。あまり細部まで判定しなくてもいいオブジェクトはMesh Colliderを当てる必要はないですもんね(^^)

ピンポンゲームの例でいうと、ラケットをMesh Colliderでやるよりも、Polygon ColliderやBox Colliderで代用できないかどうか考えるといった具合ですね〜。

使い方によっては、コライダーと少しの要素だけでシンプルなゲームが作れてしまうほどの威力を持っているので、効果的に使っていきたいと思います😆

 

System.Serializable

スクリプト内で自前のクラスのプロパティをUnity上から参照するための宣言です。

これは話が難しいらしく、チュートリアル上では「とりあえず参照できるようにするためにはこれを書く必要があるから覚えておくようにw」といっているので、この宣言がないとうまくいかない…ということをφ(..)メモメモ

まずはリファレンスを見ます!

To do this you need create a class that derives from System.Object and give it the Serializable attribute

Unity - Scripting API: Serializable

ふむふむ、 System.Objectから派生したクラスにSystem.Serializableが使えるんだぜといってますね(たぶんそんな感じが…TOEIC500点 英検3級…><)

<疑問>System.Objectってなんだろう…

C#のリファレンスにはすべてのクラスをサポートする基幹クラスという説明がされています。

Object クラス (System)

ということは、すべてのクラ  あ、Serializableの英単語の意味がわからないので、調べると…、「直列可能な」ーーーふむ。

よし、これはクラスの参照の問題なんだなと当たりがついた所で、Serializableについてはこの辺にしておきます。(T_T)

 

ゲームの実行と停止、リフレッシュなどの便利なコマンド

何回も再生ボタン押すのつらいですよね(T_T)

最高のコマンドだぜ君ってやつは!

Command + P 

 

エラーが出ると赤い文字で下の方にずっといますよね。これ・・・。

f:id:zyoryzyory:20180221190325p:plain

まれに正しいコードに修正したあとでも表示され続けていることがあるのですが、そんな時は君ってやつが本当に役に立つ。

Command + R 

このコマンドできれいにリフレッシュできるゾ

チュートリアルまとめ

最後謎のテンションでしたが、断片的な知識をどんどん自分の言葉に落とし込んでいく作業がとっても楽しいです。正直扱えてない内容が多いのですが、そのうちレベルが上っていくと思います。

さて次は何のチュートリアルをやりましょうかね…。