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

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

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

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Q&A

解決済

2回答

2026閲覧

Unityでジャンプをした後に一切の操作を受け付けないようにしたらその場でジャンプだけする

syun625

総合スコア22

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

0グッド

0クリップ

投稿2020/02/26 23:12

編集2020/02/28 11:29

私がしたいのは、スピードに応じて慣性を持った状態ジャンプすることです。
ジャンプをして操作を受け付けないように下記のようなスクリプトを組んだのですが、その場でジャンプをするだけで、不自然なジャンプとなってしまいます。

C#

1if (onGround == true) 2 { 3 Transform t = transform; 4 transform.position = t.position; 5 t.position += t.TransformDirection(Vector3.forward) * Input.GetAxis("Vertical") * mainSPEED; 6 t.position += t.TransformDirection(Vector3.right) * Input.GetAxis("Horizontal") * mainSPEED; 7 mainSPEED = tempSPEED; 8 if (Input.GetKey(KeyCode.LeftShift) && Input.GetKey(KeyCode.W)) 9 { 10 mainSPEED = mainSPEED * 2; 11 12 } 13 if (checkjump) 14 { 15 GetComponent<Rigidbody>().AddForce(Vector3.up * 1000f * JumpPow); 16 onGround = false; 17 checkjump = false; 18 } 19 }

こんな感じのコードで、if文を移動のプログラムに全てかけて、接地していない時はキーボードからの入力を受け付けないようにしています。

このスクリプトを適用しているキャラクターのrigibodyは
mass : 40
drag : 0
angular drag : 0.05
use gravity : true
is kinematic : false
interpolate : none
collision detection : discrete
です。

回答よろしくお願いします。

追記:なるべくAddForceは使いたくありません。

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

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

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

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

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

nskydiving

2020/02/26 23:59

「C++」のタグが付いていますが、「C#」の間違いではないでしょうか?
sakura_hana

2020/02/27 00:38

とりあえずmainSPEEDの値を確認してみてください。もし0になっているなら当然動きません。
syun625

2020/02/28 11:29

nskydivingさん、回答ありがとうございます。 C#ですね。 こちらのミスです… 訂正しました。
syun625

2020/02/28 11:33

sakura_hanaさん、回答ありがとうございます。 mainSPEEDの値はインタースペクター内で0.03になっています。
guest

回答2

0

ベストアンサー

そのスクリプトではキャラクターは勝手には動いてくれません。接地していない場合にも動いてほしければ、そのif文のelse節にキャラクターの位置を変更する処理を書きましょう。慣性の法則に従って動かすにはジャンプする直前の速度をどこかに保存しておく必要があるでしょうね。

投稿2020/02/27 04:00

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

syun625

2020/02/28 11:37

ciona1131さん、回答ありがとうございます。 了解しました。
guest

0

貴方のコードを尊重して直すならこうでしょうか?

Vector3 pos;//これだけ関数外に出してね。 pos = transform.position;//初期化の部分で忘れずに... Transform t = transform; if (onGround == true) { pos += t.TransformDirection(Vector3.forward) * Input.GetAxis("Vertical") * mainSPEED; pos += t.TransformDirection(Vector3.right) * Input.GetAxis("Horizontal") * mainSPEED; mainSPEED = tempSPEED; if (Input.GetKey(KeyCode.LeftShift) && Input.GetKey(KeyCode.W)) { mainSPEED = mainSPEED * 2; } } transform.position = pos; if (checkjump) { GetComponent<Rigidbody>().AddForce(Vector3.up * 1000f * JumpPow); onGround = false; heckjump = false; }

投稿2020/02/27 00:48

編集2020/02/27 00:50
stdio

総合スコア3307

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

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

syun625

2020/02/28 11:37

stdioさん、回答ありがとうございます。 こちらのプログラムを実行したところ、移動キーを一度押すと少しずつ下に下がったり、床を貫通してしまいました。
stdio

2020/03/02 00:54

それはジャンプと一切関係ないですね。 原因ですが、「transform.position = pos;」で、単に受け渡しているだけなので、y軸の補正がされていない事が原因ですね。受け渡し後に地面との衝突判定をつければ解決します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問