2017-11-30 4 views
2

私はここに私のプロジェクトの小さなコードスニペットを持っています。これは、ドラッグアンドドロップメニューのスクリプトで使用されます。スクリプトはドラッグ可能なすべてのアイテムに添付されています。Unity3DのPlattform依存コンパイルはいつ有効ですか?

public void OnDrag(PointerEventData eventData){ 
    if (isPlantLocked()) 
     return; 

    #if UNITY_EDITOR 
     transform.position = Input.mousePosition; 
    #endif 

    #if UNITY_ANDROID 
     transform.position = Input.touches[0].position; 
    #endif 
} 

私はInput.touches.Lengthがゼロであるが、このコード領域は唯一のAndroid上で、すべてが正常に動作し、モバイル版で使用されるべきであること、例外(私はアイテムをドラッグして、すべてのフレーム)を取得します。

今、私の質問はどうすれば例外を取り除くことができますか、いつplattformの依存関係が機能しますか?

答えて

2

「ビルド設定」ウィンドウには、現在のランタイムプラットフォームを調整し、エディタ内であってもそれぞれのディレクティブのコンパイルをトリガーする「スイッチプラットフォーム」ボタンがあります。つまり、UNITY_EDITORはUnityアプリケーション自体で実行されているため、UNITY_ANDROIDUNITY_EDITORの両方を同時にtrueにすることができます。

入力タイプを確認しているので、最初はマウスのための入力タイプなので、UNITY_EDITORUNITY_STANDALONEに置き換えて、エディタでテストするときに正しい現在のプラットフォームが設​​定されていることを確認してください。

(スタンドアロンビルドを公開するつもりはありませんしていると、それが唯一の非PCプラットフォームを対象としています場合は、より良い)UNITY_EDITORに対する最初のチェックになり、その後、他のオプションに#else ifます別のオプション:

#if UNITY_EDITOR 
    transform.position = Input.mousePosition; 
#elif UNITY_ANDROID 
    transform.position = Input.touches[0].position; 
#endif 

この方法では、現在のプラットフォーム設定を取り替えることで、少し弛緩することができます。ビルド設定で選択されたエディタ、およびAndroidのプラットフォームである場合

1

、これらのコードの両方が動作します。あなたはエディタに特定Androidのコードを実行したくない場合は、次の操作を行うことができ

public void OnDrag(PointerEventData eventData){ 
if (isPlantLocked()) 
    return; 

#if UNITY_EDITOR 
    transform.position = Input.mousePosition; 
#endif 

#if UNITY_ANDROID && !UNITY_EDITOR 
    transform.position = Input.touches[0].position; 
#endif} 

ます。また、このhereについての詳細を読むことができます。

関連する問題