決まったゾーン(座標エリア)に、ランダムでボールを投げ込むスクリプトを作成してみましょう。
矩形エリアを決めて、この中のランダム位置に、ボールが発射されます。
ベースボールで、ストライクゾーンに投げる動きとして、活用できそうな仕組みです。
オブジェクトの用意
まずは、標的となるオブジェクトを作成しましょう。
Cubeを作成して名前をTargetに変更。
座標を変更して、ボックスコライダーのチェックを外します。
メインカメラも移動して、Targetが映りこむようにします。
続いて、ボールの発射位置をつくります。
空のオブジェクトを作成します。
名前をShotManagerに変更し、座標はすべて0で配置します。
シーンビューではこのような配置になっています。
次は、ボールのPrefabを作成します。
Sphereを作成し、名前をBallに変更。
リジッドボディを追加します。
Ballをプロジェクトビューにドラッグ&ドロップし、Prefabデータにします。
Ballの元データは消しておきます。
ボールを投げ込むスクリプト
まずは、ボール発射のスクリプトを作成していきましょう。
BallShot.csを作成し、ShotManagerに追加します。
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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BallShot : MonoBehaviour { public GameObject target; public GameObject ball; public float ballSpeed; void Start() { transform.LookAt(target.transform); } void Update() { transform.LookAt(target.transform); } public void BallThrow() { StartCoroutine("Throwing"); } IEnumerator Throwing() { var shot = Instantiate(ball, transform.position, Quaternion.identity); shot.GetComponent<Rigidbody>().velocity = transform.forward.normalized * ballSpeed; yield return new WaitForSeconds(1.0f); } } |
ターゲットにはTargetを、BallにはBallのプレハブを、BallSpeedには20を入力します。
標的がランダム移動するスクリプト
次は標的のスクリプトです。
標的が1秒おきにランダム移動し、移動のたびに、BallShotにボールを投げさせます。
TargetMove.csを作成し、Targetに追加しましょう。
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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class TargetMove : MonoBehaviour { private float time; private float vecX; private float vecY; private bool isShot; public GameObject shotManager; void Start() { isShot = false; } void Update() { time -= Time.deltaTime; if(time <= 0) { isShot = false; vecX = Random.Range(-2.0f, 2.0f); vecY = Random.Range(0.0f, 3.0f); this.transform.position = new Vector3(vecX, vecY, -10); time = 1.0f; if(!isShot) { shotManager.GetComponent<BallShot>().BallThrow(); isShot = true; } } } } |
ShotManagerのフィールドに、ShotManagerの入れます。
最後に、Targetを透明にします。
マテリアルを作成して、名前をToumeiに変更。
Rendering ModeをFadeに変更し、Aの値を0にします。
ToumeiマテリアルをTargetに付けます。
ゲームプレイしてみましょう。
Xが-2から2、Yが0から3の範囲内で、ターゲットが移動。
移動するたびにBallThrow()を実行させ、ターゲットに向けてボールを発射します。
関連記事:
自機狙い(プレーヤーに向けた)発射 -3Dゲーム