gpt4 book ai didi

android - 无法将事件从 Unity 传回 android 库 jar

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:47:18 28 4
gpt4 key购买 nike

我是 Unity 的新手,我正在尝试为 Android 库 jar 创建一个 Unity 插件,但我面临以下问题:

我找不到将后退按钮事件传递给 Android 库的方法。似乎Unity阻止了这个事件被传递到库层。我设法做的是通过设置以下行将触摸事件传递给 Android 端的 Activity

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

<activity android:name="com.unity3d.player.UnityPlayerProxyActivity" ... >在 AndroidManifest 中

但是我无法以不必更改库中代码的方式传递后退按钮事件

我现在在我的脚本中做的是

public void Update() {

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

但是,我需要选择将我捕获的那个返回事件传递给库,而不是在 Unity 层处理它。

也许是这样的。

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

或者这个

myActivity.onBackPressed() 

但通过 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");
}

}

还有你的 Android 库

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


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

}

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

编辑:

如果你想调用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();
}

在 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");
}

}

或者在 YourActivity 中你可以:

  1. 创建你的 YourActivity 扩展 UnityPlayerNativeActivty

  2. 包含您的 Jar 库并调用您想要的函数。

使用 C# 脚本调用您的 Activity 。

请注意,在 Unity 中,只有 1 个 Activity,并且它必须是 UnityPlayerNativeActivity 或者它必须是一个 Activity EXTENDS FROM UnityPlayerNativeActivity。如果不从 UnityPlayerNativeActivity 扩展,您不能使用 Jar 中的任何其他 Activity 。

如果 JAR 中的 YourActivity 类扩展了 UnityPlayerNativeActivity。并且您不想更改 JAR,然后创建一个新的 Activity 类扩展 YourActivity。创建一个新的 Jar + 旧的 Jar 并制作一个新的插件。

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

如果你想直接从 C# 调用函数到 Java 类,你仍然可以通过使用 Android NDK 构建 JNI 库来实现

This sample demonstrates how Java code can be used to interact with the Android OS and how C++ creates a bridge between C# and Java. The scene in the package displays a button which when clicked fetches the application cache directory, as defined by the Android OS. Please note that you will need both the JDK and the Android NDK to compile the plugins.

此处引用:http://docs.unity3d.com/Documentation/Manual/PluginsForAndroid.html

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

但我不确定您是否可以使用自己的 Activity。我建议从 UnityPlayerNativeActivty 创建一个新的 Activity Extends,因为这种方式比这种方式更简单和难以理解。

弗兰克

关于android - 无法将事件从 Unity 传回 android 库 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21206615/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com