「ユニティでシューティングゲームを作ろう」初回の前回はエンドレスで背景をスクロールさせるプログラミングを実装しました。今回は、背景に惑星や星雲を追加して、惑星を回すプログラムをほどこしてみたいと思います。
Step:1 惑星、星雲の準備と配置
ただ宇宙の画像が流れても面白くないので、背景に星雲や惑星を配置してみましょう。
①必要な素材は前回アセットストアから取得したものを使います。まずは星雲の画像をBackground Elements =>Dust and Nebulae から取得します。いろいろな素材があるので迷いそうですね。選択した素材は、前回作成した背景の中の、好きな場所に配置してください。
②このままでは、宇宙の背景の後ろに隠れてしまいます。前回学習した「SortingLayer(ソーティングレイヤー)」という機能を使って、レイヤーを管理したいと思います。あらたに「nebula」というレイヤーを作り、前回作った「BackGround」の下に配置します。レイヤーは下にあるほど、手前に表示されますよ。このレイヤーを、今回追加した星雲のSortingLayerにセットしましょう。
③これら配置した場所にある「BackGround」の子要素にします。二つの背景にまたがっていたら、上に位置する「BackGround」の子要素にしておきましょう。こうすることで、親要素と一緒に移動することができます。
④続いてこの素材(星雲)の大きさを指定します。名前を変更したい場合はここで変更しておきましょう。
⑤続いて惑星を配置します。地球や月の素材があって楽しそうですね。下の画像のディレクトリをたどり、素材を指定し、背景の上に配置します。ここからの手順は①~④と同じですよ。
⑥背景の「BackGround」や星雲より前に出したいので、新たにSortingLayerを作成し、「Planet」と名前を付けておきます。作成画面では先に作った2つのレイヤーより下に配置して、惑星にセットします。
⑦作成した惑星を、「BackGround」の子要素として配置します。星雲と同じように、配置した場所にある「BackGround」の子要素になるように注意しましょう。
⑧最後は大きさと位置の調整を行い、必要に応じ名前を付けます。
⑨前のステップで、地球と月の画像を取り込んでおります。よりリアルに表現できるように、地球と月に影をつけてみましょう。このアセットにはMask(マスク=影)が用意されていますので、これまでの手順と同じ要領で素材を取り込みます。だいぶユニティの操作にも慣れてきましたかね?私も画像の作成になれてきました。
⑩Mask は惑星の手前に表示させます。エディタのSortingLayerで「PlanetMask」という新たなレイヤーを「Planet」の下に作ります。今回追加したMaskにセットします。
⑪これまでと同様の手順で、「BackGround」の子要素として配置します。
⑫続いて位置を調整します。惑星と同じ場所、大きさを指定するとピッタリ合うはずです。さらに、TransformコンポーネントのRotationのZ軸を調整することで、影の角度を指定することができます。Z軸とは画面の手前から画面の奥に向かう軸です。この軸を中心に回転させるということですね。
さてここまでで背景ができたわけですが、いったん動かしてみましょう。イメージ通り動きましたかね?
ここまでは、Unityの操作という感じで、プログラミングの要素があまりありませんでした。最後はプログラミングの学習を行いましょう。
「PlanetContoroller.cs」というC#スクリプトファイルを作成します。
スクリプトファイルに以下のコードを記述してください。
public class PlanetsController : MonoBehaviour
{
public float rotateSpeed; //回転速度(オブジェクト側から指定)
void Update()
{
transform.Rotate(new Vector3(0, 0, rotateSpeed));
//Z軸中心として回転
}
}
前回は ransform.position を使ってオブジェクトの場所を変化させましたが、今回は transform.Rotate でオブジェクトの角度を更新しています。
手本では地球の他に、もっと大きい惑星にもこのスクリプトファイルをセットしています。2つの惑星のスピードが同じでは面白くないので、変数を使ってUnityのオブジェクト側から値を変更できるように、変数のアクセス修飾子に Public を指定しています。
下の図で見ていきます。
⑬作成した「PlanetContoroller.cs」を動かしたいオブジェクトにアタッチします。
さらにアタッチしたオブジェクトのinspector、「PlanetContoroller.cs」の変数「rotateSpeed」に適当な値をセットします。手本では0.003を代入しています。必要に応じ、他のオブジェクトにも同様の処理を施します。
⑭これでユニティを動かしてみましょう。セットしたオブジェクトが回転しているのがわかると思います。
今回はここまで。
次回はいよいよ、プレイヤーを作っていきますよ。
教室では実際に通って頂いての授業の他、オンライン授業も行っています。
ご興味がある方は、ぜひお問い合わせ、または体験授業にお問い合わせください!
お問い合わせは こちら から。
体験授業のお申込みは こちら から。
Comments