Unity入門:Raycastで画面クリック、タッチでオブジェクトを操作する

Unityで特にスマフォ向けにゲームを作った時によくやることは、

タッチ入力によって対象を選択したり、操作することです。

 

それを実現するにはRaycastメソッドを使うのが一番簡単であるので、

今回はRaycastを使った方法を解説したいと思います。

 

まずRaycastについてです。

 

Raycastとは任意の位置から任意の方向に向けて架空の線を出し、

その線分上にあるオブジェクトを取得するメソッドです。

 

そのため画面のタップでオブジェクトを選択するには、タップ座標から画面奥に線をだし

オブジェクトを選択するということです。

 

次に具体的な使い方を見ていきたいと思います。

今回はマウスでクリックした対象の名前を検出する例を用いて説明したいと思います。

 

下記が名前を検出するコードになります。

if(Input.GetMouseButtonDown(0)){
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit = new RaycastHit();

            if (Physics.Raycast(ray, out hit)) {
               String selectedGameObjectname = 
                hit.collider.gameObject.name;               
               Debug.log("name="+selectedGameObjectname);
            }
}

 

上記のコードを詳しく見ていきたいと思います。

if(Input.GetMouseButtonDown(0))

マウスで左ボタンをクリックしたときに呼び出さすようにしています。

 

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

まずこここではマウスのクリックしたスクリーン座標をrayに変換しています。

Input.mousePositionがマウスのクリックした座標を取得してくれます。

 

RaycastHit hit = new RaycastHit();

 

ここはRaycast当たったオブジェクトの情報を格納するためのクラスを

作成しています。

 

Physics.Raycast(ray, out hit)

ここがRaycastの部分です。上で宣言したhit,rayを引数にとっています。

 

オブジェクトにrayが当たるとtrueを返すのでif文の中に入れることで、

オブジェクトにあたった場合の挙動を指定することができます。

 

今回は名前を検出するので、hit.collider.gameObject.name

として当たったオブジェクトの名前を取得しています。

 

注意点としては検出したいオブジェクトにはColliderをつけなければならないことです。

 

このようにRaycastを使うことで簡単にtapした位置のオブジェクトを操作できるので、

これを使ってどんどんスマフォ向けゲームを作成していきたいですね。

 

以上Raycastを使って画面クリック、タッチでオブジェクトを操作する方法でした。