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

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

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

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

Unity

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

Q&A

1回答

6389閲覧

移動とジャンプがなぜ出来ないか分からない

wonwon

総合スコア13

C#

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

Unity

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

0グッド

0クリップ

投稿2016/12/17 02:31

###前提・実現したいこと
Unityでアクションゲームを作るためにプレイヤーを動かしたい
###発生している問題・エラーメッセージ
十字キーで動かそうとしても、spaceでジャンプしようとしてもほとんど動きません。

###該当のソースコード using UnityEngine; using System.Collections; public class UnityChanMove : MonoBehaviour { public float speed; public float jumpPower; public GameObject MyCamera; //カメラの向きでプレイヤーの動く向きを決めたい Vector3 move; // Use this for initialization void Start () { move = new Vector3(0, 0, 0).normalized; } // Update is called once per frame void Update () { move.x = 0.0f; move.z = 0.0f; float Hor = Input.GetAxisRaw("Horizontal"); float Ver = Input.GetAxisRaw("Vertical"); if (Hor == 1 ) { transform.rotation = Quaternion.Euler(0.0f, 90.0f, 0.0f); move.x += MyCamera.transform.right.x * speed; } if (Hor == -1) { transform.rotation = Quaternion.Euler(0.0f, -90.0f, 0.0f); move.x += MyCamera.transform.right.x * -1.0f * speed; } if (Ver == 1) { transform.rotation = Quaternion.Euler(0.0f, 0.0f, 0.0f); move.z += MyCamera.transform.forward.z * speed; } if (Ver == -1) { transform.rotation = Quaternion.Euler(0.0f, 180.0f, 0.0f); move.z += MyCamera.transform.forward.z * -1.0f * speed; } if (Input.GetKeyDown("space")) { move.y += jumpPower; } move.y += Physics.gravity.y; GetComponent<Rigidbody>().velocity = move * Time.deltaTime; } }

###試したこと
speedの値を1000ぐらいにすると最初は動くがだんだん動かなくなる。
jumpPowerの値を500ぐらいにすると一回目はジャンプするが、
二回目以降spaceを連続で押さないとジャンプしなくなる。
###補足情報(言語/FW/ツール等のバージョンなど)
MyCamera変数はカメラの向きでプレイヤーの動く向きを決めたかったので付けました。
move変数に動く向きと速さを入れて最後にまとめてRigidBodyのvelocityに代入しています。
RigidBodyコンポーネントをつけてますが、useGravityは使ってません。
RigidBodyコンポーネントのFreezeRotationのX,Y,Zすべてにチェックしてます。
C#です。

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

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

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

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

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

guest

回答1

0

Inputによる値を、Rigidbodyのvelocityに与えてしまっているのが原因だと思います。
velocityは速度なので、力を与えているわけではありません。

今回の例で移動させたい場合は、RigidbodyのMovePositionを使うとうまくいくと思います。
https://docs.unity3d.com/ja/current/ScriptReference/Rigidbody.MovePosition.html

ちなみに、物理エンジンによる挙動で動作させたい場合は、直接移動させるのではなく、「力を加える」という発想で動かさないとなりません。
(箱を手で押す、ボールをバットで叩く、など)

その場合はAddForceを使う必要

投稿2016/12/17 02:49

edo_m18

総合スコア2283

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問