18869


・意図する動作  
バックボタンを押したときに・・・  
ポップアップがあれば、それを消す  
なければアプリを終了

・実際の動作  
バックボタンを押すと、ポップアップの有無に関わらず、アプリ終了

テストの為、ボタンクリックでの処理も行いました（ボタンを押したときに同様の処理をする）  
このボタン動作の場合には意図通りに動きます。  
ですが、バックボタンの処理を Update() 内で書いたときには意図通りに動きません。

予想：バックボタンは1クリックしかしていないのに、クリックを何回もしているような処理になっている気がする。Update（） のせい？

ドコがおかしいのでしょうか。

以下ソース

テスト用ボタンクリック

[code]

    public void Onclick () {
        if(MyCanvas.IsActive ("ScrollController")){//アクティブなら
            Debug.Log("ScrollController");
            MyCanvas.SetActive ("ScrollController", false);//非アクティブにする
        }else if(MyCanvas.IsActive ("ScrollController2")){//アクティブなら
            Debug.Log("ScrollController2");
            MyCanvas.SetActive ("ScrollController2", false);//非アクティブに
        }else if(MyCanvas.IsActive ("AboutPanel")){//アクティブなら
            Debug.Log("AboutPanel");
            MyCanvas.SetActive ("AboutPanel", false);//非アクティブに
        }else{
            Debug.Log("Quit");
            Application.Quit();
        }
    }
    
[/code]

実際のバックボタン用コード

[code]

    void Update () {
        if (Application.platform == RuntimePlatform.Android) {
            if (Input.GetKey(KeyCode.Escape)) {
                if(MyCanvas.IsActive ("ScrollController")){//アクティブなら
                    Debug.Log("ScrollController");
                    MyCanvas.SetActive ("ScrollController", false);//非アクティブに
                }else if(MyCanvas.IsActive ("ScrollController2")){//アクティブなら
                    Debug.Log("ScrollController2");
                    MyCanvas.SetActive ("ScrollController2", false);//非アクティブに
                }else if(MyCanvas.IsActive ("AboutPanel")){//アクティブなら
                    Debug.Log("AboutPanel");
                    MyCanvas.SetActive ("AboutPanel", false);//非アクティブに
                }else {
                    Debug.Log("Quit");
                    Application.Quit();
                }
            }
        }
    }
    
[/code]


CC BY-SA 3.0
2015-11-14T19:44:43.843
18824
2015-11-16T03:31:18.903
2015-11-16T03:31:18.903
2079
12948
question
unity3d
unityでのAndroidバックボタンの挙動


Input.GetKey はキーを押してるあいだ何度も true になってしまいます。

意図する動作（バックボタンを１回押したら１回処理）にしたい場合は  
Input.GetKeyDown を使います。

他にも、キーを離した時に１回 true になる Input.GetKeyUp というのもあるので  
必要に応じて使い分けするのがいいと思います。


CC BY-SA 3.0
2015-11-16T02:55:22.317
18869
2015-11-16T02:55:22.317
2079
18824
answer