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

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

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

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

Unity

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

Q&A

解決済

1回答

3995閲覧

Unityでプレイヤーをジャンプさせた後、地面に戻るのがゆっくりになる

kurira

総合スコア28

C#

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

Unity

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

0グッド

0クリップ

投稿2021/08/08 02:14

やりたいこと
Unityでプレイヤーが地面(ground)の上に立っていて、Addforceでジャンプさせるようにしました。
が、地面に降り立つときがふわっとゆっくり戻る感じになっていて、これをストンと地面に着地できるようにしたいです。

ソースコード

public float jump = 30f;//ジャンプ力 Rigidbody rb; private bool ground;//地面に着地したか判定する変数 void Start() { rb = GetComponent<Rigidbody>(); } void Update() { if (ground == true) { if (Input.GetKeyDown(KeyCode.Space))//スペースキーでジャンプ { ground = false; rb.AddForce(Vector3.up * jump); } } } private void OnCollisionEnter(Collision other)//地面に触れたときの処理 { if (other.gameObject.tag == "ground") { ground = true; } }

わからないこと
やりたいことにもあるように、ジャンプまではできたのですが、着地がうまくいかないことです。
ジャンプした後は、ストンと地面に戻る感じにしたいです。
今はジャンプした後、地面に戻るまでがゆっくりで、違和感があります。

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

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

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

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

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

guest

回答1

0

ベストアンサー

どのような構成でゲームを構築されようとしているのか不明ですので、勝手に想定して回答します。

Unity の Rigidbodyで Use Gravity をチェックすると、現実世界と同じく1G(9.8m/s^2) の下方加速度を得るようにできています。
ゆっくり落ちているように感じるかもしれませんが、これはゲームの箱庭世界のサイズが現実世界より小さく見えることから起こる錯覚です。
例えば、FPS画面で自キャラをジャンプさせてみれば、ゆっくり落ちているようには感じないはずです。
しかし、実際のところきびきびと動かさなければならないTPSのアクションゲームでは、確かに1Gの重力加速度ではもっさりと感じてしまうかもしれません。

ふわっをストンにする解決方法

(1) 重力加速度を変更する。
この場合、上方に対するAddForceは、重力加速度に応じて抑制をかけられますからその調整も必要となります。
また、この方法はすべてのPhysicsに影響がでますので、あまりお勧めできません。

例:

C#

1Physics.gravity = new Vector3(0, -19.6F, 0); // Gを倍にする

(2) オブジェクトをスケールダウンする。
プレイヤーキャラのオブジェクトをスケールダウンさせ、それに合わせてカメラとの距離も近づけます。
重力加速度は変わりませんがスケールダウンによって見かけ上高加速で落ちるよう錯覚することになります。
スケールダウンによって、m(メートル:距離)の部分は小さくなりますが、s(秒:時間)の部分は小さくならないからです。
この方法は重力加速度を変更するよりも理解しやすい方法です。

(3) RigidbodyのGravityを使用せず自前で制御する。
プレイヤーキャラには Rigidbodyの Gravityを使用せず、自前のスクリプトで処理します。
例えば、CharacterControllerコンポーネントを使用してプレイヤーキャラにのみ異なる重力加速度を設定します。移動にはCharacterController.Move() を用いて行います。
プレイヤーキャラを操作するとき、しばしばリアルではありえない動作をさせることもありますので、この方法が一般的かと思います。
リファレンスマニュアルにサンプルがありますので、そちらを参照するとよいでしょう。

投稿2021/08/09 03:27

monmoko

総合スコア202

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

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

kurira

2021/08/13 05:16

PCの調子が悪くなってしまい、確認遅くなってしまいましたすみません! ご丁寧に解答ありがとうございます。試してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問