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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Unity

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

Q&A

解決済

2回答

3210閲覧

ビルドすると移動速度が速い

k_fujimiya

総合スコア2

Unity

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

0グッド

0クリップ

投稿2021/04/18 12:34

編集2021/04/19 13:13

Updateメソッドの中で

move = move.normalized * Time.deltaTime * SPEED; cc.SimpleMove(move);

とTime.deltaTimeを使って移動処理を書いているにもかかわらず
エディタ上で実行した時と、ビルド後に実行したもので移動速度が違います。
具体的にはビルド後の方が(体感で)3倍くらい早くなります。

Exeに書き出しても、WebGLに書き出しても同じくらいの速度です。
エディタ上でも同じ速度で動かすにはどうすればいいのでしょうか。

バージョンは2019.4.13を使っています。

追記

Update関数の中身は次の通り

void Update() { float x = Input.GetAxis("Horizontal"); float z = Input.GetAxis("Vertical"); Vector3 moveFront = transform.forward * z; Vector3 moveRight = transform.right * x; Vector3 move = moveFront + moveRight; move = move.normalized * Time.deltaTime * SPEED; cc.SimpleMove(move); text.GetComponent<Text>().text = "Time.deltaTime = " + Time.deltaTime + "\nmove.magnitude = " + move.magnitude; }

実行した時の出力結果は次の通りでした
イメージ説明 ←エディタ
イメージ説明 ←Exe

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

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

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

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

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

sakura_hana

2021/04/19 00:22

まずmoveの大きさをText等に表示させてエディタと実機上で違いがあるか確認してみてください。 また、他の部分でCharacterControllerを動かしている部分が無いか確認してみてください。
k_fujimiya

2021/04/19 13:14

ありがとうございます。 表示結果とコードを追加しました。 数値上は合ってるように見えます…。
guest

回答2

0

ベストアンサー

SimpleMoveはその引数に「速度(メートル/秒)」を取ります。
CharacterController-SimpleMove - Unity スクリプトリファレンス
60fpsでも30fpsでも与える速度は一定でなければならないので、Time.deltaTimeを掛け算してはいけません。

もしSimpleMoveの代わりにMoveを使う場合、引数に「方向(ベクトル)」を取ります。
CharacterController-Move - Unity スクリプトリファレンス
Update内で使う場合は「1フレーム毎にどの方向にどれだけの距離進むか」を示すので、こちらは**Time.deltaTimeを掛け算する必要があります。**
もし掛けない場合、例えば60fpsなら1秒間に60m、30fpsなら1秒間に30m進むことになるので実質移動速度が変わります。

(ドキュメントを再確認したところ質問への追記・修正での指摘は少々的外れでした。申し訳ありません)

投稿2021/04/20 00:59

編集2021/04/20 01:05
sakura_hana

総合スコア11427

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

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

k_fujimiya

2021/04/20 05:05

なるほど! SimpleMoveの方の仕様だったんですね。盲点でした。 SimpleMoveとMoveで渡す値の大きさが違うのも気になっていましたが、すべて納得できました! ありがとうございます!!
guest

0

「Time.deltaTime」
を使うと、端末によって、時間が変わってきます。
Time.deltaTimeってなんなん?

なぜかというと、
FPSとかしてる時にもしそのPCが重かったら、カクカクしますよね?

それと同じことで、

端末によって移動速度が変わってきちゃいます。

ちなみに、エディター上での動作はプレビューみたいな感じなので、移動速度が結構変わります。

もし、Time.deltaTimeを使いたいのであれば、
計算した方が良いと思います!!

僕は、語彙力が皆無なので、わからなかったところは質問どんどんしてください!

投稿2021/04/19 13:24

RYUGONSP

総合スコア81

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

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

k_fujimiya

2021/04/20 05:06

Time.timeというのもあるんですね! 勉強になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問