Help us understand the problem. What is going on with this article?

【初心者の備忘録】オブジェクトAが、オブジェクトBを追いかける仕組みを作る

More than 3 years have passed since last update.

【流れ】
オブジェクトA(以下A)とオブジェクトB(以下B)を用意します。
分かりやすいようにAをSphere、BをCubeとします。

AにBを追いかけるスクリプトをアタッチします。
このスクリプトで、くだんのベクトルについての実装を行います。
また追いかけるオブジェクトをインスペクタから登録できるようにしておきます。
(処理を単純にするためです)

追いかける対象のオブジェクトとしてBを登録します。

あとは登録されたオブジェクトと自身との位置関係から、ベクトルの計算を行い、追いかける処理を実装します。

【調べもの】
Transform.rotation

Quaternion.Slerp

Unity - (クォータニオン版)特定方向を向くように、向きを変更する

Unity - オブジェクトを追いかける

【いつか理解したい】
UnityのベクトルとQuaternionによる回転について

UnityでRotation(Quaternion)をうまく使いたい

AI開発&クォータニオン入門~3.敵キャラをプレイヤーに向かせる

Quaternionクラスのメモ

コメントなし↓

public class chase : MonoBehaviour {

    public Transform target;
    public float speed = 0.1f;
    private Vector3 vec;


    void Start () {
        //target = GameObject.Find("対象").transform;
    }

    void Update () {
        transform.rotation = Quaternion.Slerp (transform.rotation, Quaternion.LookRotation (target.position - transform.position), 0.3f);
        transform.position += transform.forward * speed;
    }
}

コメント入り↓

public class chase : MonoBehaviour {

    public Transform target;//追いかける対象-オブジェクトをインスペクタから登録できるように
    public float speed = 0.1f;//移動スピード
    private Vector3 vec;

    void Start () {
        //target = GameObject.Find("対象").transform; インスペクタから登録するのでいらない
    }

    void Update () {
        //targetの方に少しずつ向きが変わる
        transform.rotation = Quaternion.Slerp (transform.rotation, Quaternion.LookRotation (target.position - transform.position), 0.3f);

        //targetに向かって進む
        transform.position += transform.forward * speed;
    }
}

Quaternion.LookRotation(ベクトルA - ベクトルB);
で、ベクトルBの地点から見て、ベクトルAの方向を取得することができる。少しずつ向きを変えたいので
Quaternion.Slerp(from, to, t);
を使う。fromからtoに方向がt時間で変わる。tの値が小さいと少しずつ、マックス1.0でいきなり(Quaternion.LookRotationと同じ)変わる。
toの部分にQuaternion.LookRotation(ベクトルA - ベクトルB)を入れる。
向きが変わったらtransform.forwardでオブジェクトが向いている方向(前面)のベクトルが取れる。ベクトルの大きさは普通に実数を掛け算することで変更できるので速度と掛けあわせてpositionに足していく。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away