クリアメモリ

プログラミングやモーショングラフィックス、便利なアプリケーションなど雑多に記録するブログ

Unity|ホーミング(追従)するオブジェクトの作り方

f:id:clrmemory:20170422162815p:plain 

アクションゲームや、RPGを作っているとホーミングするオブジェクトを作りたくなります。

そのような時に、簡単にホーミングするオブジェクトを作る方法を紹介します。

 

今回は「ホーミングするオブジェクトからプレイヤーが逃げる」という処理を作成しました。

では、早速追従するオブジェクトの作り方に入ります。

 

 

はじめに

 

今回使うオブジェクトは以下のようなものになっています。

(ロケットがプレイヤー、光球が追従オブジェクト)

 

スクリーンショット 2015-12-12 2.46.28

 

一定速度でプレイヤーを追いかけるというような処理になっています。

このような追従するオブジェクトを簡単に作れます。

 


2015/12/23追記

 

追従するオブジェクトがわかりやすいように動画を撮影しました。

これを見ると、ホーミングしているのがわかりやすくなると思います。

 


 

 

光球はUnityのParticle Systemを使っています。Unity > Assets > Import Package > ParticleSystemから導入してください。

 

次に、ホーミングするオブジェクトに追加するコードを作成します。

 

追従させるコード

 

まず以下のようなコードを作成してください。

 

using UnityEngine;
using System.Collections;

public class Homing : MonoBehaviour {

    GameObject Player;
    GameObject homingObj;
    public float Speed;

    // Use this for initialization
    void Start () {
        Player = GameObject.Find ("Player");
        homingObj = GameObject.Find ("Homing");
    }

    // Update is called once per frame
    void Update () {
        this.transform.position = Vector2.MoveTowards (this.transform.position,new Vector2(Player.transform.position.x, Player.transform.position.y), Speed * Time.deltaTime);
    }
}

 

基本的にはプレイヤーとホーミングのオブジェクトを取得した後、Vector2.MoveTowardsで追従させています。

 

MoveTowardsの引数は

(移動させるオブジェクトの座標, 目標になるオブジェクト(ポイント)の座標, 追従する速度 * Time.deltaTime);

というようになっています。

 

 

自分の処理に合わせて変更してみてください。 私の場合、追従するオブジェクトの速度は2.0fに指定しました。

また、追従するオブジェクトに「Trail Renderer」を追加しておくと、進んだ軌道が残るようになってホーミングっぽくなるかもしれません。

 

注意点としては、今回作成したホーミングオブジェクトはParticleSystemなので、背景の後ろに回ってしまったり、「Trail Renderer」の方が上に描画されてしまう可能性があります。

そのような時はSorting Layerを変更する方法を参考にしてParticle SystemのSorting Layerを変更してみてください。

 

https://clrmemory.com/unity/text-sortinglayer-change/

 

まとめ

 

この方法を使えば、簡単に追従するオブジェクトを作成することができました。

今回、実際の動作がわかりにくいかもしれないので、後日ホーミングが実装されているステージの動画を追記したいと思います。

 


2015/12/23追記:

 

冒頭で動画の紹介をしています。

 


 

 

UnityでのParticle Systemはとても使いやすく、綺麗に仕上がるので是非使いこなしてみてください。

 

ではまた。