前方にむけてRay(光線)を出して照準として利用します。
プレーヤーが回転すれば、Raycastも一緒に回転。
ここに触れると、相手オブジェクトのマテリアルを切り替えるスクリプトを実行します。
ターゲットを捉えているかどうか、照準の判定に利用できそうな仕組みです。
関連記事:
向いている方向へRaycastを出す
Raycastによる特定オブジェクトの接触判定
斜めに向けたRaycastで衝突判定
割り当てたキーでアクティブ状態にする
ゆっくり元のカラーに戻す
マウスカーソルを重ねると実行
Rayを使ってマテリアルカラーを取得
Ray照射の当たり判定をつくる
PlaneとCubeを作成します。
Cubeには色をつけ、位置を変更します。
CubeMove.csを作成し、Cubeに追加します。
CubeMove.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeMove : MonoBehaviour { private float rayDistance; public bool lockOn; public static CubeMove instance; public void Awake() { if(instance == null) { instance = this; } } void Start() { rayDistance = 50.0f; lockOn = false; } void Update() { var direction = transform.forward; Vector3 rayPosition = transform.position + new Vector3(0.0f, 0.0f, 0.0f); Ray ray = new Ray(rayPosition, direction); Debug.DrawRay(rayPosition, direction * rayDistance, Color.red); RaycastHit hit; if(Physics.Raycast(ray, out hit, rayDistance)) { if (hit.collider.name == "Sphere") { lockOn = true; } else { lockOn = false; } } else { lockOn = false; } if(Input.GetKey("up")) { transform.position += transform.forward * 0.03f; } if(Input.GetKey("down")) { transform.position += transform.forward * -0.03f; } if(Input.GetKey("right")) { transform.Rotate(0,1,0); } if(Input.GetKey("left")) { transform.Rotate(0,-1,0); } } } |
続いて、Sphereを作成し、位置を変えます。
シーンビューではこのように見えています。
ChangeColor.csを作成し、Sphereに追加します。
ChangeColor.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ChangeColor : MonoBehaviour { void Update() { if(CubeMove.instance.lockOn) { GetComponent<Renderer>().material.color = Color.red; } else { GetComponent<Renderer>().material.color = Color.white; } } } |
ゲームプレイして、Cubeを動かしてみましょう。
可視化したRayが、Sphereに触れると、Sphereが赤色に変わります。
Rayにぶつかれば、 lockOnのフラグがtrueに。
lockOnを、ChangeColor.csから参照して、マテリアルを切り替えています。
関連記事:
向いている方向へRaycastを出す
Raycastによる特定オブジェクトの接触判定
斜めに向けたRaycastで衝突判定
割り当てたキーでアクティブ状態にする
ゆっくり元のカラーに戻す
マウスカーソルを重ねると実行
Rayを使ってマテリアルカラーを取得