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

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

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

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

Q&A

解決済

1回答

1490閲覧

rigidbody2d.MovePositionにて移動距離をピクセル数で指定してはダメですか?

Suou

総合スコア11

Unity

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

0グッド

1クリップ

投稿2021/10/10 20:03

Unity2Dにて2Dオブジェクトを移動させたいと思い、rigidbody2d.MovePositionによって移動が出来るということで以下のようなスクリプトを作りました。

public class Move : MonoBehaviour { private Rigidbody2D rb; private Vector2 position; void Start() { rb = GetComponent<Rigidbody2D>(); } public void Move(float xMovePixel, float yMovePixel) { position = rb.position; position.x += xMovePixel; position.y += yMovePixel; rb.MovePosition(position); } }

このMoveスクリプトを動かしたい2Dオブジェクトにアタッチし、別にアタッチしているキャラクターコントローラースクリプトから移動ピクセル数を指定してMoveメソッドに渡して移動させます。
(右に4ピクセル移動させたい場合はxMovePixelに4.0fを渡します)
実際これで問題なく移動はするのですが、rigidbody2d.MovePositionの使い方を見てみるとピクセル数を指定して加算するのではなく、速度を渡してそこにTime.deltaTimeをかけた距離を加算して動かしています。
ピクセル数の方が分かりやすいと思ったのですが、rigidbody2d.MovePositionを使う際にピクセル数を指定して動かすという考え方は処理的によろしくないでしょうか?
細かい用語の使い方が間違っているかもしれませんが、ご回答の程よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Update関数内で実行することになると思いますが、Upadate関数内で実行する場合は1フレームごとに実行されます。1フレームの時間かデバイスによって異なります。Update一回でx方向に4移動するようにしてしまうと、Update間隔が短いデバイスの場合は移動速度が速くなり、Update間隔が長いデバイスの場合は移動速度が遅くなってしまいます。

従って多くのアプリでは、デバイスの影響を受けないようにTime.deltaTimeを用いてUpdate間隔で補正をかけています。

投稿2021/10/12 00:26

YOshim

総合スコア1085

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

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

Suou

2021/10/12 16:57

ご回答有難うございます(Update関数内で実行することを書き忘れてしまい申し訳ございません) やはりTime.deltaTimeを使ったほうがいいとのことで、Time.deltaTimeを用いた実装にします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問