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

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

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

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Q&A

1回答

696閲覧

UnityRemoteを利用したスライド操作の確認ができない(なぜか再生プラットフォームがWindowsEditorになる)

senseIY

総合スコア281

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

0グッド

0クリップ

投稿2022/09/25 05:34

編集2022/09/25 06:40

前提

unityremoteを利用してスマホの画面からでも正常に動作することを確かめようとしたが、なぜか再生プラットフォームがwindowsEditerになってしまい、再生プラットフォームをAndroidにすることができない

該当のソースコード(長いので必要な部分のみ updateの部分が問題の箇所)

cs

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class PlayerController : MonoBehaviour 6{ 7 [SerializeField] GameObject attackHit = null; 8 [SerializeField] ColliderCallReceiver footColliderCall = null; 9 [SerializeField] float jumpPower = 20f; 10 Animator animator = null; 11 Rigidbody rigid = null; 12 bool isAttack = false; 13 bool isGround = false; 14 bool isTouch = false; 15 float horizontalKeyInput = 0; 16 float verticalKeyInput = 0; 17 Vector2 leftStartTouch = new Vector2(); 18 Vector2 leftTouchInput = new Vector2(); 19 // Start is called before the first frame update 20 void Start() 21 { 22 animator = GetComponent<Animator>(); 23 rigid = GetComponent<Rigidbody>(); 24 attackHit.SetActive(false); 25 26 // FootSphereのイベント登録 27 footColliderCall.TriggerStayEvent.AddListener(OnFootTriggerStay); 28 footColliderCall.TriggerExitEvent.AddListener(OnFootTriggerExit); 29 } 30 31 // Update is called once per frame 32 void Update() 33 { 34 Debug.Log(Application.platform); 35 if (Application.platform == RuntimePlatform.Android || Application.platform == RuntimePlatform.IPhonePlayer) 36 { 37 Debug.Log("OSチェック"); 38 // スマホタッチ操作 39 // タッチしている指の数が0より多い 40 if (Input.touchCount > 0) 41 { 42 Debug.Log("タッチしている"); 43 isTouch = true; 44 // タッチ情報をすべて取得 45 Touch[] touches = Input.touches; 46 foreach (var touch in touches) 47 { 48 bool isLeftTouch = false; 49 bool isRightTouch = false; 50 if (touch.position.x > 0 && touch.position.x < Screen.width / 2) 51 { 52 isLeftTouch = true; 53 } 54 else if (touch.position.x > Screen.width / 2 && touch.position.x < Screen.width) 55 { 56 isRightTouch = true; 57 } 58 if (isLeftTouch == true) 59 { 60 // タッチ開始 61 if (touch.phase == TouchPhase.Began) 62 { 63 Debug.Log("タッチ開始"); 64 leftStartTouch = touch.position; 65 } 66 // タッチ中 67 else if (touch.phase == TouchPhase.Moved || touch.phase == TouchPhase.Stationary) 68 { 69 Debug.Log("タッチ中"); 70 Vector2 position = touch.position; 71 leftTouchInput = position - leftStartTouch; 72 } 73 // タッチ終了 74 else if (touch.phase == TouchPhase.Ended) 75 { 76 Debug.Log("タッチ終了"); 77 leftTouchInput = Vector2.zero; 78 } 79 } 80 if (isRightTouch == true) 81 { 82 83 } 84 } 85 } 86 else 87 { 88 isTouch = false; 89 // Debug.Log("何かしらが原因でAndroidプラットフォーム判定がされていない"); 90 } 91 } 92 else 93 { 94 Debug.Log("PC操作です"); 95 // PCキー入力取得 96 horizontalKeyInput = Input.GetAxis("Horizontal"); 97 verticalKeyInput = Input.GetAxis("Vertical"); 98 } 99 100 101 102

試したことや考察など

ある教材の通りに「プレイヤーをスマホのタッチ操作で移動させる」という作業をしています。ですが、上手く行きませんでした。

1 これまで行った操作に間違いがある可能性

・教材では、Device Simulatorを使用して作業をしていましたが、どうやら現在のUnity(2021.3.10f1)ではSimulatorが常設されたようなので、パッケージマネージャを使用してDevice SimulatorをインストールしなくてもSimulatorを操作できるようです。そのため、Device Simulatorのインストールの部分をスキップして作業を進めました。

・その後画像のような設定を行いました。
イメージ説明
・Unityremoteはこちらのサイトを参考に設定を確認しました

・buildsettingはAndroidになっています。

2 どこでエラー(意図せぬ挙動)が起きているのか

・デバッグログを仕込んだ(上のコードの通り)ところ、以下のことが判明しました。

・ Debug.Log(Application.platform);を記述すると、なぜか「WindowsEditor」が表示される。*本来なら、ここにAndroidが出てくる(と予想していた)。

・また、実際に接続しているAndroid端末では一応ボタンクリックによる操作は正常に動作していた。*これはスマホ上でwendows用のモードで動いていたから。

・Unityremoteを使用せずに実際にbuildして動作確認を行った際は上手く動いた(Android端末でクリック、フリック操作ができた。*今作成しているアプリケーションとは別のものではあるが)

 ここで詰まってしまいました。なぜ再生プラットフォームがAndroidにならないのでしょうか?何かしらアドバイスをいただければ幸いです。もし不備があれば追記いたします。よろしくお願いいたします。

追記 
恐らくプラットフォームをAndroidに出来れば正常に動作しそうです。ですが、現在buildsettingをAndroidに設定しているため、恐らくプラットフォームはAndroidになっているはずです。(実際にはWindowsになってしまっているようではあるが)現時点ではとりあえず、条件分岐を無視してスマホ専用に開発を進めています。

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

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

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

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

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

guest

回答1

0

公式マニュアルより

Unity Remote は、Unity エディター上でプロジェクトを再生中に Unity に接続することができます。

Unity Remoteとは? 実機での動作確認を簡単に行う方法」より

実際にゲームが動いているのはデバイスではなくUnityエディタ

これを読む限り、UnityRemoteでの動作は、UnityRemoteを使わずにエディタ上で再生をしたときと動作が同じであり、Application.platformRuntimePlatform.WindowEditor を返すのは特に問題ないと思います。
(ついでに言っておきますが、エディタ上での動作は、別に各プラットフォームのハードウェアをエミュレートしているわけではないので、(Windows上のエディタであれば)Windowsのハードウェアとして動作します。そのために、エディタ上の動作とビルド後の動作とを切り分けるために RuntimePlatformWindowsPlayerWindowsEditor という別々の定義が用意されているわけで)

ですので、

if (Application.platform == RuntimePlatform.Android || Application.platform == RuntimePlatform.IPhonePlayer)

この判定に WindowsEditor を加えればいいと思います。
(というか、この判定要ります?タッチデバイスがなければ、touchCount も常に 0 を返すのでは?この辺りは調べないとわかりませんが)

投稿2022/09/27 00:09

katsuko

総合スコア3469

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

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

senseIY

2022/09/27 11:21

回答していただきありがとうございます。添付して頂いたリンクをこちらからも参照させていただきました。 > これを読む限り、UnityRemoteでの動作は、UnityRemoteを使わずにエディタ上で再生をしたときと動作が同じであり、Application.platform が RuntimePlatform.WindowEditor を返すのは特に問題ないと思います。 (ついでに言っておきますが、エディタ上での動作は、別に各プラットフォームのハードウェアをエミュレートしているわけではないので、(Windows上のエディタであれば)Windowsのハードウェアとして動作します。そのために、エディタ上の動作とビルド後の動作とを切り分けるために RuntimePlatform も WindowsPlayer と WindowsEditor という別々の定義が用意されているわけで)  確かにおっしゃる通り、Simulatorを使用してAndroid端末に設定してもwindows上のエディタであればwindowsのハードウェアとして動作するようです。ですが、私の参考にした教材では以下のことが書かれていました。  次に、 再生 し て いる プラットフォーム ごと に 分岐 処理 を 書い て いき ます。 現在 再生 さ れ て いる プラットフォーム は RuntimePlatform platform = Application. platform; この よう に「 Application. platform」 で 取得 でき ます。 非常 に 多く の プラットフォーム に 対応 し て い ます ので すべて の 解説 は し ませ ん が、 今回 使用 する もの だけ 記載 し ます。 RuntimePlatform. WindowsEditor Window での UnityEditor での 再生 RuntimePlatform. OSXEditor Mac での UnityEditor での 再生 RuntimePlatform. Android スマホ Android での 再生 RuntimePlatform. IPhonePlayer スマホ IOS での 再生 となり ます。 今 までの よう に Editor 上 での 再生 では Windows なら「 RuntimePlatform. WindowsEditor」、 Mac なら「 RuntimePlatform. OSXEditor」 となり ます。 ここ で「 Device Simulator」 を 導入 し た 理由 が もう 一つ あっ て、 上記 の 画像 の よう に「 Device Simulator」 で 端末 を「 Iphone」 に し て いる と、 この「 Application. platform」 で 取得 できる プラットフォーム が「が「 RuntimePlatform. IPhonePlayer」 になり ます。 つまり Editor 上 でも、 スマ ホ で 再生 し て ます よ! って 状態 の テスト が でき ます。*教材より引用させていただきました  私はこの記述からSimulatorの設定をAndroidの端末にした場合も、同じように「Application.platform=Android」になると勝手に思い込んでいましたが、違うようです。(なぜAndroid端末でできないのかは不明。試しにsimulatorの設定をiphoneにしたが、windowseditorのままだった。buildsettingがAndroidなのが原因?または、パッケージマネージャで追加する場合と、常設されたSimulatorの仕様が違う可能性がある?) > (というか、この判定要ります?タッチデバイスがなければ、touchCount も常に 0 を返すのでは?この辺りは調べないとわかりませんが)  PCではキーボードでの移動、スマホではタッチ操作での移動というように、処理を切り替えてどちらの端末からの操作にも対応できるようにしたかったため、このような判定を加えました。
katsuko

2022/09/28 00:04

教材に、simulatorとUnityRemoteの併用使用について明記した上で、そのようなことが書いてあったのでしょうか。 質問を見て一番感じたことは、ちょっと物事を決めつけ過ぎでは、という点です。 特に問題が起きている場合には、あらゆることを想定して考えることが重要です。 (「教材に…」と書きましたが、動作が違えばそれさえも疑うべきです) ちょっと話がずれるかもしれませんが、ちょうど目についた記事なので。 https://it.srad.jp/story/22/09/26/1558227/ エンジニアとして欲しい人材は、「バグを出さない」と決めつけている人よりも、「バグがないか?」と疑える人なんですよ。 (そりゃ、いつまで経ってもバグを出し続ける人はお断りですが)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問