前回までで実機が弾を発射するところまでできました。しかし、どれだけ弾を撃っても当てる物がなければ空しいものです。
動く敵機を作る
敵機のスプライトを召喚する
メニューから
→ → → を選びます。自機を召喚したときと同じです。はい出ました!
これだと自機と紛らわしいので、向きを変えます。インスペクタでZ軸を180°回転します。


すると向きが上下逆になります。
このゲームオブジェクトは名前をEnemyと名付けます。
リジッドボディを取り付ける
これもスクリプトから動かしますので、2Dリジッドボディを付けておきます。メニューから
→ → です。敵機のスクリプトを作成する
今度は敵機のスクリプトを作成します。Scriptsフォルダを開いて、何もないところで右クリックし、 → を選びます。できたスクリプトの名前はEnemyにします。これを開きます。
using UnityEngine;
public class Enemy : MonoBehaviour
{
// Start is called once before the first execution of Update after the MonoBehaviour is created
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
おなじみのコードができました。早速取り付けましょう。

実行すると・・・。

リジッドボディの重力設定をなくすのを忘れていました。インスペクタで
を0にして再度実行。
今度は落ちなくなりました。次にスクリプトからリジッドボディの設定をできるようにします。
public class Enemy : MonoBehaviour
{
//このクラスの変数など
Rigidbody2D rb;
const float speed = 1f;
・・・
ここは、Bullet.csと同じですので、コピペしました。speedの初期値は変えていますが。次にStart関数の中身に次の行を追加しました。
void Start()
{
rb = GetComponent<Rigidbody2D>();
rb.linearVelocity = transform.up * speed;
}
Bulletの場合は、Vector2.up * speedだったものが、Enemyの場合はtransform.up * speedに変わっています。Vector2.upの場合は、オブジェクトがどのように回転していても画面の上の方を指していますが、transform.upは、オブジェクトの回転の向きに合わせて進行方向が変わります。つまり、オブジェクトが上を向いていれば上に進むし、下を向いていれば下に進みます。今回は、敵機が回転する仕様にしたいので、自分が向いている方向に進むようにしました。
ここまでのコードは以下の通りです。
using UnityEngine;
public class Enemy : MonoBehaviour
{
//このクラスの変数など
Rigidbody2D rb;
const float speed = 5f;
// Start is called once before the first execution of Update after the MonoBehaviour is created
void Start()
{
rb = GetComponent<Rigidbody2D>();
rb.linearVelocity = transform.up * speed;
}
// Update is called once per frame
void Update()
{
}
}
Enemyのプレハブを作る
ここまでできたら、Enemyもプレハブにしてしまいましょう。

Enemyの色を変える
向きが違うとしても、形も色も同じでは紛らわしいことこの上ないので、せめて色を変えましょう。
Enemyを選択します。インスペクタの の色を表す長方形を選択します。
フォルダの
赤を選択します。


Enemyのプレハブが赤になりました。ついでに、シーンに配置されているゲームオブジェクトも赤になりました。このようにプレハブの働きとして、プレハブに変更を加えると、そのプレハブを基にしているゲームオブジェクトもすべてその変更の影響を受けます。
せっかくなので、敵機を増やしましょう。シーンの上部に並べました。

これを実行してみます。

敵機が次々に下方向に向かって進んでいきます。
今回はここまでです。お疲れ様でした。
コメント