Raycastの始点を、オブジェクトのマイナスの位置にしてみましょう。
今回の例では、Z座標-0.5のところから、前方に向けて5.0の長さでRayを出します。
Rayに触れると、Sphereオブジェクトが削除されます。
関連記事:
クリックで飛ばしたRayを貫通させる
Rayが当たった位置までの距離
オブジェクトに向けてRaycastを出し続ける
斜めに向けたRaycastで衝突判定
左右にRaycastの接触判定をつくる
Raycastをオブジェクトより手前から出す
Cubeを作成します。
RayLine.csを作成し、Cubeに追加します。
RayLine.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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class RayLine : MonoBehaviour { private float rayLength; private Vector3 myPosition; void Start() { rayLength = 5.0f; myPosition = this.transform.position; } void Update() { Vector3 rayPosition = myPosition + new Vector3(0.0f, 0.0f, -1.0f); Ray ray = new Ray(rayPosition, transform.forward); Debug.DrawRay(rayPosition, transform.forward * rayLength, Color.red); RaycastHit hit; if(Physics.Raycast(ray, out hit, rayLength)) { if (hit.collider.name == "Sphere") { Destroy(hit.collider.gameObject); } } } } |
ゲームプレイしてみると、DrawRayによって、Ray光線のイメージが確認できます。
しかしこれは、ただイメージとして、Rayがオブジェクトを貫通して見えているに過ぎません。
実際には、Cube自体にぶつかった位置で、Rayは止まっています。
Cubeの「BoxCollider」のチェックを外せば、実際にRayがオブジェクトを貫通するようになります。
次にプレーヤーとしてSphereを作成します。
Z方向動かして、Cubeから距離をとります。
Sphereを動かすためのスクリプトを作成しましょう。
BallMove.csを作成して、Sphereに追加します。
BallMove.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BallMove : MonoBehaviour { void Update() { float moveX = Input.GetAxis("Horizontal") * Time.deltaTime * 3; float moveZ = Input.GetAxis("Vertical") * Time.deltaTime * 3; transform.position = new Vector3 ( transform.position.x + moveX, 0, transform.position.z + moveZ ); } } |
ゲームプレイして、十字キーでSphereを操作。
RayCastにぶつかると、Sphereが消えます。
関連記事:
クリックで飛ばしたRayを貫通させる
Rayが当たった位置までの距離
オブジェクトに向けてRaycastを出し続ける
斜めに向けたRaycastで衝突判定
左右にRaycastの接触判定をつくる