飛んできたボールを保持して、それを投げ返す、キャッチボールのような仕組みを作ってみましょう。
前からボールが飛んできて、ぶつかれば、前方で保持。
スペースキーを押せば、発射元に向けて、投げ返すことができます。
関連記事:
自機狙い(プレーヤーに向けた)発射 -3Dゲーム
ターゲットに向かってオブジェクトをぶつける
親オブジェクトと子オブジェクトの取得
ボールを投げ返す
まずはプレーヤーとしてCubeを作成します。
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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeMove : MonoBehaviour { private float speed = 10.0f; void Update() { if (Input.GetKey (KeyCode.UpArrow)) { transform.position += transform.up * speed * Time.deltaTime; } if (Input.GetKey (KeyCode.DownArrow)) { transform.position -= transform.up * speed * Time.deltaTime; } if (Input.GetKey(KeyCode.RightArrow)) { transform.position += transform.right * speed * Time.deltaTime; } if (Input.GetKey (KeyCode.LeftArrow)) { transform.position -= transform.right * speed * Time.deltaTime; } if (Input.GetKey (KeyCode.W)) { transform.position += transform.forward * speed * Time.deltaTime; } if (Input.GetKey (KeyCode.S)) { transform.position -= transform.forward * speed * Time.deltaTime; } } } |
空のオブジェクト(GameObject)を作成し、奥の方へ移動します。
BallShot.csを作成し、GameObjectに追加します。
BallShot.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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BallShot : MonoBehaviour { public GameObject player; public GameObject ball; void Start() { transform.LookAt(player.transform); StartCoroutine("Shot"); } void Update() { transform.LookAt(player.transform); } IEnumerator Shot() { while (true) { var shot = Instantiate(ball, transform.position, Quaternion.identity); shot.GetComponent<Rigidbody>().velocity = transform.forward.normalized * 10.0f; yield return new WaitForSeconds(2.0f); } } } |
Sphereを作成し、リジッドボデイを追加。
SphereScript.csを作成し、Sphereに追加します。
SphereScript.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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class SphereScript : MonoBehaviour { public bool isRelese; public Rigidbody rb; GameObject cube; GameObject StartPoint; void Start() { isRelese = true; rb = GetComponent<Rigidbody>(); cube = GameObject.Find ("Cube"); StartPoint = GameObject.Find ("GameObject"); } void Update() { if (Input.GetKeyDown(KeyCode.Space)) { if(!isRelese) { transform.parent = null; isRelese = true; rb.velocity = StartPoint.transform.position.normalized * 10.0f; } } } void OnCollisionEnter(Collision col) { if (col.gameObject.name == "Cube") { isRelese = false; rb.velocity = Vector3.zero; transform.SetParent(cube.transform); } } } |
Sphereをプロジェクトビューにドラッグ&ドロップし、Prefabデータに変換。
Sphereの元データは削除しておきます。
GameObjectを選択し、それぞれのフィールドにオブジェクトを入れましょう。
ゲームプレイしてみましょう。
2秒おきにボールが飛んできて、ぶつかれば親子関係をつくってボールをキャッチ。
スペースキーを押せば、ボールの発射位置めがけて、投げ返します。
関連記事:
自機狙い(プレーヤーに向けた)発射 -3Dゲーム
ターゲットに向かってオブジェクトをぶつける
親オブジェクトと子オブジェクトの取得