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と増やして実行してみましたが、移動距離は変わったようには見えませんでした。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/12 01:24