【Unity】Rayを使って照準の色を変える【シューティング】


Rayを使って照準の色を変える


今回はRayを使った照準の色が変わる処理のサンプルです。
照準の方向にRayを飛ばして、対象オブジェクトの情報を取得します。

© Unity Technologies Japan/UCL

※使用しているUnityのバージョンは2017.1.0f3です。

Rayとは


Rayとは、ある点から光線を飛ばし、それにぶつかったGameObjectの情報を取得することができる機能です。

下図は視点の位置にあるカメラからRay(赤線のやつ)を飛ばしている状況です。
Rayが交差した状態を、RayがHitしたと言います。
Unity Ray

Debug.DrawRayメソッドを使うと、再生時にSceneビューでRayを可視化できます。

Rayの使い方のサンプルスクリプト


下記のスクリプトを、Rayを飛ばす位置にあるオブジェクトに適用します。
今回は主観視点のカメラに適用しています。

using UnityEngine;
using UnityEngine.UI;

public class Aim : MonoBehaviour {

	// 照準のImageをインスペクターから設定
	[SerializeField]
	private Image aimPointImage;

	void Update () {

		// Rayを飛ばす(第1引数がRayの発射座標、第2引数がRayの向き)
		Ray ray = new Ray (transform.position, transform.forward);

		// outパラメータ用に、Rayのヒット情報を取得するための変数を用意
		RaycastHit hit;

		// シーンビューにRayを可視化するデバッグ(必要がなければ消してOK)
		Debug.DrawRay(ray.origin, ray.direction * 30.0f, Color.red, 0.0f);

		// Rayのhit情報を取得する
		if (Physics.Raycast(ray, out hit, 30.0f)) {

			// Rayがhitしたオブジェクトのタグ名を取得
			string hitTag = hit.collider.tag;

			// タグの名前がEnemyだったら、照準の色が変わる
			if ((hitTag.Equals("Enemy"))) {
				//照準を赤に変える
				aimPointImage.color = new Color(1.0f, 0.0f, 0.0f, 1.0f);
			} else {
				// Enemy以外では水色に
				aimPointImage.color = new Color(0.0f, 1.0f, 1.0f, 1.0f);
			}
					
		} else {
			// Rayがヒットしていない場合は水色に
			aimPointImage.color = new Color(0.0f, 1.0f, 1.0f, 1.0f);
		}
	}
}

Ray ray = new Ray()でRayを生成します。
第1引数)Rayを飛ばす位置を指定。
第2引数)Rayを飛ばす向きを指定。

Rayのヒット情報はPhysics.Raycast()で取得します。
このメソッドは指定したRayが何らかのオブジェクトにヒットするとtrueを返します。
ヒットしたオブジェクトの情報は、第2引数のoutの変数に取得されます。
第1引数)生成したRayの指定。
第2引数)outパラメータを付与したRaycastHit型の変数を指定。
第3引数)Rayがヒットしたとみなす最大距離をfloat型で指定。

Rayがヒットしたオブジェクトのタグは、hit.collider.tag で取得できます。
レイヤーであれば、hit.collider.gameObject.layer で取得できます。

タグやレイヤーが取得できたら、分岐処理でイメージの色を変更しましょう。

以上です。

今月の新着記事

【Unity】Unable to parse YAML fileエラーの直し方
【知っておいた方がいい】UnityでWebGLにビルドできないエラーの対処法
【解けないとマズい練習問題】C# 練習問題 9

記事一覧にもどる

  • このエントリーをはてなブックマークに追加

PAGE TOP