LoginSignup
4
3

More than 5 years have passed since last update.

タッチで反応が無いのはEventSystemが無いのが原因

Posted at

ハマってしまった事とその対処過程・気づきをメモ。

ジョイスティックを追加してバリバリ開発していたのですが、
いつの間にか動作しなくなっていた問題。

ひとまず、ボタンを押して反応するかぐらいの
簡単なものを作成する工程に立ち返ってみることにしました。

【簡単なものを作る】

↓こちらを参考にさせていただきました!
uGUIでボタンのクリックイベントを取得
ありがとうございます。

  1. (何もインポートせず) New Projectを作成する
  2. Hierarchy > UI > Button でボタンを作成する
  3. 下記C#スクリプトを作成し、先ほど作成したボタンにAdd Componentする
TestButtonClick
using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class TestButtonClick : MonoBehaviour {

    // Use this for initialization
    void Start () {
        Debug.Log("Start()");
    }

    // Update is called once per frame
    void Update () {

    }

    /// ボタンをクリックした時の処理
    public void OnClick() {
        Debug.Log("Button click!");
    }

}

これだと、押せているのかどうか端末側からは確認できないので、
画面にログを出力するようにします。

↓こちらを参考にさせていただきました。
【Unity】 ゲーム画面でログを出力する機能
ありがとうございます!

↑より、
NyDebug.csと
NyDebugTest.csを作成し、
先ほど作成したボタンに順にAdd Componentします。

※ ここまでで追加したcsファイルは、すべてAssetsフォルダ直下に投げ込んでいます。
フォルダ振り分けなどは各自の環境でご対応ください。



【動作確認する】

ひとまず、簡単なものはできたので
各プレイヤーで確認します。

・Build Settings > Web Player にスイッチ

iOS Unity Remoteでタッチ操作が効く、のを確認できました。
(手持ちのAndroid端末が働いてくれないので、
バンバン働いてくれるiPad miniで確認します)

・Build Settings > Android にスイッチ

iOS Unity Remoteでタッチ操作が効かない、のを確認できました。
Android端末にインストールするとタッチ操作が効く、のを確認できました。
(この後、Web Playerにスイッチしましたが
iOS Unity Remoteでタッチ操作が効かない、ままでした)

※ Player Settings > Default Orientation > Landscape Right
にして書き出しています。

-> Android優先で作る場合は
iOS Unity Remoteはやらないほうがよさそう
(リモートはあまり安定していない気がするが、いちいちインストールする手間は省ける)



【続いて本題に...】

期待する動作:ジョイスティックをタップして反応するかどうか

Menu > Assets > Import Package > CrossPlatformInput
で、CrossPlatformInputをインポートし、
MobileStickSingleControlをHierarchyに追加します。

こちらも上記過程と同様にAndroid端末にて
期待する動作を確認できました。
(ジャンプボタンは未確認ですが動いてるはず?)

というか、Unityのエディタ上のGame画面でマウスクリックで動きますね(Build Settings > Androidにて)

続いて、
CrossPlatformInputのように
Charactersをインポートし、
ThirdPersonCharacters < Prefabs < ThirdPersonControllerをHierarchyに追加します。

→ 期待する動作を確認できました。

ここで、不要そうなファイルを消しつつ
期待する動作となるかを確認していきます。

‥‥ EventSystemを削除すると
期待する動作にならなくなりました。

ハッ!!(;゚Д゚)

(またしょーもないことでハマってしまった。。



【結論】

EventSystemは大事!!
Hierarchyから EventSystem を消すと期待する動作にならなくなっていました。
この EventSystem は、
Hierarchy > UI > Button でボタンを作成した際に
同時にHierarchyに追加されます。
StandardAssetsをインポートしてプレハブを読み込んだ時には存在しないので、
上記の期待する動作とならない
ということでした。
(逆に最初はなぜいけていたのかは闇)

↓こちらに記述がありました。
Unity5版Standard Assetsを使って仮想ジョイスティックを実装



【メモ】

・apkのインストールにDropboxを使う場合は、
Dropboxの設定からキャッシュ削除をする
(多分ないとは思いますがキャッシュをインストールして「何も変わんないなぁ」とか言う無限ループになっているかと思うと恐いので念のため)



【余談】

・未知のことが多い。嘆いていても仕方ないので日々勉強!
・そろそろJelly BeanからLolipopに乗り換えたい。
3年ぐらい前の端末なのでメモリもダメダメで非常に重い。



4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3