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

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

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

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

Unity

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

Q&A

解決済

1回答

2283閲覧

ジャンプ中に他の操作を受け付けないようにする方法が知りたいです

39_49torenca

総合スコア10

C#

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

Unity

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

0グッド

0クリップ

投稿2019/03/27 05:28

ジャンプ中にほかの操作を受け付けないようにする方法がわかりません。
現在ジャンプ動作はできたのですが、ジャンプ中に左右に動いて、慣性を出すことが出来ません。

元々「Unity2D超入門講座」というテキストを元に勉強していて、スクリプトはこの中のものを参考に作りました。
慣性を出す方法については色々なサイトを探してみましたが良い探し方もわからず、挙動が不安定になってしまい改善の余地が見えませんでした。

もしよければ改善策を教えてください。コードは以下になっています。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Walkmove : MonoBehaviour 6{ 7 // Start is called before the first frame update 8 public float speed = 3; 9 public float jumppower = 15; 10 float vx = 0; 11 bool rdushFlag = false; 12 bool ldushFlag = false; 13 bool pushFlag = false; 14 bool jumpFlag = false; 15 bool groundFlag = false; 16 Rigidbody2D rbody; 17 void Start() 18 { 19 rbody = GetComponent<Rigidbody2D>(); 20 rbody.constraints = RigidbodyConstraints2D.FreezeRotation; 21 } 22 23 // Update is called once per frame 24 void Update() 25 { 26 vx = 0; 27 if (Input.GetKey("right")) 28 { 29 if (groundFlag == true) 30 { 31 vx = speed; 32 rdushFlag = true; 33 } 34 } 35 if (Input.GetKey("left")) 36 { 37 if (groundFlag == true) 38 { 39 vx = -speed; 40 ldushFlag = true; 41 } 42 } 43 if(Input.GetKey("space") && groundFlag) 44 { 45 if (pushFlag == false) 46 { 47 jumpFlag = true; 48 pushFlag = true; 49 } 50 } 51 else 52 { 53 pushFlag = false; 54 } 55 } 56 void FixedUpdate() 57 { 58 rbody.velocity = new Vector2(vx, rbody.velocity.y); 59 if (jumpFlag) 60 { 61 jumpFlag = false; 62 rbody.AddForce(new Vector2(0, jumppower), ForceMode2D.Impulse); 63 } 64 } 65 void OnTriggerStay2D(Collider2D collision) 66 { 67 groundFlag = true; 68 } 69 void OnTriggerExit2D(Collider2D collision) 70 { 71 groundFlag = false; 72 } 73}

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

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

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

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

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

stdio

2019/03/27 05:32

rbody.velocity = new Vector2(vx, rbody.velocity.y);を下のif文にいれてみてはいかがでしょうか?
y_waiwai

2019/03/27 05:36

ジャンプはきちんと実装できてるんでしょうか?
39_49torenca

2019/03/27 05:44 編集

stdio様 試してみたのですが、ジャンプすると必ず真上に飛んでしまうようになってしまい、走ってる方向に動いてくれませんでした。。。
39_49torenca

2019/03/27 05:45 編集

y_waiwai様 ジャンプそのものは実装できています。ジャンプ中に動かないようなものを作ると挙動がおかしくなることがあります。
guest

回答1

0

自己解決

groundFlagがtrueの時にのみ左右キーでベクトル方向を変えれるようにしたら解決しました。
回答くださった方、ありがとうございました。

解決後のscriptは以下です

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Walkmove : MonoBehaviour 6{ 7 // Start is called before the first frame update 8 public float speed = 3; 9 public float jumppower = 15; 10 float vx = 0; 11 bool rdushFlag = false; 12 bool ldushFlag = false; 13 bool pushFlag = false; 14 bool jumpFlag = false; 15 bool groundFlag = false; 16 Rigidbody2D rbody; 17 void Start() 18 { 19 rbody = GetComponent<Rigidbody2D>(); 20 rbody.constraints = RigidbodyConstraints2D.FreezeRotation; 21 } 22 23 // Update is called once per frame 24 void Update() 25 { 26 vx = 0; 27 if (Input.GetKey("right")) 28 { 29 if (groundFlag == true) 30 { 31 vx = speed; 32 rdushFlag = true; 33 } 34 } 35 if (Input.GetKey("left")) 36 { 37 if (groundFlag == true) 38 { 39 vx = -speed; 40 ldushFlag = true; 41 } 42 } 43 if(Input.GetKey("space") && groundFlag) 44 { 45 if (pushFlag == false) 46 { 47 jumpFlag = true; 48 pushFlag = true; 49 } 50 } 51 else 52 { 53 pushFlag = false; 54 } 55 } 56 void FixedUpdate() 57 { 58 if (groundFlag == true) 59 { 60 rbody.velocity = new Vector2(vx, rbody.velocity.y); 61 } 62 if (jumpFlag) 63 { 64 jumpFlag = false; 65 rbody.AddForce(new Vector2(0, jumppower), ForceMode2D.Impulse); 66 } 67 } 68 void OnTriggerStay2D(Collider2D collision) 69 { 70 groundFlag = true; 71 } 72 void OnTriggerExit2D(Collider2D collision) 73 { 74 groundFlag = false; 75 } 76} 77

投稿2019/03/27 06:01

39_49torenca

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問