前提・実現したいこと
時間と高さ幅と着地地点を指定してオブジェクトをジャンプさせたいです。
言葉足らずだと思いますが、ご教授よろしくお願いいたします。
下記のURLを参考に作成しています。
https://teratail.com/questions/173195?nli=5c5ceb2c-ab38-4558-9e36-49d90a28000d
発生している問題・エラーメッセージ
幅ぶんの座標まで移動を終えていないので、Y軸の到着地点に来ると横に瞬間移動をする
該当のソースコード
C#
1public class jump : MonoBehaviour { 2 private float jumpTime2 = 2f;//ジャンプしている時間 3 private float width2 = 5;//幅 4 private float height2 = 6;//高さ 5 private float time2;//ジャンプ中の折り返し地点の時間 6 private float fixedGravityY2;//固定重力 7 private float initVelocityY2;//速度 8 private float initVelocityX2;//速度 9 private float elapsedTime2 = 0f; 10 private bool jumpChecker2 = false;//ジャンプしているかのチェック 11 public bool jumpStart2 = false;//ジャンプ処理の前の処理通過フラグ 12 private Vector3 JumpPos2; 13 private float initPositionX2; // 初期X座標のためのフィールドを追加 14 private float initPositionY2; // 初期Y座標のためのフィールドを追加 15 16 private float LandingPosY = 2f; 17 18 private bool LandingPointY_Flag = false; 19 20 21 22 void Update() { 23 if (Input.GetKey("a") && !jumpChecker2) { 24 //((Y軸+止まる位置)/Y軸) 25 //float hoge = ((height2 + LandingPosY) / height2); 26 float hoge = ((LandingPosY * 2) / height2); 27 28 float hoho = hoge <= 0 ? 1 : hoge; 29 //0以下のチェック 30 //double hohoho = Math.Truncate(hoge) <= 0 ? 1 : Math.Truncate(hoge); 31 Debug.Log("倍数:" + hoho); 32 33 jumpChecker2 = true; 34 time2 = jumpTime2 / 2; 35 36 //Y軸 37 fixedGravityY2 = -2 * height2 / (time2 * time2); 38 initVelocityY2 = 2 * height2 / time2; 39 initPositionY2 = transform.position.y; 40 41 //X軸 42 initVelocityX2 = (width2*hoho) / jumpTime2; // 距離widthをjumpTime秒かけて移動する場合の速度 43 initPositionX2 = transform.position.x; // ジャンプ開始時のX座標を覚えておく 44 45 46 } 47 if (jumpChecker2) 48 { 49 elapsedTime2 += Time.deltaTime; 50 Vector3 pos = target.transform.position; 51 pos.x = initPositionX2 + initVelocityX2 * elapsedTime2; // 水平方向は等速とする 52 pos.y = initVelocityY2 * elapsedTime2 + fixedGravityY2 * elapsedTime2 * elapsedTime2 / 2; 53 54 //高さの頂点に到達したかの判定 55 if (pos.y > (initPositionY2 + height2) - 0.2) 56 { 57 //高さの頂点に到達 58 LandingPointY_Flag = true; 59 60 } 61 62 //Y軸の所定の位置に到達したかの判定 63 if (LandingPointY_Flag) 64 { 65 if (pos.y < LandingPosY) 66 { 67 pos.y = LandingPosY; 68 pos.x = initPositionX2 + width2; // 初期位置からwidthだけ進んだ位置を最終的なX座標とする 69 elapsedTime2 = 0; 70 jumpChecker2 = false; 71 } 72 } 73 74 transform.position = pos; 75 } 76 77}
試したこと
移動しきれていない幅をを計算で求めてみたが駄目だった。
補足情報
参考にしたソースコード
C#
1public class jump : MonoBehaviour 2{ 3 public float jumpTime = 1f; 4 float time; 5 public float height = 2f; 6 public float width = 2f; 7 float fixedGravity; 8 float initVelocity; 9 // float fixedGravityX; // 水平方向の加速度は不要 10 float initPositionX; // 初期X座標のためのフィールドを追加 11 float initVelocityX; 12 float elapsedTime = 0f; 13 public bool jumpChecker = false; 14 15 void Update() 16 { 17 if (Input.GetKey("a") && !jumpChecker) 18 { 19 jumpChecker = true; 20 time = jumpTime / 2; 21 fixedGravity = -2 * height / (time * time); 22 initVelocity = 2 * height / time; 23 24 // fixedGravityX = -2 * width / (time * time); // 水平方向の加速度は不要 25 initVelocityX = width / jumpTime; // 距離widthをjumpTime秒かけて移動する場合の速度 26 initPositionX = transform.position.x; // ジャンプ開始時のX座標を覚えておく 27 } 28 if (jumpChecker) 29 { 30 elapsedTime += Time.deltaTime; 31 Vector3 pos = transform.position; 32 pos.x = initPositionX + initVelocityX * elapsedTime; // 水平方向は等速とする 33 pos.y = initVelocity * elapsedTime + fixedGravity * elapsedTime * elapsedTime / 2; 34 35 if (pos.y < 0) 36 { 37 pos.y = 0; 38 pos.x = initPositionX + width; // 初期位置からwidthだけ進んだ位置を最終的なX座標とする 39 elapsedTime = 0; 40 jumpChecker = false; 41 } 42 transform.position = pos; 43 } 44 } 45}
回答1件
あなたの回答
tips
プレビュー