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

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

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

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

Unity

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

Q&A

0回答

614閲覧

unity2019.4.1f1 iOSビルド プレイヤー移動時のラグタイム

binga

総合スコア7

C#

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

Unity

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

0グッド

0クリップ

投稿2020/06/28 14:35

unity2019.4.1f1を使用し、シューティングゲームを作成しています。
unity上のカーソルキーでの移動は問題ないのですが、iOS用にビルドして、iPhone11pro実機にて動かすと、自機の移動にラグが生じます。
指を画面から離さずに移動する場合は問題なく移動するのですが、画面から一度指を離して再度移動しようとすると、一瞬ラグがあります。指を画面に触れさせてからちょっと間を置いて移動した場合はラグがありません。すなわち、タップした瞬間にラグがあるように感じます。他の方のシューティングゲームではそのようなことはないので、私のコードがおかしいのではないかと思います。どこを改善すればいいか、ご教授いただけないでしょうか?

unity

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class PlayerMovement : MonoBehaviour 6{ 7 Vector3 pos; 8 9 void Start() 10 { 11 } 12 13 void Update() 14 { 15 16 17 if (Application.isEditor) // キーボードでの移動(テスト)用 18 { 19 float moveH = -Input.GetAxis ("Horizontal") * 10; 20 float moveV = -Input.GetAxis ("Vertical") * 10; 21 22 transform.Translate(moveH, 0, moveV); 23 Clamp(); 24 } 25 else // スマホでの移動用 26 { 27 if (Input.touchCount > 0) 28 { 29 Touch touch = Input.GetTouch(0); 30 float MoveH = -touch.deltaPosition.x * Time.deltaTime * 10; 31 float MoveV = -touch.deltaPosition.y * Time.deltaTime * 10; 32 transform.Translate(MoveH, 0, MoveV); 33 Clamp(); 34 } 35 } 36 } 37 38 void Clamp() 39 { 40 pos = transform.position; 41 42 pos.x = Mathf.Clamp(pos.x, -5f , 5f ); 43 44 pos.z = Mathf.Clamp(pos.z, -11f , 11f); 45 46 transform.position = pos; 47 } 48}

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

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

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

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

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

sakura_hana

2020/06/29 04:30

勘ですが、一瞬だけInput.touchCountが2になっている(Input.GetTouch(0)は止まっていてInput.GetTouch(1)が動いている)可能性があるかもしれません。確認してみてください。
binga

2020/06/29 13:23

助言ありがとうございます。 確認しましたが、Input.touchCountは常に1でした。何度か試しましたが、2は一度も現れませんでした。(意図的に二本指でタッチした場合は2でした)
sakura_hana

2020/06/30 00:16

なるほど、とすると何が原因かよくわからないので、Input.touchCountやtouch.deltaPositionやtransform.positionの値もどうなっているか観察してみるといいかと思います。
U_U_Jenkins

2020/07/07 06:27 編集

Input.GetMouseButton(0)でも スマホでタップした時、マウスでクリックした時の判定をしてくれます。 こっちで試しても遅延は発生しますか?
binga

2020/07/07 14:12

助言ありがとうございます。 Input.GetMouseButton(0)は使ったことがないので、ちょっと調べてみたのですが、よくわかりませんでした。 しかしながら、マウスでっていうキーワードをいただきましたので、 float MoveH = -Input.GetAxis("Mouse X") * 0.1f; float MoveV = -Input.GetAxis("Mouse Y") * 0.1f; transform.Translate(MoveH, 0, MoveV); で試してみたところ、感度はかなりいいように感じました。 しかしながら、画面をタッチした際に、その直前に画面から指を離した場所と、新たにタップした場所の距離分をまずキャラが移動し、その後に画面上で指を移動させた分だけ移動するといった挙動になってしまいます。 直前の指を離した場所がどこであれ、タップした後の移動分だけキャラが移動してほしい場合はどうしたらいいでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問