Ray


前回は実際に弾丸を飛ばしたが、目に見えないRay(光線)というのを飛ばす方法もよく用いられる。
今回はクリックした場所にRayを飛ばしてRayが衝突したコライダーを消すという処理を作ってみよう。

[作成手順]

画面にSphereを並べる

1.CreateEmptyから原点にSphereGeneratorを作成し、SphereGenerator.csを以下のように作成アタッチする。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SphereGenerator : MonoBehaviour {

	void Start () {
		for (int y = 0; y < 10; y++) {
			for (int x = 0; x < 10; x++) {
				GameObject obj = GameObject.CreatePrimitive (PrimitiveType.Sphere);
				obj.transform.position = new Vector3 ((float)x,(float)y,0f );
			}
		}	
	}
}

カメラの調整

2.下図のようにtransformを設定する。

3.実行してみよう。画面に100個のSphereが並べば成功だ。

カメラにスクリプトの付与

4.今回はカメラに直接スクリプトを付与する。Shooter.csを以下のように作成しカメラに付与する。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Shooter : MonoBehaviour {

	void Update () {
		if (Input.GetMouseButtonDown (0)) {
			//メインカメラからマウスクリックポイントまでのrayを作成
			Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
			//RaycastHit構造体宣言
			RaycastHit hit;
			//rayを距離100で照射して、colliderがあればtrueを返しその衝突したものの情報をhitにつめる。
			if (Physics.Raycast (ray,out hit, 100.0f)) {
				Destroy (hit.collider.gameObject);
			}
		}
	}
}

実行

5.実行してみよう。クリックしたところのSphereが消えれば成功だ。

[補足]
RaycastHit構造体が何を保持するかは公式サイトに全部出ている。見ておくこと
https://docs.unity3d.com/ja/540/ScriptReference/RaycastHit.html