Unityについて質問です。ゲームビューでジャンプした時と再生時に最大化してジャンプした時、高さが大きく変わってしまいます。したのコードはジャンプさせるもののコードです。
Unityについて質問です。ゲームビューでジャンプした時と再生時に最大化してジャンプした時、高さが大きく変わってしまいます。したのコードはジャンプさせるもののコードです。 using System.Collections; using System.Collections.Generic; using UnityEngine; public class ball : MonoBehaviour { private bool sty; public bool jump; public float up = 50; private Rigidbody2D rbody2D; // Start is called before the first frame update void Start() { jump = false; rbody2D = GetComponent<Rigidbody2D>(); } // Update is called once per frame void Update() { if (jump == true) { if (Input.GetKey("space")) { this.rbody2D.AddForce(transform.up * up); } if (sty == false) { jump = false; } } } void OnCollisionStay2D(Collision2D collision) { jump = true; sty = true; } void OnCollisionExit2D(Collision2D collision) { sty = false; } }
ベストアンサー
Update()は、1フレームごとに処理をしているので、フレームレートによって、1秒あたりの処理回数が変わってしまいます。 例えば、60fpsの状態なら、1秒間で60回処理しますが、30fpsしか出ていなければ、同じ1秒間でも30回しか処理しません。 なので、時間に依存する挙動の場合「Time.deltaTime」という、前のフレームから今のフレームまでの経過時間を掛ける事が多くあります。 およそですが、60fpsの時なら「0.0166」秒、30fpsなら「0.0333」秒になるので、フレームレートが下がるほど、1回の処理で増やす値を多くする事で、フレームレートが増減しても一定の速度で動かす事ができるようになります。 今回の場合、ごく単純な書き方をすれば、以下のようになります。 this.rbody2D.AddForce(transform.up * up * Time.deltaTime); ただし、このままだと、変数upの値が小さくなりすぎるので、想定する挙動になるように、かなり大きな値にする必要があります。 参考になれば。
質問者からのお礼コメント
ご丁寧にありがとうございますm(*_ _)m この方法で解決出来ました!
お礼日時:6/27 19:35