【Unity】Rayを使って照準の色を変える【シューティング】
Rayを使って照準の色を変える
今回はRayを使った照準の色が変わる処理のサンプルです。
照準の方向にRayを飛ばして、対象オブジェクトの情報を取得します。
© Unity Technologies Japan/UCL
※使用しているUnityのバージョンは2017.1.0f3です。
[Unity_317×90]
Rayとは
Rayとは、ある点から光線を飛ばし、それにぶつかったGameObjectの情報を取得することができる機能です。
下図は視点の位置にあるカメラからRay(赤線のやつ)を飛ばしている状況です。
Rayが交差した状態を、RayがHitしたと言います。
※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】3Dアクションゲームを作ろう!#7 ステージの作成(Skybox・落下判定)
▶
【Unity】3Dアクションゲームを作ろう!#8 ステージの作成(スイッチ・扉)
▶
【Unity】3Dアクションゲームを作ろう!#9 プレイヤーのHP管理
▶
【初心者Unity】JsonUtilityクラスでJSONを扱う方法
▶
【初心者Unity】スクリプトからコンポーネントを追加する方法
ゲーム制作関連のオススメ連載リンク
とっても手軽なゲーム制作体験!
Unityゲーム開発基礎
実際のリリースゲームを題材にしたハンズオンゲーム制作連載
実践unityゲーム開発