キャラクターコントローラーを使った動きに加えて、発射のしくみを実装してみましょう。
WASDキーで移動、スペースキーでジャンプ、クリックするとボールを発射します。
関連記事:
移動と発射・MainCamera追従を組合わせる
CharacterController.Moveによるジャンプ移動
徐々に加速、減速する自然な動き
CharacterControllerの衝突判定
CharacterController.Moveで動かす
平面オブジェクトとCubeを作成して、カラーをつけました。
Cubeにキャラクターコントローラーを追加します。
コンポーネントを追加 > 物理 > キャラクターコントローラー
Box Colliderは必要ないので、チェックを外しておきましょう。
PlayerMove.csを作成し、Cubeに追加します。
PlayerMove.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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMove : MonoBehaviour { public float speed = 6.0f; public float jumpSpeed = 8.0f; public float gravity = 20.0f; private Vector3 moveDirection = Vector3.zero; private CharacterController controller; void Start() { controller = GetComponent<CharacterController>(); } void Update() { if (controller.isGrounded) { moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0.0f, Input.GetAxis("Vertical")); moveDirection = transform.TransformDirection(moveDirection); moveDirection = moveDirection * speed; if (Input.GetButton("Jump")) { moveDirection.y = jumpSpeed; } } moveDirection.y = moveDirection.y - (gravity * Time.deltaTime); controller.Move(moveDirection * Time.deltaTime); } } |
プレイして動きを確認しましょう。
WASDキー(十字キー)で移動、スペースキーでジャンプ。
キャラクターコントローラーとMove()の記述で、まずはプレーヤーの動きは出来上がりました。
ボールの発射位置をつくる
次に、クリックでボール発射する仕組みをつくりましょう。
動いている間にボールを発射するには、キャラクターの前でボールを生成しなければなりません。
空のオブジェクトを作成します。
GameObject(空のオブジェクト)を、CubeのZ方向側の前方に配置します。
上から見たGameObject(空のオブジェクト)の位置。
ここがボールの発射位置になります。
GameObjectをドラッグ&ドロップで、Cubeの中に入れ、親子関係を取ります。
Ballのプレハブを用意
ボールのPrefabデータを用意します。
Sphereオブジェクトを作成し、名前Ballに変更。
黄色のマテリアルカラーをつけました。
BallをPrefab化します。
Ballの元データは削除しましょう。
Ballのプレハブデータにリジッドボディを追加し、重力を使用(UseGravity)はチェックを外します。
動いているキャラクターからのボール発射
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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BallShot : MonoBehaviour { public GameObject ballPrefab; public float speed; void Update () { if(Input.GetMouseButtonDown(0)) { Shot(); } } public void Shot(){ GameObject ball = (GameObject)Instantiate(ballPrefab, transform.position, Quaternion.identity); Rigidbody ballRigidbody = ball.GetComponent<Rigidbody>(); ballRigidbody.AddForce(transform.forward * speed); } } |
GameObjectのインスペクターを確認します。
BallPrefabのフィールドには、Ballのプレハブを入れます。
速度フィールドは1000にしました。
ゲームプレイしてみましょう。
移動しながらクリックして、ボール発射できていればOKです。
関連記事:
移動と発射・MainCamera追従を組合わせる
CharacterController.Moveによるジャンプ移動
徐々に加速、減速する自然な動き
CharacterControllerの衝突判定