強火で進め

このブログではプログラム関連の記事を中心に書いてます。

マウスカーソルでオブジェクトを選択


今回のサンプルではマウスカーソルの位置に存在するオブジェクトをチェックし、オブジェクトが存在する場合はそのオブジェクトをちょっと大きくするサンプルとなります。

マウスカーソルでオブジェクトを選択には以下の様に Physics.Raycast() を使って行います。

【SelectedWithMouseScript.js】

static var selectedGameObject : GameObject;

function Update () {
  var ray : Ray;
  var hit : RaycastHit;
  ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  if (Physics.Raycast(ray, hit, 100)) {
    selectedGameObject = hit.collider.gameObject;
  } else {
    selectedGameObject = null;
  }
}

Camera.main.ScreenPointToRay() でマウスカーソルの位置からカメラに表示された画面の奥方向へのRayを取得します。
Physics.Raycast(ray, hit, 100) では取得したRayの値(=ray)、Rayと衝突したオブジェクトの情報(=hit)、Rayの距離(=100)を指定しています。

Rayとは指定の向きへレーザー光線を放つ様なイメージです。今回 Physics.Raycast() で指定した距離(=100)はそのレイザー光線がどこまで届くかを指定しています。

Cubeに追加してあるスクリプト CubeScript.js では選択された GameObject が自分自身の場合はスケールを1.2に変更しています。これにより選択された(Rayと衝突した)オブジェクトはちょっと大きく表示されます。

【CubeScript.js】

function Update () {
	if (this.gameObject == SelectedWithMouseScript.selectedGameObject) {
		transform.localScale = Vector3(1.2, 1.2, 1.2);
	} else {
		transform.localScale = Vector3(1, 1, 1);
	}
}

今回のサンプルはこちらで試せます。

ソースファイルはこちら