【发布时间】:2014-01-20 16:51:51
【问题描述】:
我正在使用 Unity 并将 Unity 项目导出为 eclipse 项目
这会产生一个简单的 NativeApplication
public class UnityPlayerNativeActivity extends NativeActivity
{
protected UnityPlayer mUnityPlayer;
protected void onCreate (Bundle savedInstanceState)
{
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
getWindow().takeSurface(null);
setTheme(android.R.style.Theme_NoTitleBar_Fullscreen);
getWindow().setFormat(PixelFormat.RGB_565);
mUnityPlayer = new UnityPlayer(this);
if (mUnityPlayer.getSettings ().getBoolean ("hide_status_bar", true))
getWindow ().setFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
int glesMode = mUnityPlayer.getSettings().getInt("gles_mode", 1);
boolean trueColor8888 = false;
mUnityPlayer.init(glesMode, trueColor8888);
Button b = new Button(this);
b.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(), "Hello From Java", ).show(); } });
RelativeLayout layout = (RelativeLayout) View.inflate(this, R.layout.layout, null);
layout.setLayoutParams(new LayoutParams(300,30));
layout.addView(b);
mUnityPlayer.addView(layout);
View playerView = mUnityPlayer.getView();
setContentView(playerView);
如您所见,我添加了一个 relativeLayout,我在统一布局之上进行膨胀。
但是,由于 Unity 位于 Native Code 中,并且该类是 NativeActivity 我的按钮的触摸事件在 Java 中不起作用 - 由于 Unity 编译为 DLL,因此我无法访问本机代码以将触摸事件(通过 JNI)发送回 Java
还有其他方法可以做到这一点吗? 如何在 Java 中触发触摸事件?或者我如何编写一个可以在 NDK 中捕获触摸事件的 Native Activity 扩展,以便我可以将它们传递给 java?
我觉得有趣的是,如果我不使用统一视图,而只是将内容视图设置为我自己的布局 - 触摸事件确实在 java 端起作用 但是第二次我使用统一视图我不再可以在 java 中使用触摸事件
【问题讨论】:
标签: java android android-layout android-ndk unity3d