【Unity公式チュートリアル】 サバイバルシューター part.3 プレイヤーを動かす設定をする!
こんにちは!ヤギです!
Unity公式チュートリアルのサバイバルシューターをやってみるpart.3になります。
記事概要
今回の記事では、プレイヤーを動かす設定についてご説明していきます。※part.3に対応する公式チュートリアルは、
Player Character - Unityとなります。
※前回の記事はこちら
www.yagigame.com
Playerのコンポーネントの設定
1. Player > Inspector > Add Componentをクリックし、Rigidbodyを選択します。※このコンポーネントで、重力を適用します。
2. Rigidbodyを以下の内容に修正します。
・Drag > Infinity
・Angular Dragg > Infinity
・Freeze Position > Yにチェック
・Freeze Rotation > X,Zにチェック
3. Player > Inspector > Add Componentをクリックし、Capsule Colliderを選択します。
※このコンポーネントで、衝突検知を可能にします。
4. Capsule Colliderを以下の内容に修正します。
・Center > x > 0.2
・Center > y > 0.6
・Height > 1.2
5. Player > Inspector > Add Componentをクリックし、Audio Sourceを選択します。
※プレイヤーが攻撃を受けた時の効果音を設定します。
6. Audio Sourceを以下の内容に修正します。
・Audio Clip > Player Hurt
・Play On Awake > チェックを外す
プレイヤを動かすスクリプトの作成
1. Project > Assets > Scripts > Player > PlayerMovementをPlayerにドラッグします。2. PlayerMovementスクリプトを作成していきます。
※ソースの中に解説を書いています!ご確認ください!
using UnityEngine; public class PlayerMovement : MonoBehaviour { public float speed = 6f; //プレイヤの移動速度 Vector3 movement; //プレイヤーの移動方向 Animator anim; //アニメーションコンポーネント Rigidbody playerRigidbody; //Rigidbodyコンポーネント int floorMask; //Floorとrayermaskを使う float camRayLength = 100f; //カメラからのray void Awake() { //Floorのrayermaskを作成 floorMask = LayerMask.GetMask("Floor"); //コンポーネントを取得 anim = GetComponent<Animator>(); playerRigidbody = GetComponent<Rigidbody>(); } //オブジェクトが動くたびに呼ばれる void FixedUpdate() { //インプットから左右上下の移動量を-1もしくは1で受け取る float h = Input.GetAxisRaw("Horizontal"); float v = Input.GetAxisRaw("Vertical"); //プレイヤーを動かすMove()を呼ぶ Move(h, v); //プレイヤーの方向を動かすTurning()を呼ぶ Turning(); //プレイヤーのアニメーションを設定するAnimating()を呼ぶ Animating(h, v); } //プレイヤーを動かす処理 void Move(float h, float v) { //移動量を設定 movement.Set(h, 0f, v); //移動するベクトルを1にし、移動する距離を設定する movement = movement.normalized * speed * Time.deltaTime; //プレイターのポジションを動かす playerRigidbody.MovePosition(transform.position + movement); } void Turning() { //カメラから、マウスで指している方向のrayを取得する Ray camRay = Camera.main.ScreenPointToRay(Input.mousePosition); //rayが衝突した情報を取得する RaycastHit floorHit; //rayを飛ばして、床に衝突した場合の処理 if (Physics.Raycast(camRay, out floorHit, camRayLength, floorMask)) { //マウスで指している場所と、プレイヤーの場所の差分を取得 Vector3 playerToMouse = floorHit.point - transform.position; //プレイヤはy座標には動かさない playerToMouse.y = 0f; //プレイヤーの場所から、マウスで指している場所への角度を取得 Quaternion newRotation = Quaternion.LookRotation(playerToMouse); //プレイヤーの角度(プレイヤーの向き)を、新しく設定 playerRigidbody.MoveRotation(newRotation); } } //アニメーションの処理 void Animating(float h, float v) { //プレイヤーの移動量が0以外の場合、walkingをtrueにする bool walking = h != 0f || v != 0f; //アニメーションのパラメーターOsWalkingをwalkingの値で設定する anim.SetBool("IsWalking", walking); } }
トラブルシューティング
実行すると、以下のエラーが出るかもしれません。NullReferenceException: Object reference not set to an instance of an object
PlayerMovement.Turning () (at Assets/Scripts/Player/PlayerMovement.cs:58)
PlayerMovement.FixedUpdate () (at Assets/Scripts/Player/PlayerMovement.cs:35)
これは、Main CameraのTagが設定されていないことで発生している可能性があります!
Main CameraのTagをMain Cameraと設定しましょう。
ゲームを実行する
実際にゲームを動かしてみましょう。キーボードの矢印でプレイヤーの位置が動き、マウスを追ってプレイヤーが向きを変えれば大成功です!
次回予告
次回は、カメラの設定を行なっていきます!次回に対応する公式チュートリアルは、「Camera setup」です!
読んでいただきありがとうございました!