今回は、キーボードの入力においてとりあえずボール等の球体をころころと転がしたいと思っている方向けにコントローラースクリプトの紹介です。
Unityで球体(Sphere)を「W」「S」「A」「D」キーで上下左右に動かせるコントローラースクリプトを作成します。このスクリプトは、簡単な入力制御と物理演算に基づいて動作します。
Unityで球体をキーで動かすコントローラースクリプトを実装する
- 新しいUnityプロジェクトを作成する
UnityHubで新しい3Dプロジェクトを作成します。 - 球体(Sphere)の作成
- ヒエラルキーで右クリックして 3DObject → Sphereを選択し、球体を作成します。
- 球体の名前を「Player」にしておきます。
- 物理演算を設定する
- 作成したオブジェクトにRigidbodyコンポーネントをアタッチします。
- スクリプトの作成
- 「Scripts」という名前のフォルダを作成し、その中に「SphereController.cs」という名前のスクリプトを作成します。
- 以下のコードをスクリプトに記述します。
PlayerController.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
using UnityEngine; public class PlayerController : MonoBehaviour { // 移動速度を調整する変数 public float moveSpeed = 5f; void Update() { // 入力を取得 float moveX = Input.GetAxis("Horizontal"); // A, Dキーでの左右移動 float moveZ = Input.GetAxis("Vertical"); // W, Sキーでの前後移動 // 入力に基づいて球体を移動 Vector3 movement = new Vector3(moveX, 0f, moveZ) * moveSpeed * Time.deltaTime; transform.Translate(movement, Space.World); } } |
コードの説明
Input.GetAxis(“Horizontal”) と Input.GetAxis(“Vertical”)で各キーの入力を取得します。
後は、入力に基づいて予め移動速度を設定しておいた変数とTime.deltaTimeを掛けます。
transform.Tlanslateにて現在の位置を基準にして、新しい位置を計算して移動します。
移動速度を変えたい際には、moveSpeedの値を調整してください。
スクリプトをアタッチしてゲームを実行
作成したスクリプトは、Playerオブジェクトにアタッチしてゲームを実行してみましょう。
恐らく、「W」「S」「A」「D」キーにてボールを移動させることが出来ると思います。
↑こんな感じでですね。
Rigidbodyを使用した改良版
最初のコードは瞬時に移動しますが、Rigidbody.AddForceを使用して物理ベースで動きをスムーズにすることもできます。
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 |
using UnityEngine; public class PlayerController : MonoBehaviour { public float moveSpeed = 5f; private Rigidbody rb; void Start() { // Rigidbodyを取得 rb = GetComponent<Rigidbody>(); } void FixedUpdate() { // 入力を取得 float moveX = Input.GetAxis("Horizontal"); // A, Dキーでの左右移動 float moveZ = Input.GetAxis("Vertical"); //W , Sキーでの前後移動 // 移動方向を計算 Vector3 movement = new Vector3(moveX, 0f, moveZ) * moveSpeed; // Rigidbodyで移動を適用 rb.AddForce(movement); } } |
このスクリプトでは、物理演算を使用するため、よりリアルな動きになります。
作りたいゲームによって使い分けすると良いんじゃないかと思います。