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

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

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

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

Unity

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

Q&A

解決済

1回答

4938閲覧

Unity C# ジャンプを実装したい

yukineko184

総合スコア16

C#

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

Unity

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

0グッド

0クリップ

投稿2019/02/08 03:20

前提・実現したいこと

Unityで3Dオブジェクトを自然にジャンプさせたい

発生している問題・エラーメッセージ

上方向(Y軸)を加算することはできるのですが、そこから自然な重力がかけられなくて困っています。

エラーは出ていません

該当のソースコード

C#

1 public class NewBehaviourScript : MonoBehaviour { 2 3 private GameObject char_in; 4 private Rigidbody char_rb; 5 bool pause_flag; 6 float move_x; 7 float move_z; 8 float rota_y; 9 float rota_x; 10 float mouse_x; 11 float mouse_y; 12 public float jumpspeed; 13 public float gravity; 14 public float speed = 2.0f; 15 public float sensi = 2.0f; 16 17 void Start() 18 { 19 char_in = GameObject.Find("Charainner"); 20 char_rb = GetComponent<Rigidbody>(); 21 pause_flag = false; 22 } 23 24 void Update() 25 { 26 mouse_x = Input.GetAxis("Mouse X"); 27 mouse_y = Input.GetAxis("Mouse Y"); 28 rota_y = mouse_x * sensi; 29 rota_x = mouse_y * sensi * -1f; 30 transform.Rotate(0, rota_y, 0); 31 char_in.transform.Rotate(rota_x, 0, 0); 32 33 move_x = 0f; 34 move_z = 0f; 35 if (Input.GetKey(KeyCode.D)) 36 { 37 move_x += speed; 38 } 39 if (Input.GetKey(KeyCode.A)) 40 { 41 move_x -= speed; 42 } 43 if (Input.GetKey(KeyCode.W)) 44 { 45 move_z += speed; 46 } 47 if (Input.GetKey(KeyCode.S)) 48 { 49 move_z -= speed; 50 } 51 if (Input.GetButton("Jump")) 52 { 53 char_rb.AddForce(Vector3.up * jumpspeed); 54 } 55 char_rb.velocity = move_z * transform.forward + move_x * transform.right; 56 57 if (pause_flag) 58 { 59 Cursor.visible = true; 60 Cursor.lockState = CursorLockMode.None; 61 } 62 else 63 { 64 Cursor.visible = false; 65 Cursor.lockState = CursorLockMode.Locked; 66 } 67 if (Input.GetKey(KeyCode.Escape)) 68 { 69 pause_flag = true; 70 } 71 } 72 73 void FixedUpdate() 74 { 75 char_rb.AddForce(Vector3.down * gravity, ForceMode.Acceleration); 76 } 77}

試したこと

Unityの設定で重力の値を上げたりしましたが駄目でした。

補足情報(FW/ツールのバージョンなど)

Unity2018.2.5f1 Personal
Microsft Visual Stadio

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

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

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

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

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

guest

回答1

0

ベストアンサー

水平移動部分でchar_rb.velocityを書き換えていますが、そのために重力による速度増加も上書きされてしまっているものと思われます。さしあたり下記のように変更してみましたがいかがでしょうか?

C#

1using UnityEngine; 2 3public class NewBehaviourScript : MonoBehaviour { 4 5 private GameObject char_in; 6 private Rigidbody char_rb; 7 bool pause_flag; 8 float move_x; 9 float move_z; 10 float rota_y; 11 float rota_x; 12 float mouse_x; 13 float mouse_y; 14 public float jumpspeed; 15 public float gravity; 16 public float speed = 2.0f; 17 public float sensi = 2.0f; 18 19 void Start() 20 { 21 char_in = GameObject.Find("Charainner"); 22 char_rb = GetComponent<Rigidbody>(); 23 pause_flag = false; 24 } 25 26 void Update() 27 { 28 mouse_x = Input.GetAxis("Mouse X"); 29 mouse_y = Input.GetAxis("Mouse Y"); 30 rota_y = mouse_x * sensi; 31 rota_x = mouse_y * sensi * -1f; 32 transform.Rotate(0, rota_y, 0); 33 char_in.transform.Rotate(rota_x, 0, 0); 34 35 move_x = 0f; 36 move_z = 0f; 37 if (Input.GetKey(KeyCode.D)) 38 { 39 move_x += speed; 40 } 41 if (Input.GetKey(KeyCode.A)) 42 { 43 move_x -= speed; 44 } 45 if (Input.GetKey(KeyCode.W)) 46 { 47 move_z += speed; 48 } 49 if (Input.GetKey(KeyCode.S)) 50 { 51 move_z -= speed; 52 } 53 if (Input.GetButton("Jump")) 54 { 55 char_rb.AddForce(Vector3.up * jumpspeed); 56 } 57 58 // ここでvelocityをY成分も含めて全部上書きしてしまっているのがまずいかと思います 59 // char_rb.velocity = move_z * transform.forward + move_x * transform.right; 60 61 // ここはX、Z成分のみ書き換えて、Y成分は元の値を残しておいたほうがいいんじゃないでしょうか 62 var move = move_z * transform.forward + move_x * transform.right; 63 char_rb.velocity = new Vector3(move.x, char_rb.velocity.y, move.z); 64 65 if (pause_flag) 66 { 67 Cursor.visible = true; 68 Cursor.lockState = CursorLockMode.None; 69 } 70 else 71 { 72 Cursor.visible = false; 73 Cursor.lockState = CursorLockMode.Locked; 74 } 75 if (Input.GetKey(KeyCode.Escape)) 76 { 77 pause_flag = true; 78 } 79 } 80 81 // 重力による加速は自前で行わなくてもいい気がしますが、いかがでしょうか? 82 /* 83 void FixedUpdate() 84 { 85 char_rb.AddForce(Vector3.down * gravity, ForceMode.Acceleration); 86 } 87 */ 88}

投稿2019/02/08 17:07

Bongo

総合スコア10807

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

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

yukineko184

2019/02/12 06:14

上手く行きました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問