Unityで、時間と高さ幅を指定してジャンプをコントロールしたい
時間と高さ幅を指定してジャンプをコントロールしたいです。
下記のURLを参考に作成しているのですが、指定した通りのジャンプができません。
どうしたらいいでしょうか。Unity初心者なのでご教授お願い致します。
参考URL
http://esrunti.com/jumpscript2/#i
参考URL内のソースコード
C#
1 2public class jump : MonoBehaviour { 3 public float jumpTime = 1f; 4 float time; 5 public float height = 2f; 6 float fixedGravity; 7 float initVelocity; 8 float elapsedTime = 0f; 9 public bool jumpChecker = false; 10 11 void Update() { 12 if (Input.GetKey("a") && !jumpChecker) { 13 jumpChecker = true; 14 time = jumpTime / 2; 15 fixedGravity = -2 * height / (time * time);//① 16 initVelocity = 2 * height / time;//② 17 } 18 if (jumpChecker) { 19 elapsedTime += Time.deltaTime; 20 Vector3 pos = transform.position; 21 pos.y = initVelocity * elapsedTime + fixedGravity * elapsedTime * elapsedTime / 2; 22 if (pos.y < 0) { 23 pos.y = 0; 24 elapsedTime = 0; 25 jumpChecker = false; 26 } 27 transform.position = pos; 28 } 29 } 30 31}
ちょっと試してみたのですが、ご提示いただいた参考コードに異常はなさそうでした。
「指定した通りのジャンプができない」とおっしゃるのは、具体的にはどのような症状なのでしょうか?
返信遅くなり申し訳ありません。
幅が指定できないところです。
なるほど、その場での単なる垂直跳びではなく、弧を描いて斜めにジャンプさせたいということでしょうか。
跳び上がってから着地するまでの時間と、ジャンプ幅(つまり水平移動距離)が分かっていますので、それらから水平移動速度を求められそうですね。
現状の作りかけのコードはご提示いただけますでしょうか?
今のソースコードはこんな感じです。
public class jump : MonoBehaviour {
public float jumpTime = 1f;
float time;
public float height = 2f;
public float width = 2f;
float fixedGravity;
float initVelocity;
float fixedGravityX;
float initVelocityX;
float elapsedTime = 0f;
public bool jumpChecker = false;
void Update() {
if (Input.GetKey("a") && !jumpChecker) {
jumpChecker = true;
time = jumpTime / 2;
fixedGravity = -2 * height / (time * time);
initVelocity = 2 * height / time;
fixedGravityX = -2 * width / (time * time);
initVelocityX = 2 * width / time;
}
if (jumpChecker) {
elapsedTime += Time.deltaTime;
Vector3 pos = transform.position;
pos.x = initVelocityX * elapsedTime+ fixedGravity * elapsedTime * elapsedTime / 2;
pos.y = initVelocity * elapsedTime + fixedGravity * elapsedTime * elapsedTime / 2;
if (pos.y < 0) {
pos.y = 0;
pos.x = width;
elapsedTime = 0;
jumpChecker = false;
}
transform.position = pos;
}
}
}
回答1件
あなたの回答
tips
プレビュー