teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

スクリプトを追加しました

2021/04/04 14:57

投稿

starfish-nuru2
starfish-nuru2

スコア0

title CHANGED
File without changes
body CHANGED
@@ -6,7 +6,66 @@
6
6
  x方向には自動で等速に移動する仕様なのですがy軸方向の速さを変更するとなぜかx軸方向の速さも変わってしまいます。y軸方向の速さを小さくするとx軸方向の速さが大きくなってしまいます。特にジャンプの時に困ります。
7
7
  velocityが単にx軸方向とy軸方向の速度ベクトルの足し算であればそんなことはあり得ないと思ったのですが・・・。
8
8
 
9
+ ### 該当のソースコード
9
10
 
11
+ ```ここに言語名を入力
12
+ private void FixedUpdate()
13
+ {
14
+ isGrounded = groundChecker.GetIsGrounded(); //接地判定です
15
+ SetXSpeed();
16
+ SetYSpeed(); // それぞれxSpeedとySpeedを変更します
17
+ rb.velocity = new Vector2(xSpeed, ySpeed);
18
+ }
19
+ private void SetXSpeed()
20
+ {
21
+ xSpeed += acceleration * Time.deltaTime;
22
+ }
23
+ private void SetYSpeed()
24
+ {
25
+      // Updateでジャンプ用の入力を受け付けるとここを通ります
26
+ if (action == Action.Jump) 
27
+ {
28
+ //ジャンプ開始
29
+ if (isGrounded && !isJumping)
30
+ {
31
+ jumpTimer = 0.0f;
32
+ fallTimer = 0.0f; //AnimationCurve用のタイマーです
33
+ ySpeed = jumpSpeed;
34
+ isJumping = true; //実際にジャンプしているかどうか
35
+ }
36
+ //上昇中
37
+ else if (!isGrounded && isJumping && ySpeed > 0)
38
+ {
39
+ jumpTimer += Time.deltaTime;
40
+ ySpeed *= jumpCurve.Evaluate(jumpTimer);
41
+ }
42
+ //下降中
43
+ else if (!isGrounded && isJumping && ySpeed <= 0)
44
+ {
45
+ fallTimer += Time.deltaTime;
46
+ ySpeed = -fallSpeed * fallCurve.Evaluate(fallTimer);
47
+ }
48
+ //ジャンプ終了
49
+ else if (isGrounded && isJumping)
50
+ {
51
+ isJumping = false;
52
+ SetAction(Action.Normal);
53
+ animator.SetBool("Jump", false);
54
+ jumpTimer = 0.0f;
55
+ fallTimer = 0.0f;
56
+ }
57
+ }
58
+ //接地中
59
+ else
60
+ {
61
+ ySpeed = -fallSpeed;
62
+ }
63
+ }
64
+ ```
65
+ 以下順にJumpCurve,FallCurveです
66
+ ![JumpCurveです](2ad822375ebfd9196e33c8b67a900ed7.png)
67
+ ![FallCurveです](1ba3d77ff8e3112d935d0529f3f3270c.png)
68
+
10
69
  ### 補足情報(FW/ツールのバージョンなど)
11
70
  Unity 2019.4.14f1 です。
12
71
  C#をつかってます。