2014-01-18 14 views
6

にUnityからイベントをバック渡すことはできませんし、私はAndroidのライブラリJARのユニティプラグインを作成しようとしていますし、私は次の問題に直面しています:は、私はユニティではかなり新しいですアンドロイドライブラリjar

私がすることができます」 Androidのライブラリに戻るボタンのイベントを渡す方法を見つける。 Unityは、このイベントがライブラリレイヤに渡されることを防ぎます。私は何をするために管理していることは、私は道に戻るボタンイベントを渡すことはできませんしかしAndroidManifest

<activity android:name="com.unity3d.player.UnityPlayerProxyActivity" ... >に次の行

<meta-data android:name="unityplayer.ForwardNativeEventsToDal vik" android:value="true" /> 

を設定することで、Androidの側の活動へのタッチイベントを渡すことです私は、ライブラリのコードを変更する必要がないこと

私は私のスクリプトで今のやっていることは、私は、NEしかし

public void Update() { 

if(Input.GetKeyDown(KeyCode.Escape)) 
Application.Quit(); 
} 

です私がキャプチャしたバックイベントをライブラリに渡し、Unityレイヤーでそれを処理しないオプションを選択しました。

多分このように。

myActivity.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK)); 

またはこの

myActivity.onBackPressed() 

が、C#のスクリプトを使用して。スクリプト内でそれをどのように達成できますか?

答えて

8

C#スクリプト:

 void Update() 
    { 
      if (Input.GetKeyUp (KeyCode.Escape)) { 

        AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer"); 
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject> ("currentActivity"); 
        jo.Call ("yourBackEventFunction"); 
      } 

    } 

そして、あなたのAndroidのlib

public class YourActivity extends 
     com.unity3d.player.UnityPlayerNativeActivity { 
… 

    public void yourBackEventFunction() { 
     // Do something here 
    } 
… 
    } 

========================

編集:

あなたがonBackPressedを呼び出したい場合は、あなたがそうすることができます。

あなたができるYourActivity内

void Update() 
    { 
      if (Input.GetKeyUp (KeyCode.Escape)) { 
        Debug.Log ("onResume Received"); 
        AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer"); 
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject> ("currentActivity"); 
        jo.Call ("onBackPressed"); 
      } 

    } 

または::YourActivity.java

@Override 
public void onBackPressed() { 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      Toast.makeText(UnityPlayerNativeActivity.this, 
        "on Back Pressed", Toast.LENGTH_SHORT) 
        .show(); 
     } 
    }); 
    super.onBackPressed(); 
} 

INとC#のスクリプトで0

  1. があなたのYourActivityの作成は

  2. インクルードUnityPlayerNativeActivtyを拡張し、あなたのjar libとあなたが望む関数を呼び出します。

C#スクリプトを使用してアクティビティを呼び出します。

Unityには1つのアクティビティしかなく、UnityPlayerNativeActivityである必要があります。また、アクティビティEXTENDS FROM UnityPlayerNativeActivityである必要があります。 UnityPlayerNativeActivityから継承せずに、Jarの他のアクティビティを使用することはできません。

JAR内のYourActivityクラスがUnityPlayerNativeActivityを拡張している場合。 JARを変更したくない場合は、新しいActivityクラスを作成してYourActivityを拡張します。新しいJar +古いJarを作成し、新しいプラグインを作成します。

========================が

あなたは、JavaクラスのC#から直接関数を呼び出すしたい場合、あなたはまだやることができますそれは

libにこのサンプルをJNIを構築するには、Android NDKを使用してJavaコードが でAndroidのOSとどのようにC++は、C#とJavaの間のブリッジを作成をやりとりするために使用する方法を示しています。パッケージ内の シーンにはボタンが表示され、これをクリックすると、Android OSで定義されている アプリケーションキャッシュディレクトリがフェッチされます。 プラグインをコンパイルするには、JDKとAndroid NDKの両方が必要であることに注意してください。

ここに参考:ここhttp://docs.unity3d.com/Documentation/Manual/PluginsForAndroid.html

例:http://docs.unity3d.com/Documentation/Images/manual/AndroidJavaPlugin.zip

しかし、私はあなたがあなた自身のアクティビティを使用したりすることはできませんかはわかりません。また、UnityPlayerNativeActivtyから新しいActivity Extendsを作成することをお勧めします。これは、この方法が、この方法よりも単純で実用的ではないためです。

Brで、

フランク応答けど、私が持っているため

+0

おかげで参考として活動を受け取り、それに応じて取り扱う瓶です。あなたが記述した方法は、jarファイルを変更した場合にのみ機能します。とにかく、バックキーイベントをC#スクリプトを介してアクティビティレイヤに渡すことはありません。 – andreasv

+0

私の更新された回答を参照してください。あなたの問題を解決するのに役立つことを願っています。 –

関連する問題