【问题标题】:dispatchKeyEvent does not trigger in Unity - Native Android plugindispatchKeyEvent 不会在 Unity 中触发 - 本机 Android 插件
【发布时间】:2019-08-09 19:22:12
【问题描述】:

我想在Android中触发onKeyUp或者dispatchKeyEvent,给keyPress的Unity3D发消息

我制作了一个 Java 原生插件:


public class VolumeKeyClass extends Activity {

    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        Log.d("Unity","onKeyUp UP");
        int action = event.getAction();
        switch (keyCode) {
            case KeyEvent.KEYCODE_VOLUME_UP:
                if (action == KeyEvent.ACTION_DOWN) {
                    Log.d("test", "Volume UP pressed! " + event);
             UnityPlayer.UnitySendMessage("MainController","logStatus","Volume up!!");
                }
                return true;
            case KeyEvent.KEYCODE_VOLUME_DOWN:
                if (action == KeyEvent.ACTION_DOWN) {
                    Log.d("test", "Volume DOWN pressed! " + event);
                    UnityPlayer.UnitySendMessage("MainController","logStatus","Volume Down!");
                }
                return true;
            default:
                return super.dispatchKeyEvent(event);
        }
    }

已经测试了Unity和插件之间的通信,可以正确登录消息,但是onKeyUp和dispatchKeyEvent都没有触发发送消息,Logcat也没有。 (目标 API 15,冰淇淋三明治)

【问题讨论】:

  • 您需要使用“+=”注册事件。请参阅以下内容:forums.xamarin.com/discussion/15115/…
  • AJO = new AndroidJavaObject("com.company.volumekeyslibrary.VolumeKeyClass");在我的主脚本的 Start() 中。在插件构造函数中,我有一个线程执行向统一发送保持活动消息。
  • 请将edit的所有信息放入问题中,而不是将其隐藏在cmets中。

标签: java c# android unity3d native


【解决方案1】:

你必须像这样使用 OnKeyListener

   public class VolumeKeyClass extends Activity {

        void InitializeKeyListener ()
        {
           OnKeyListener keyListener = new OnKeyListener() {
        @Override
        public boolean onKeyUp(int keyCode, KeyEvent event) {
            Log.d("Unity","onKeyUp UP");
            int action = event.getAction();
            switch (keyCode) {
                case KeyEvent.KEYCODE_VOLUME_UP:
                    if (action == KeyEvent.ACTION_DOWN) {
                        Log.d("test", "Volume UP pressed! " + event);
                 UnityPlayer.UnitySendMessage("MainController","logStatus","Volume up!!");
                    }
                    return true;
                case KeyEvent.KEYCODE_VOLUME_DOWN:
                    if (action == KeyEvent.ACTION_DOWN) {
                        Log.d("test", "Volume DOWN pressed! " + event);
                        UnityPlayer.UnitySendMessage("MainController","logStatus","Volume Down!");
                    }
                    return true;
                default:
                    return super.dispatchKeyEvent(event);
            }
           };
        }
    }

【讨论】:

    猜你喜欢
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多