3D オブジェクトがクリックされたかどうか検出する方法として、よくあげられているのは Ray を飛ばす方法ですが、実は uGUI と同じ方法でもクリックを判定することが出来ます。
unity 4.6 以前は Ray を飛ばす方法しかなかったようです。さすがに今、4.6 を現役で使用しているプロジェクトはないと思いますが…。
EventSystem を配置する


カメラに Physics Raycaster を追加する

クリック判定するオブジェクトに、以下のスクリプトを張り付ける
using UnityEngine;
using UnityEngine.EventSystems;
public class ClickObject: MonoBehaviour, IPointerClickHandler, IPointerEnterHandler, IPointerExitHandler
{
// クリックイベント
public void OnPointerClick(PointerEventData eventData)
{
gameObject.transform.eulerAngles = new Vector3(60, 0 0);
}
// マウスカーソルが Cube を差した
public void OnPointerEnter(PointerEventData eventData)
{
gameObject.transform.eulerAngles = new Vector3(0, 30 0);
}
// マウスカーソルが Cube から外れた
public void OnPointerExit(PointerEventData eventData)
{
gameObject.transform.eulerAngles = new Vector3(0, 0 0);
}
}
実行する
マウスカーソルをキューブに合わせたり、クリックすると回転します。
特定の3Dオブジェクトのみ判定しない
uGui の Raycast Target のように、特定の 3D オブジェクトだけ反応させたい場合、Physics Raycaster の Event Mask を 反応させたいレイヤー のみチェックします。
もちろん、全く反応させたくない場合 None を選べば OK です。
処理速度は Ray より速い、らしい? 必要があれば各自確認してください。
uGUI と同じインターフェイスが 3D で使えるのは便利なので、速度リスクがなければこちらに軍配があがるかな、と(勝手に)思っています。
(昔から unity 使ってる人は、慣れてる Ray を使うだろうとも思う)




