UIのButtonを押した際にプレイヤーを1回のみジャンプさせたいです。
状況
現在プレイヤーにはPlayerScript.cs, Rigidbody, NavMeshAgentが付いています。
NavigationのBakeをしてプレイヤーの歩く範囲を設定しています。
OnClickButton()でのジャンプアニメーションは動作させることはできています。
試したこと
・Rigidbodyを取得してAddForceで上に力を加えてみたり、
プレイヤーにBoxColliderを付け、GroundにGroundタグを設定してみましたが全く動きませんでした。 エラーなどは特に出ていません。
・数値ミスなど確認しましたが特に設定忘れなどは見つかりませんでした。
上記試してみましたが途方に暮れてしまったためアドバイスを頂きたいです。
よろしくお願いします。
追記
ふと思ったのですが、Bakeされている範囲しか移動できないので、ジャンプなどの空中になるとBake範囲外になって動作ができない可能性はありますか?
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.AI; 5 6public class PlayerScript : MonoBehaviour 7{ 8 public FixedJoystick inputMove; //左画面JoyStick 9 public float moveSpeed = 5.0f; //移動する速度 10 Animator ani; 11 12 private Rigidbody rb; //リジッドボディを取得するための変数 13 public float upForce = 200f; //上方向にかける力 14 private bool isGround; //着地しているかどうかの判定 15 16 float degStop; 17 18 void Start() 19 { 20 //Animatorを取得 21 ani = this.gameObject.GetComponent<Animator>(); 22 //リジッドボディを取得 23 rb = GetComponent<Rigidbody>(); 24 } 25 26 void Update() 27 { 28 Move(); 29 30 if (isGround == true)//着地しているとき 31 { 32 if (Input.GetKeyDown("space")) 33 { 34 isGround = false;// isGroundをfalseにする 35 rb.AddForce(new Vector3(0, upForce, 0)); //上に向かって力を加える 36 } 37 } 38 } 39 40 void Move() 41 { 42 float dx = inputMove.Horizontal; //joystickの水平方向の動きの値、-1~1の値をとる 43 float dy = inputMove.Vertical; //joystickの垂直方向の動きの値、-1~1の値をとる 44 45 float rad = Mathf.Atan2(dx - 0, dy - 0); //原点(0,0)と点(dx,dy)の距離から角度をとってくれる便利な関数 46 47 float deg = rad * Mathf.Rad2Deg; //radianからdegreenに変換する 48 49 this.transform.rotation = Quaternion.Euler(0, deg, 0); //Playerの向きを先ほど取得した角度に当てはめて代入する。今回はy軸方向が回転軸になる。 50 51 if (deg != 0) //joystickの原点と(dx,dy)の2点がなす角度が0ではないとき = joystickを動かしている時 52 { 53 ani.SetBool("Walk", true); //wait→walkへ 54 this.transform.position += this.transform.forward * moveSpeed * Time.deltaTime; //正面方向へプレイヤーを移動させ続ける 55 56 degStop = deg; //停止前のプレイヤーの向きを保存 57 } 58 else //joystickの原点と(dx,dy)の2点がなす角度が0の時 = joystickが止まっている時 59 { 60 ani.SetBool("Walk", false); //walk→waitへ 61 62 this.transform.rotation = Quaternion.Euler(0, degStop, 0); //停止時のプレイヤーの動きの向きを設定 63 } 64 } 65 66 void OnCollisionEnter(Collision other) //地面に触れた時の処理 67 { 68 if (other.gameObject.tag == "Ground") //Groundタグのオブジェクトに触れたとき 69 { 70 isGround = true; //isGroundをtrueにする 71 } 72 } 73 74 //ボタンを押したらジャンプする 75 public void OnClickButton() 76 { 77 ani.SetTrigger("Jump"); 78 } 79}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/08/05 03:12
2021/08/05 04:01 編集
退会済みユーザー
2021/08/05 14:08