横一列に並んだPrefabを、1秒おきに順番に発射できるように、スクリプトを作成しましょう。
クリックすれば、5個のSphereが一列に出現。
左から順に、1秒おきに発射されます。
関連記事:
前後左右へ順番にボール発射
複数地点から順番にPrefabを生成
3つのポジションから順番にPrefab生成
配列にある複数オブジェクトを一気に出す
着地していればジャンプ可能(Raycast)
左右にRaycastの接触判定をつくる
Sphereの左側にRayを出す
Sphereを作成し、リジッドボディを追加します。
SphereShot.csを作成し、Sphereに追加します。
SphereShot.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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class SphereShot : MonoBehaviour { private float force = 1; Rigidbody rb; private float rayDistance = 1.0f; void Start() { Vector3 rayPosition = transform.position; Ray ray = new Ray(rayPosition, Vector3.left); rb = GetComponent<Rigidbody>(); rb.isKinematic = true; } void Update() { Vector3 rayPosition = transform.position; Ray ray = new Ray(rayPosition, Vector3.left); bool isTouch= Physics.Raycast(ray, rayDistance); Debug.DrawRay(rayPosition, Vector3.left * rayDistance, Color.red); if(!isTouch) { Invoke("Shot", 1.0f); } } void Shot() { rb.isKinematic = false; rb.AddForce(0, 0, force, ForceMode.Impulse); } } |
Sphereをプロジェクトビューにドラッグ&ドロップし、Prefab化します。
Sphereの元データは削除しましょう。
横に並んだPrefabが順番に飛ぶ
続いて、ボール生成のプログラムを作りましょう。
空のオブジェクトを作成します。
Spawn.csを作成し、GameObjectに追加します。
Spawn.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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Spawn : MonoBehaviour { public GameObject ball; float distance; Vector3 pos; void Start() { pos = new Vector3(-5,0,0); distance = 1.5f; } void Update() { if(Input.GetMouseButtonDown(0)) { SpawnStart(); } } void SpawnStart() { for (int i=0; i<5; i++) { pos.x += distance; Instantiate(ball, pos, Quaternion.identity); } pos = new Vector3(-5,0,0); } } |
Ballのフィールドに、Sphereを入れます。
ゲームプレイしてみましょう。
クリックすると、横一列に5個のSphereを生成。
左側のSphereから順番に、前に向かって発射されます。
Sphereの左方向にRay(光線)を出しています。
Rayの照射が無い場合には、Shot()が実行されて、1秒おきに飛んでいく仕組みです。
関連記事:
前後左右へ順番にボール発射
複数地点から順番にPrefabを生成
3つのポジションから順番にPrefab生成
配列にある複数オブジェクトを一気に出す
着地していればジャンプ可能(Raycast)
左右にRaycastの接触判定をつくる