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

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

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

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

Unity

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

Q&A

解決済

1回答

1470閲覧

velocityとAddForceによるジャンプ処理

folate

総合スコア12

C#

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

Unity

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

0グッド

0クリップ

投稿2019/04/12 00:54

編集2019/04/12 00:56

Unity2Dの質問です。

本に書いてあったコードをそのまま写して質問するのはまずいと思うので、
ところどころ省略、改変して書いています。

出来るだけ分かりやすくするため、質問のあるコードの近くに

//質問の場所

と書いています。

質問 Velocityのxとyの違い

質問の場所のコードは敵を踏んでジャンプする処理(マリオでクリボーを踏んだ時の様な処理)ですが、
この引数を
a.velocity = new Vector(a.velocity.x, 100);
と設定すると、敵を踏みつけた時に思いっきり上に飛びます。

しかし、
a.velocity = new Vector(100,100);
というようにxに100という値を渡してみたらどうなるのか気になったので実行してみたら、左右(X軸)の変化は全くないように見えました。
yの引数に100を渡すと思いっきり上に飛ぶのに、
xの引数に100を渡しても何も変化が無いのでしょうか。

Unityはエラーもなく正常に動いているので、この疑問を無視して先に進んでしまおうかと悩みましたが、どうしても気になるので質問しました。

わかる方がいましたら、ご教示の程、よろしくお願いいたします。

該当のソースコード

public class PlayerManager:MonoBehaviour { private Rigidbody2D a; private jumpPower = 400; void Start(){ a = GetComponent<Rigidbody2D>(); } void Update(){ //省略しました、キーの入力を受け付ける処理が書かれています } void FixedUpdate() { //一部省略しました、入力されたキーに沿った方向へ進む値をmoveSpeedに入れる処理が書かれています a.velocity = new Vector2(moveSpeed, a.velocity.y); } void OnTriggerEnter2D(Collider2D col){ //敵を踏んだ時 //質問の場所 a.velocity = new Vector(a.velocity.x, 0); a.AddForce(Vector2.up*jumpPower); }

試したこと

webで調べ、知恵袋で質問し、velocityが速度を表していることを知り、
恐らく、敵を踏んだ時にyの速度を0に初期化してジャンプさせているのだろうという考えにまで至りましたが、
(間違っていたら申し訳ございません)
a.velocity = new Vector(a.velocity.x, 0);
の引数のyに100を入れた時には上方向に思いっきり飛ぶという顕著な変化が出るのに、
xに100を入れた時には特に何も変化が無いのが何故なのか分かりませんでした。

そこで、
a.velocity = new Vector(0, 0);
a.AddForce(Vector2.right*10000)
というようにAddForceで右に力がかかるようにコードを書きました。
Vector2.rightに掛ける値を10000にしたところで右に一気に移動する動きを確認できました。

これでVector2.upjumpPowerとVector2.right10000で、それぞれの方向(上方向、右方向)に顕著に移動するという同じ条件が出来ました。

この状態で、

a.velocity = new Vector(100,0)

というようにyの引数に100を入れるのと同じようにxの引数に100を入れました。

こうしたらy方向の引数を100にした時(上方向に思いっきり飛ぶ)と同じく右にもっと一気に移動するのかなと予想したのですが、移動距離は変わっていないように見えました。
この値は1000、10000、100000と増やして実行してみましたが、移動距離は変わったようには見えませんでした。

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

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

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

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

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

guest

回答1

0

ベストアンサー

踏みつけ時にxに入れた値は「入力されたキーに沿った方向へ進む値をmoveSpeedに入れる処理」で直後に上書きされているのでしょう。

投稿2019/04/12 01:06

ikadzuchi

総合スコア3047

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

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

folate

2019/04/12 01:24

回答ありがとうございます! 理解できました、本当にありがとうございます! 確かにFixedUpdateメソッドで上書きされていました。 次から自分で気付けるよう努力します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問