LoginSignup
4
4

More than 5 years have passed since last update.

Unityでオブジェクトをrayが当たった方向に向ける

Last updated at Posted at 2016-07-07

この記事では、Rayがあたった方向にキャラクターなどを向かせる方法を紹介します。

手順

1.Rayの発生源となるオブジェクトとRayをあてるオブジェクトを用意する
2.新しくスクリプトを作って発生源となるオブジェクトにつける
3.Rayを生成するスクリプトを書く
4.Rayの方向に向かせるスクリプトを書く

1 Rayの発生源となるオブジェクトとRayをあてるオブジェクトを用意する

bandicam 2016-07-07 18-48-02-491.jpg
今回はこのようなステージを作りました。
判別のため、CubeとCapsuleには「Enemy」というタグをつけています。

2 新しくスクリプトを作って発生源となるオブジェクトにつける

ProjectウィンドウのCreateからC#スクリプトを新しく作成します。
それを、HierarchyにあるRayの発生源となるオブジェクト(今回はUnityちゃん)にドラッグ&ドロップでくっつけます。

3 Rayを生成するスクリプトを書く

2で作ったスクリプトに、以下のようなコードを書きます。


void Update()
{
    raytest();

}
//Rayを生成する関数
void raytest()
{

      RaycastHit hit;
      Ray ray;
      int distance = 3;
      ray = new Ray(transform.position + new Vector3(0, 0.3f, 0), transform.forward); 

      if (Physics.SphereCast(ray, 2, out hit, distance))
      {
          Debug.DrawLine(ray.origin, hit.point, Color.red);
      }
}

わかりやすいように赤い線が出るようにしているほか、Rayがあたる面積を広げるためSphereCastを使用しています。
また、SDUnityちゃんはデフォルトだとRayの発生源が足元になってしまうので、Vector3の値を足して発生源に位置を上げています。

4 Rayの方向に向かせるスクリプトを書く

Enemyというタグが付いているオブジェクトにRayが当たっている時、クリックすると今Rayが当たっている方向を向くコードを、以下のように書きます。

if (Physics.SphereCast(ray, 2, out hit, distance))
{
     //デバッグ用の赤い線を引く
      Debug.DrawLine(ray.origin, hit.point, Color.red); 

   //クリックされた場合
      if (Input.GetMouseButtonDown(0))
      {
     //当たったオブジェクトのタグがEnemyだった場合
          if (hit.collider.tag == "Enemy")
          {
             //Unityちゃんから見たRayが当たった場所の角度分y軸を中心に回転する
              var newRotation = Quaternion.LookRotation(hit.point - transform.position).eulerAngles;
              newRotation.x = 0;
              newRotation.z = 0;
              transform.rotation = Quaternion.Euler(newRotation);
           }

       }
}

これを実行すると

k.gif

Unityちゃんがぴょこんとオブジェクトのほうを向いたのがわかると思います。

参考サイト

ゲームは初心者にやさしく AI開発&クォータニオン入門~3.敵キャラをプレイヤーに向かせる

imageLicenseLogo.png
このコンテンツはユニティちゃんライセンス条項の元に提供されています

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4