3D空間の中で、全方向に向かって発射できる仕組みを作りましょう。
今回はなるべくスクリプトを書かず、Third Person Controllerを利用した方法をご紹介します。
マウスカーソルの動きを追って、カメラを360度方向転換させ、クリックでボールを発射します。
関連記事:
定位置からボールを発射させるしくみ
マインクラフトのようなプレーヤー操作
ドラッグした方向へ飛ばす
弾が消えなければ次を撃てなくする
マウスカーソルを追って360度回転するカメラ
MainCameraの回転量をドラッグで変える
360度マウスカーソルを追うMainCamera
アセットストアから、Third Person Controllerをのフリーバージョンをインポートします。
Third Person Controller - Basic Locomotion FREE
Assetsの中に、ダウンロードデータが追加されています。
MainCameraのチェックを外します。
Assets > Invector-3rdPersonController_LITE > Prefabs を開きます。
この中の、vThirdPersonCamera_LITEを、ヒエラルキーにドラッグ&ドロップしましょう。
これがMainCameraの代わりに使用するカメラになります。
位置と回転を0にリセットします。
X MouseSensitivityと、Y MouseSensitivityは、マウスカーソルの回転感度になります。
操作性に応じて、調整しましょう。
続いて、ThirdPersonController_LITEをヒエラルキーにドラッグ&ドロップします。
こちらも位置と回転を0にリセットします。
今回は、キー操作で人物3Dモデルを動かせないようにしますので、位置を固定しておきます。
CupsuleColliderのチェックを外します。
人物のオブジェクトは表示させたくないので、Mesh_LODのチェックを外します。
このように、人物の3Dモデルだけが、非表示になっています。
ボール発射のスクリプト
Spereオブジェクトを作成し、リジッドボディを追加します。
Sphereをプロジェクトにドラッグ&ドロップして、プレハブ化します。
Sphereの元データは削除しておきます。
BallShot.csを作成して、ThirdPersonController_LITEに追加します。
BallShot.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BallShot : MonoBehaviour { [SerializeField] GameObject prefab; void Update() { if(Input.GetMouseButtonDown(0)) { GameObject ball = Instantiate(prefab); Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); ball.GetComponent<Rigidbody>().AddForce(ray.direction * 3000); } } } |
プレハブのフィールドに、Sphereのプレハブデータを追加します。
ゲームプレイして動きを確認しましょう。
マウスカーソルを動かしながら、クリックで全方位に向けて発射します。
ScreenPointToRay(Input.mousePosition)では、カーソルの座標に向けて、ray(光線)を飛ばしています。
rayの方向情報を取得して、そこに向けてPrefabを飛ばします。
関連記事:
定位置からボールを発射させるしくみ
マインクラフトのようなプレーヤー操作
ドラッグした方向へ飛ばす
弾が消えなければ次を撃てなくする
マウスカーソルを追って360度回転するカメラ
MainCameraの回転量をドラッグで変える