質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

405閲覧

2Dアクションゲームのジャンプ設定について

sundome

総合スコア14

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

2クリップ

投稿2017/09/10 23:04

###ジャンプの設定をしましたが、ジャンプ力をとんでもない数値にしないと浮かび上がりません。なぜなのかが理解できないので、質問させていただきました。

http://hiyotama.hatenablog.com/entry/2015/06/15/113645
上記URLのチュートリアルを行っていたのですが、ジャンプができていませんでした。
ジャンプモーションの遷移はしていたのですが、上へと全く上がらず、地面の上でジャンプモーションが行われていた状態でした。
しかし、自分でSpeedを400、jumpPowerを100000に設定したところ、画面上部ギリギリまで浮き上がりました。正直驚きました。
後々、色々試してみて、Speedは無関係でどんな数値でも良かったようですがjumpPowerは60000ぐらいから画面中央ほどまで浮き上がる、といった具合です。
別にこのままでもかまわないのですが、なぜこのような結果になったのかが疑問です。

質問は2点です。
1:なぜ、設定通りでは浮き上がることができなかったのか
2:ジャンプ力を桁違いに上げなくてはならなかった理由

以下はスクリプトです。チュートリアルからの変更点は
private Rigidbody2D rigidbody2D; を
private Rigidbody2D N_rigidbody2D; へと変更しています。

C#

1using UnityEngine; 2using System.Collections; 3 4public class PlayerScript : MonoBehaviour { 5 6 public float speed = 4f; 7 //********** 開始 **********// 8 public float jumpPower = 1000; //ジャンプ力 9 public LayerMask groundLayer; //Linecastで判定するLayer 10 //********** 終了 **********// 11 public GameObject mainCamera; 12 private Rigidbody2D N_rigidbody2D; 13 private Animator anim; 14 //********** 開始 **********// 15 private bool isGrounded; //着地判定 16 //********** 終了 **********// 17 18 void Start () { 19 anim = GetComponent<Animator>(); 20 N_rigidbody2D = GetComponent<Rigidbody2D>(); 21 } 22 //********** 開始 **********// 23 void Update () 24 { 25 //Linecastでユニティちゃんの足元に地面があるか判定 26 isGrounded = Physics2D.Linecast ( 27 transform.position + transform.up * 1, 28 transform.position - transform.up * 0.05f, 29 groundLayer); 30 //スペースキーを押し、 31 if (Input.GetKeyDown ("space")) { 32 //着地していた時、 33 if (isGrounded) { 34 //Dashアニメーションを止めて、Jumpアニメーションを実行 35 anim.SetBool("Dash", false); 36 anim.SetTrigger("Jump"); 37 //着地判定をfalse 38 isGrounded = false; 39 //AddForceにて上方向へ力を加える 40 N_rigidbody2D.AddForce (Vector2.up * jumpPower); 41 } 42 } 43 //上下への移動速度を取得 44 float velY = N_rigidbody2D.velocity.y; 45 //移動速度が0.1より大きければ上昇 46 bool isJumping = velY > 0.1f ? true:false; 47 //移動速度が-0.1より小さければ下降 48 bool isFalling = velY < -0.1f ? true:false; 49 //結果をアニメータービューの変数へ反映する 50 anim.SetBool("isJumping",isJumping); 51 anim.SetBool("isFalling",isFalling); 52 } 53 //********** 終了 **********// 54 55 void FixedUpdate () 56 { 57 float x = Input.GetAxisRaw ("Horizontal"); 58 if (x != 0) { 59 N_rigidbody2D.velocity = new Vector2 (x * speed, N_rigidbody2D.velocity.y); 60 Vector2 temp = transform.localScale; 61 temp.x = x; 62 transform.localScale = temp; 63 anim.SetBool ("Dash", true); 64 if (transform.position.x > mainCamera.transform.position.x - 4) { 65 Vector3 cameraPos = mainCamera.transform.position; 66 cameraPos.x = transform.position.x + 4; 67 mainCamera.transform.position = cameraPos; 68 } 69 Vector2 min = Camera.main.ViewportToWorldPoint(new Vector2(0, 0)); 70 Vector2 max = Camera.main.ViewportToWorldPoint(new Vector2(1, 1)); 71 Vector2 pos = transform.position; 72 pos.x = Mathf.Clamp(pos.x, min.x + 0.5f, max.x); 73 transform.position = pos; 74 } else { 75 N_rigidbody2D.velocity = new Vector2 (0, N_rigidbody2D.velocity.y); 76 anim.SetBool ("Dash", false); 77 } 78 } 79}

ちなみに、ジャンプさせるキャラクターであるユニティちゃんの設定です。
イメージ説明
イメージ説明

初心者ながらに考えてみたのですが、このスクリプトに問題があったのではなく、私のUnityの設定になにか問題があったのではないのか、と考えています。
しかし、自分では全くわからず、困り果てておりました。

もし、なにかわかる方がいらっしゃいましたら教えていただければと思います。
ご検討のほどよろしくお願いします。

###補足情報(言語/FW/ツール等のバージョンなど)
UnityVersion 2017.1
Mac Sierra 10.12.6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決しました。
Time ManagerのFixed Timestepが0.0001だったのが問題だったようです。
0.01に変えたところ、逆にすっ飛んでいきました。
これでJumpPowerを1000ぐらいでちょうどよい感じになりました。

実行間隔が短いと浮かない意味はよくわかりませんでしたが、とりあえず解決です。

投稿2017/09/11 06:59

sundome

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問