前提・実現したいこと
該当のソースコードに記載のスクリプトでは、
Playerのジャンプがあまりジャンプ力が弱くて、困っています。
これを普通のゲームで出てくるキャラくらいのジャンプ力(ゲームにもよりますが)
にしたい。
Jump、Moveメソッド内のコードをどう変更すれば
rb.velocityの移動方法でも、Jump力はキャラの半分ちょっとの高さくらいまで、
ジャンプすることができるのでしょうか?
発生している問題・エラーメッセージ
ジャンプ力が小さすぎて、すぐに地面に戻る。 あまりJumpForceの大きさはあげたくないのと、Gravityの値も変更したくないです
該当のソースコード
C#
1using UnityEngine; 2 3public class PlayerManager : MonoBehaviour 4{ 5 [SerializeField] private float moveSpeed = 3.0f; 6 [SerializeField] private float jumpForce = 400f; 7 8 9 private Rigidbody rb; 10 private float hInput; 11 private float vInput; 12 private bool isGround = false; 13 14 void Start() 15 { 16 rb = GetComponent<Rigidbody>(); 17 18 } 19 20 void Update() 21 { 22 hInput = Input.GetAxis("Horizontal"); 23 vInput = Input.GetAxis("Vertical"); 24 Jump(); 25 } 26 27 private void FixedUpdate() { 28 Move(); 29 } 30 31 32 private void Move() { 33 var direction = transform.position + (new Vector3(hInput, 0, vInput) * moveSpeed); 34 transform.LookAt(direction); 35 rb.velocity = new Vector3(hInput, 0, vInput) * moveSpeed; 36 } 37 38 private void Jump() { 39 if (isGround) { 40 if (Input.GetButtonDown("Jump") || Input.GetMouseButtonDown(0)) { 41 rb.AddForce(Vector3.up * jumpForce); 42 isGround = false; 43 } 44 } 45 } 46 47 //Checkground 48 private void OnCollisionEnter(Collision collision) { 49 int layerNameDefault = 0; 50 if(collision.gameObject.layer == layerNameDefault) { 51 if (!isGround) isGround = true; 52 } 53 } 54 55 56} 57
試したこと
JumpForceの値を600に変更しましたがダメでした。
何となく
C#
1rb.velocity = new Vector3(hInput, 0, vInput) * moveSpeed
のあたりが怪しいと思ってますが、どうしてもうまく行きません。
やりたいのは、MovePositionやTranslateを使った移動ではなくて、
あくまでも、rb.velocityで移動するときにジャンプが不自然にならないようにしたいです。
今だと、ちょっとジャンプしてゆっくり地面に戻ってくるなんとも不思議なスクリプトになってしまってます。
補足情報(FW/ツールのバージョンなど)
2020.1.17f1 Personal
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/23 09:35
2021/11/23 14:53