2016-08-11 12 views
1

Unity 5.4ユニティWebGL - 予防<Canvas>すべてのマウス/キーボード入力を食べるから?

すべての3DコンテンツをUnityサイドで処理するUnity WebGLアプリケーション(ゲームではない)を構築し、すべてのUIをHTML/CSS/JSを使用して構築します。デフォルトでは、WebGLInput.captureAllKeyboardInputは、任意のキーボードコントロールが自動的にではなく、入力フィールドに行くよりも、Unityが食い尽くされていると、壊れているキーボード(テキスト)の入力が必要な任意の入力フィールドを引き起こす、trueに設定されています。入力フィールドを持つ

#if !UNITY_EDITOR && UNITY_WEBGL 
WebGLInput.captureAllKeyboardInput = false; 
#endif 

修正問題をやってますが、要素はHTML上のキーボード入力するようにしかし、それは修正に

tabindex="1" 

を追加し、フォーカスされた後も、すべてのキーボード入力を無視するように団結を引き起こし入力フィールドはフォーカスされているときに機能し、Unity WebGLアプリ内のキーボードコントロールはフォーカスされたときにも機能します。 (これはすべてドキュメントの通りです:https://docs.unity3d.com/ScriptReference/WebGLInput-captureAllKeyboardInput.html)。それですべてうまく動作します。

しかし、ユニティWebGLのアプリケーションは依然としてMOUSE(ないキーボード)コントロールを使用して、いくつかの入力フィールドの問題を引き起こしています。つまり、入力タイプ= "範囲"フィールド(HTML5スライダ)と入力タイプ= "数字(キーボードを使用して数字を入力すると動作しますが、マウスを上下にクリックしないと表示されます)に気がつきました。

回避策の並べ替えは、要素がクリックされた場合を除き/(キーボードだけのコントロールの動作方法のように)最初に焦点を当て、私は基本的に、自動的にすべてのマウス入力を取らないためにユニティWebGLのキャンバスを防ぐ必要がありますか?これを修正する。何をユニティ側に変更しますこの問題を解決する?それとも私はすべての入力を処理し、それはユニティシーンやHTML UIを対象としていますかどうかを判断するためにいくつかのカスタムJavaScriptを記述する必要が行うには?

答えて

0

を私は同じ問題を抱えていたが、私は回避策を見つけたと信じて!元々私はOnApplicationFocusを使ってWebGLInput.captureAllKeyboardInputを切り替えようとしていました。しかしOnApplicationFocusはUnityのWebGLビルドでは動かないので、代わりにこれをやっています。

は、私はゲームがロードされたときも、最初のシーンで「GameControl」という名前のゲームオブジェクトに「GameControl」という名前のスクリプトを持っています。ウェブページ上

// In the Start function of this script I call a function on the webpage to let it know that the game has loaded. 
void Start() { 
    #if (UNITY_WEBPLAYER || UNITY_WEBGL) && !UNITY_EDITOR 
    try { 
     Application.ExternalCall("GameControlReady"); 
    } catch (System.Exception e) { 
     Debug.LogError("GameControlReady function not on webpage"+e); 
    } 
    #endif 
} 

// This function will be called from the webpage 
public void FocusCanvas (string p_focus) { 
    #if !UNITY_EDITOR && UNITY_WEBGL 
    if (p_focus == "0") { 
     WebGLInput.captureAllKeyboardInput = false; 
    } else { 
     WebGLInput.captureAllKeyboardInput = true; 
    } 
    #endif 
} 

、私は次のJavaScript持っている:私は

var gameReady = false; 

// Called by Unity in GameControl's start function 
function GameControlReady() { 
    gameReady = true; 
} 

function FocusCanvas(focus) { 
    if (gameReady) { 
     SendMessage("GameControl", "FocusCanvas", focus); 
    } 
} 

そして、Webページのheadセクションで

次きを

<script type='text/javascript'> 
    document.addEventListener('click', function(e) { 
     if (e.target.id == "canvas") { 
      // Clicked on canvas 
      FocusCanvas("1"); 
     } else { 
      // Clicked outside of canvas 
      FocusCanvas("0"); 
     } 
    }); 
</script> 
関連する問題