LoginSignup
14
11

More than 5 years have passed since last update.

[Unity] Rayが当たっている位置に貼りつくように画像を表示する

Posted at

  この記事の内容は、Unity 5.4.1以降で動作を確認しています。

内容

 VRアプリで多用するRayを見やすくする方法の一つになると思います。

Raymanager.cs
public class RayManager : MonoBehaviour {

    //Rayの基本設定用
    public GameObject dive_Camera; //(VR用カメラとして使用させてもらっています)
    public GameObject reticle; //表示したい画像をアタッチ
    Vector3 defaultPos;
    Quaternion defaultRotation;
    public float rayDistance;

    void Start () {
        //Rayの初期化設定
        defaultPos      = reticle.transform.localPosition;
        defaultRotation = reticle.transform.localRotation;
    }

    void Update () {
        //Rayの射出(VR用にdive_Cameraを使用しているがRayを生成すれば何でもよい)
        Ray ray = new Ray(dive_Camera.transform.position, dive_Camera.transform.rotation * Vector3.forward);
        RaycastHit hit;

        //Rayが当たっているときの処理
        if (Physics.Raycast(ray, out hit, rayDistance)) {
            //Rayの可視化(デバッグ用)
            Debug.DrawLine(dive_Camera.transform.position, hit.point, Color.red);
            Debug.DrawRay(hit.point, hit.normal, Color.green);


            //Rayの位置・動作を決める部分
            reticle.transform.rotation = Quaternion.LookRotation(hit.normal);
            reticle.transform.position = hit.point + (hit.normal * hitRayPosition); //hitRayPosition は画像が当たった対象にめり込まない程度に設定する

            //略
        }
        //デフォルトのRayの位置
        else {
            reticle.transform.localPosition = new Vector3(0, 0, defaultPos.z);
            reticle.transform.localRotation = defaultRotation;
        }
    }
}

 タイトル回収に重要なのはreticle.transform.rotationの部分です。↓のように書くことで、画像の表れ方に味を加えることもできます。

reticle.transform.rotation = Quaternion.Slerp(reticle.transform.rotation, Quaternion.LookRotation(hit.normal), Time.deltaTime * 10.0f); 

 ↓のような動作になります。

 貼りつくRay.gif

 Rayの当たった位置にオブジェクトを生成する場合などにも使用できるので、試してみてください。

参考

(http://answers.unity3d.com/questions/16952/instantiate-based-on-raycasthitnormal.html)
(https://docs.unity3d.com/ja/current/ScriptReference/RaycastHit-normal.html)
(https://docs.unity3d.com/ja/current/ScriptReference/Quaternion.LookRotation.html)

14
11
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
14
11