前提・実現したいこと
Unityでキャラクターを操作するためのボタンを無効化
(現在はAWSDと矢印キーで移動が可能になっているがSキーと↓キーを無効化したいです)
アニメーションはUnityChan!に付属していたUnityChanLocomotionを使用しています。
該当のソースコード
C#
1 using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using Photon.Pun; 5using Photon.Realtime; 6 7public class CCharacterControlScript : MonoBehaviour 8{ 9 //オンライン化に必要なコンポーネントを設定 10 public PhotonView myPV; 11 public PhotonTransformView myPTV; 12 13 private Camera mainCam; 14 15 //移動処理に必要なコンポーネントを設定 16 public Animator animator; //モーションをコントロールするためAnimatorを取得 17 public CharacterController controller; //キャラクター移動を管理するためCharacterControllerを取得 18 19 //移動速度等のパラメータ用変数(inspectorビューで設定) 20 public float speed; //キャラクターの移動速 21 public float rotateSpeed; //キャラクターの方向転換速度 22 public float gravity; //キャラにかかる重力の大きさ 23 24 Vector3 targetDirection; //移動する方向のベクトル 25 Vector3 moveDirection = Vector3.zero; 26 27 // Start関数は変数を初期化するための関数 28 void Start () 29 { 30 if (myPV.IsMine) //自キャラであれば実行 31 { 32 //MainCameraのtargetにこのゲームオブジェクトを設定 33 mainCam = Camera.main; 34 mainCam.GetComponent<CCameraScript>().target = this.gameObject.transform; 35 } 36 } 37 38 // Update関数は1フレームに1回実行される 39 void Update () 40 { 41 if (!myPV.IsMine) 42 { 43 return; 44 } 45 46 moveControl(); //移動用関数 47 RotationControl(); //旋回用関数 48 49 //最終的な移動処理 50 //(これが無いとCharacterControllerに情報が送られないため、動けない) 51 controller.Move(moveDirection * Time.deltaTime); 52 } 53 54 void moveControl() 55 { 56 //★進行方向計算 57 //キーボード入力を取得 58 float v = Input.GetAxisRaw("Vertical"); //InputManagerの↑↓の入力 59 float h = Input.GetAxisRaw("Horizontal"); //InputManagerの←→の入力 60 //カメラの正面方向ベクトルからY成分を除き、正規化してキャラが走る方向を取得 61 Vector3 forward = Vector3.Scale(Camera.main.transform.forward, new Vector3(1, 0, 1)).normalized; 62 Vector3 right = Camera.main.transform.right; //カメラの右方向を取得 63 //カメラの方向を考慮したキャラの進行方向を計算 64 targetDirection = h * right + v * forward; 65 //★地上にいる場合の処理 66 if (controller.isGrounded) 67 { 68 //移動のベクトルを計算 69 moveDirection = targetDirection * speed; 70 } 71 else //空中操作の処理(重力加速度等) 72 { 73 float tempy = moveDirection.y; 74 //(↓の2文の処理があると空中でも入力方向に動けるようになる) 75 //moveDirection = Vector3.Scale(targetDirection, new Vector3(1, 0, 1)).normalized; 76 //moveDirection *= speed; 77 moveDirection.y = tempy - gravity * Time.deltaTime; 78 } 79 //★走行アニメーション管理 80 if (v > .1 || v < -.1 || h > .1 || h < -.1) //(移動入力があると) 81 { 82 animator.SetFloat("Speed", 1f); //キャラ走行のアニメーションON 83 } 84 else //(移動入力が無いと) 85 { 86 animator.SetFloat("Speed", 0f); //キャラ走行のアニメーションOFF 87 } 88 } 89 90 void RotationControl() //キャラクターが移動方向を変えるときの処理 91 { 92 Vector3 rotateDirection = moveDirection; 93 rotateDirection.y = 0; 94 //それなりに移動方向が変化する場合のみ移動方向を変える 95 if (rotateDirection.sqrMagnitude > 0.01) 96 { 97 //緩やかに移動方向を変える 98 float step = rotateSpeed * Time.deltaTime; 99 Vector3 newDir = Vector3.Slerp(transform.forward, rotateDirection, step); 100 transform.rotation = Quaternion.LookRotation(newDir); 101 } 102 } 103}
補足情報(FW/ツールのバージョンなど)
Unity:2019.4.13f
os:mac
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。