🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Unity3D

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

Q&A

解決済

2回答

1957閲覧

velocityでyの値を変更する時と変更しない場合で移動速度が変わる原因とは?

退会済みユーザー

退会済みユーザー

総合スコア0

Unity3D

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

0グッド

0クリップ

投稿2019/09/28 18:52

編集2019/09/29 01:35

提示コード「/////////////ここのコードです。」
質問 なのですがなぜ移動できなくなるのでしょうか?毎フレームgrivity_forceの値を-10ずつ加算したいのでそうすると移動できず固定されてしまいます。

※また new vector3(0,gravity_force,0);の加算処理を無くすと移動速度がwalk_speedの値を思われる正常の値?で移動されます。

using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour { private float input_h; private float input_v; private Vector3 move; private Rigidbody rb; private Animator ani; /*調整量関係*/ private float gravity_force = -10.0f; private const float walk_speed = 20.0f;//移動速度 private const float jump_force = 40.00f; /*状態判定 系*/ private bool isJump; private bool isGround; // Use this for initialization void Start() { rb = GetComponent<Rigidbody>(); ani = GetComponent<Animator>(); isJump = false; isGround = false; } // Update is called once per frame void Update() { f_Animation(); input_h = Input.GetAxis("Horizontal"); input_v = Input.GetAxis("Vertical"); Vector3 move_x = new Vector3(); Vector3 move_z = new Vector3(); //Vector3 move_y = new Vector3(0,-10.0f,0); move_z = Vector3.Scale(Camera.main.transform.forward, new Vector3(1, 0, 1)).normalized * input_v * walk_speed; move_x = Camera.main.transform.right * input_h * walk_speed; move = move_x + move_z; Vector3 v = Vector3.Scale(move, new Vector3(1, 0, 1)); if (v != Vector3.zero) { transform.rotation = Quaternion.LookRotation(v.normalized); } gravity_force += -10.0f; rb.velocity = move + new Vector3(0,gravity_force,0);///////////ここのコードです。 //rb.velocity = move; Debug.Log(rb.velocity); } /*移動*/ void f_Move() { } /*アニメーション管理*/ void f_Animation() { float speed = Mathf.Sqrt((move.z * move.z) + (move.x * move.x)); // ani.SetFloat("Walk_Speed", speed); ani.SetFloat("Run_Speed", speed); // ani.speed = speed / 10; } void OnCollisionEnter(Collision c) { isGround = true; isJump = false; // gravity_force = 0; rb.velocity = new Vector3(0,0,0); // rb.velocity = new Vector3(rb.velocity.x, 0, rb.velocity.z); //rb.velocity = new Vector3(rb.velocity.x, 0, rb.velocity.z); } }

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

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

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

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

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

rintarou1234

2019/09/29 04:07

試しに rb.velocity = move + new Vector3(0,gravity_force,0); のところを rb.MovePosition(transform.position + (move + new Vector3()0, gravity_force, 0)); にしても固定されるか教えてもらってもいいですか? またRigidBodyコンポーネントのConstraintsのFreeze Positionのチェックが入っていませんか?入っていたらたぶん外さないと動かないです。
simapiko

2019/09/30 04:42

単純にY軸への力の加えすぎです。 毎フレーム増加するY軸の力によって押さえつけられることによって移動が出来なくなっています。 また、velocityの値を直接操作は推奨されていません。(前回の質問でも同じ指摘をされているはず) 同様に自身の回答がついている質問を未解決のまま放置するのはよくありません。解決しているのであれば解決済みにし、未解決なのであれば回答者とやり取りをし解決してください。 未解決のまま、ノーリアクションなのは回答者に失礼に値します。
guest

回答2

0

ベストアンサー

何度も何度もすみません。たぶん解決できました(自信がないですが…)
gravity_force += -10.0f;
rb.velocity = move + new Vector3(0,gravity_force,0);
のところを
move.y += -10.0f;
rb.velocity = move;
と書き換えたら動きました。

Vector3どうしの足し算がどうなっているかはわかりませんでしたが、たぶんこれで動くと思います。
何回も何回も書き込んでしまい、本当にすみませんでした。

投稿2019/09/29 05:05

rintarou1234

総合スコア157

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

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

0

一番下にあるOnCollisionEnter関数なのですが、調べたところこれはほかのRigidBodyかColliderをもったオブジェクトに触れたときに走る関数だそうです。

C#

1void OnCollisionEnter(Collision c) 2 { 3 isGround = true; 4 isJump = false; 5 6 // gravity_force = 0; 7 rb.velocity = new Vector3(0,0,0); 8 // rb.velocity = new Vector3(rb.velocity.x, 0, rb.velocity.z); 9 //rb.velocity = new Vector3(rb.velocity.x, 0, rb.velocity.z); 10 }

ここのコードの
rb.velocity = new Vector3(0,0,0);
RigidBody.velocityは速度を直接書き換える関数なので、動かないんだと思います。
試しにここを//かなんかで消してみてください。
それでもだめだったらまた考えてみます。

それと蛇足になるのですがもう少しコメントをコードに書いていただけると、回答するとき助かります。
将来的にあなたが見返した時にも必要になると思うので、書いとくといいですよ('ω')

投稿2019/09/29 04:19

編集2019/09/29 04:39
rintarou1234

総合スコア157

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

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

rintarou1234

2019/09/29 04:36

本当にすみません! 間違えていました!もう少し考えます!ごめんなさい
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問