クリックした位置から真っすぐに、ボールを発射できるしくみをつくってみましょう。
ボールの生成と、ボールに力を加える、2つのスクリプトを組み合わせて作成します。
関連記事:
クリック位置によって飛ばす方向を変える
移動と発射・MainCamera追従を組合わせる
キャラクターコントローラーに発射機能
弾が消えなければ次を撃てなくする
ボールに力を加える
まずは1つ、色つきのSphereを用意します。
プロジェクトにドラッグ&ドロップして、プレハブを作成しましょう。
ヒエラルキーの元データは削除しておきましょう。
空のオブジェクトを作成します。
GameObjectができました。
ボールに力を加えるために、スクリプトを作成します。
スクリプト名は、SphereMove.csとしました。
これを、Sphereのプレハブに追加しましょう。
Sphereのプレハブを選択し、コンポーネントを追加 > スクリプト > SphereMove
リジッドボディも追加します。
コンポーネントを追加 > 物理 > リジッドボディ
SphereMove.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 SphereMove : MonoBehaviour { public float force = 1.0f; public Rigidbody rb; void Update() { rb = GetComponent<Rigidbody>(); rb.AddForce(0, 0, force, ForceMode.Impulse); } } |
もう一度、Sphereプレハブを見てみると、Forceのフィールドが出来ていて、1が入っています。
この数値を変えると、ボールの威力が変わります。
クリックした場所にボールを生成
続いて、ボールを生成するスクリプトをつくります。
名前はGameManager.csとしました。
これは、GameObjectに追加しましょう。
GameManager.csのコードを書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class GameManager : MonoBehaviour { public GameObject bullet; private Vector3 mousePosition; void Update() { if (Input.GetMouseButtonDown(0)) { mousePosition = Input.mousePosition; mousePosition.z = 10.0f; Instantiate(bullet, Camera.main.ScreenToWorldPoint(mousePosition),Quaternion.identity); } } } |
GameObjectのインスペクターを確認しょう。
Bulletのフィールドができていますので、ここにSphereプレハブをドラッグ&ドロップします。
ゲームプレイしてみましょう。
マウスクリック位置を検出して、ワールドポイントでボール生成。
生成されたボールに力が加わり、Z方向に発射されます。
関連記事:
クリック位置によって飛ばす方向を変える
移動と発射・MainCamera追従を組合わせる
キャラクターコントローラーに発射機能
弾が消えなければ次を撃てなくする