たくあんポリポリ

勉強したことを載せていきます。最近、技術系の記事はZennに書いています。(https://zenn.dev/chittai)

オブジェクトを向いている方向に真っ直ぐに飛ばす方法

敵が攻撃する時に、敵が向いている方向に対してまっすぐに攻撃を飛ばす方法です。

使用したツール / 環境

  • Unity 2017.3.1f1

やりたいこと

敵と言ってますが、それはゲームでの使用シーンを想定していたためで、今後は”オブジェクト”と表現することにします。このオブジェクトを”向いている方向”に動かします。オブジェクトが向いている方向というのがポイントです。

オブジェクトが向いている方向とは

下記ドキュメントにも記載があるのですが、特に意識しなければローカル軸に対しての移動となります。
docs.unity3d.com

f:id:c_taquna:20181208172202j:plain:w200
シーンビューだとこのようにオブジェクトから矢印がでていて、 赤→x軸、緑→y軸、青→z軸となっています。これはワールド軸になります。

オブジェクトの動かし方について

まず、デフォルト状態でZ軸方向への動かしてみましょう。

f:id:c_taquna:20181208172505g:plain:w200
z軸方向への移動

このコードを使用すればGIFのように進みます。

z軸方向への移動

void Update()
{
    this.transform.Translate(Vector3.forward * Time.deltaTime * speed);
}

speedは自分で設定してください。Vector3.forwardを指定することでz軸方向へ進んでいるので、x軸・y軸へ動かしたい場合は下記の様になります。

x軸方向への移動

void Update()
{
    this.transform.Translate(Vector3.right* Time.deltaTime * speed);
}

y軸方向への移動

void Update()
{
    this.transform.Translate(Vector3.up * Time.deltaTime * speed);
}

軸と違う方向に動かす方法

今、オブジェクトのRotationは下記の様になっています。
f:id:c_taquna:20181208173343j:plain:w550

これを変更します。
f:id:c_taquna:20181208174533j:plain

その上で、"Vector3.forward"を使用すると

f:id:c_taquna:20181208174750g:plain:w200

先程と違う方向に進んでいます。これは、ワールド軸ではなくローカル軸にそって動いているためです。このあたりを意識しないと思った方向に進まないとか起こるかもしれません。