and*_*asv 6 android jar back unity-game-engine
我是Unity的新手,我正在尝试为Android库jar创建一个Unity插件,我面临以下问题:
我找不到将后退按钮事件传递给Android库的方法.Unity似乎阻止将此事件传递给库层.我设法做的是通过设置以下行将触摸事件传递到Android端的活动
<meta-data android:name="unityplayer.ForwardNativeEventsToDal vik" android:value="true" />
Run Code Online (Sandbox Code Playgroud)
在<activity android:name="com.unity3d.player.UnityPlayerProxyActivity" ... >AndroidManifest中
但是,我不能以我不必更改库中的代码的方式传递后退按钮事件
我现在在剧本中做的是
public void Update() {
if(Input.GetKeyDown(KeyCode.Escape))
Application.Quit();
}
Run Code Online (Sandbox Code Playgroud)
但是,我需要选项将我捕获的返回事件传递给库,而不是在Unity层处理它.
也许不知何故这样.
myActivity.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
Run Code Online (Sandbox Code Playgroud)
或这个
myActivity.onBackPressed()
Run Code Online (Sandbox Code Playgroud)
但是通过C#脚本.我怎样才能在脚本中实现这一目标?
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");
}
}
Run Code Online (Sandbox Code Playgroud)
还有你的Android库
public class YourActivity extends
com.unity3d.player.UnityPlayerNativeActivity {
…
public void yourBackEventFunction() {
// Do something here
}
…
}
Run Code Online (Sandbox Code Playgroud)
========================
编辑:
如果你想调用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();
}
Run Code Online (Sandbox Code Playgroud)
在C#脚本中:
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");
}
}
Run Code Online (Sandbox Code Playgroud)
或者在YourActivity内部,您可以:
创建YourActivity扩展UnityPlayerNativeActivty
包括你的Jar lib并调用你想要的功能.
使用C#脚本调用您的活动.
请注意,在Unity中,只有1个Activity,它必须是UnityPlayerNativeActivity,或者它必须是来自UnityPlayerNativeActivity的Activity EXTENDS.如果没有UnityPlayerNativeActivity的扩展,您不能使用Jar中的任何其他活动.
如果JAR中的YourActivity类扩展了UnityPlayerNativeActivity.并且您不想更改您的JAR,然后您创建一个新的Activity类扩展YourActivity.创建一个新的Jar +旧Jar并制作一个新的插件.
========================
如果要直接从C#调用函数到Java类,您仍然可以使用Android NDK构建JNI库来实现
此示例演示了如何使用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
但我不确定你是否可以使用自己的Activity.我建议从UnityPlayerNativeActivty创建一个新的Activity Extends,因为这种方式比这种方式更简单,更不可靠.
BR,
坦率
| 归档时间: |
|
| 查看次数: |
3908 次 |
| 最近记录: |