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

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

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

Q&A

解決済

1回答

2371閲覧

Androidのスマホでタッチしたところにキャラクターが移動しない

Wings-12

総合スコア18

0グッド

0クリップ

投稿2019/02/18 16:43

お世話になります。

現在タッチスクリーンをタップしたらキャラクターがそのタッチした場所に移動するスマホゲームを作っています。

問題は、Androidのスマホ上で、スクリーンをタッチしたところにキャラクターが移動するよう、
以下のように処理を作りましたが、Androidのスマホにビルドしたらスクリーンを
タッチしてもキャラクターがタッチした場所に移動せず、全く動かないことです。

下記画像のPlayer1オブジェクトにアタッチしたスクリプトの一部

C#

1void Update() 2 { 3 if (Input.touchCount > 0) 4 { 5 if (this.transform.position.y < BattleArea.myUpperSide) 6 { 7 Touch touch = Input.GetTouch(0); 8 Vector3 touchPosition = Camera.main.ScreenToWorldPoint(touch.position); 9 touchPosition.z = 10.0f; 10 this.transform.position = touchPosition; 11 } 12 }

BattleArea.myUpperSideの中身

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5namespace Common 6{ 7 public static class BattleArea 8 { 9 // 自エリア(ステージ)における各辺の座標 10 public const float myUpperSide = 195.0f; 11 public const float myLowerSide = -380.0f; 12 public const float myLeftSide = -690.0f; 13 public const float myRightSide = -190.0f; 14 } 15} 16

unity Remote 5を使った時は期待通りに動作しましたが、
実機では期待通りに動作しませんでした。

Vector3 touchPosition = Camera.main.ScreenToWorldPoint(touch.position);
の処理でCamera.main.ScreenToWorldPointを使っているので、
下記のUnity上の画像にあるように、Camera Previewか、Build And Run中に
No Cameras Renderingが表示されたことが問題かと思い、ネットで調べましたが、
解決策が見つかりませんでした。

イメージ説明

androidの実機上でもタップした場所にキャラクターを移動させるためには
どうしたらよいでしょうか。

どうかアドバイスをよろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

カメラに何も映っていないということはCanvasのRenderModeはOverlayで、
カメラ位置とCanvasの位置が大分離れていると予想します。
そしてuGUIは通常の座標系とは異なる座標で管理されます。
なので例示の方法だと正常動作しません。

【Unity】EventSystemsから受け取った座標をRectTransform.localPositionに設定する方法 - 神様は有休消化中です。
C# - Unityでドラッグ移動が可能なUIパネルを作りたいです。|teratail
この辺りを参考に直してみてください。

ちなみにNo Cameras Renderingは関係無いと思います。
Camera.main.ScreenToWorldPointはスクリーン座標からワールド座標に変換しているだけなので、描画されているかは関係無い)
このメッセージは無視するか、ダミーのオブジェクトでも映させればメッセージは消えるかと思います。

投稿2019/02/18 17:19

sakura_hana

総合スコア11427

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

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

Wings-12

2019/02/20 18:18

ご指摘のように、原因はCanvasのRenderModeはScreen Space - Overlayであったことでした。 ですので、Screen Space - Cameraにして、カメラをアタッチしたら解決しました。 ただ、可能であればアドバイスを頂きたいのですが、 なぜCanvasがカメラに映ると期待通り、タッチしたところにPlayer1GameObjectが移動するのでしょうか。 私なりに考えてみましたが、 デバッグ時はカメラにPlayer1GameObjectが映らなくても、期待通り動作したが、 ビルド後に期待通り動作しなくなったことと、 カメラにPlayer1GameObjectが映ったときは、ビルド後に期待通り動作したことから、 Touchクラスの処理はカメラにTouchクラスを使ったGameObjectを映していないと期待通り動作しないと思い、ネットで調べましたが、見つかりませんでした。 もしよろしければ助言をよろしくお願いします。
sakura_hana

2019/02/20 19:09

ソースコードそのままで動作しましたか? 多分Overlayの時も、オブジェクトは「カメラから見て正しい位置」に移動していたと思います。 ただそれは「Canvasから見ると描画範囲外」なので移動していないように見えていたものと思います。 Screen Space - Cameraだと、Canvas位置とカメラ位置が合致するので、 「カメラから見て正しい位置=Canvasから見て正しい位置」になり、正常に移動している、かつ正しく描画されている、となるのではないかと思います。 ……と思ってたんですが、UnityRemoteだと動いたんですね。不思議です。 検証用にOnGUIでPlayer1GameObjectの座標を常に表示するようにしておいて、どんな時にどんな座標移動をしているか(あるいは全く動いていないのか)を確認してもいいかもしれません。 (個人的にはTouchクラスの処理とオブジェクトが描画されているか否かは関係無いと思っていますが、検証したわけではないので)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問