需要使用Unity3D在Java中使用本机Android活动和touchevents
我正在使用Unity并将Unity项目导出为eclipse项目 这将产生一个简单的本地应用程序需要使用Unity3D在Java中使用本机Android活动和touchevents,java,android,android-layout,android-ndk,unity3d,Java,Android,Android Layout,Android Ndk,Unity3d,我正在使用Unity并将Unity项目导出为eclipse项目 这将产生一个简单的本地应用程序 public class UnityPlayerNativeActivity extends NativeActivity { protected UnityPlayer mUnityPlayer; protected void onCreate (Bundle savedInstanceState) { requestWindowFeature(Window.
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);
正如你们所看到的,我在unity布局的顶部添加了一个相对膨胀的元素
但是,由于Unity驻留在本机代码中,并且该类是一个本机活动
我的按钮的触摸事件在Java中不起作用-
由于Unity编译成DLL,因此我无法访问本机代码(通过JNI)将触摸事件发送回Java
还有别的办法吗?
如何在Java中触发touch事件?或者,我如何编写本机活动的扩展来捕获NDK中的触摸事件,以便将它们传递给java
我发现有趣的是,如果我不使用unity视图,而只是将ContentView设置为我自己的布局,那么触摸事件在java端确实可以工作
但是,第二次我使用unity视图时,我不能再使用java中的触摸事件了,我已经做得很好了,问题是android需要将元数据添加到xml清单中,以告诉unity将事件传递给dalvik 请参见UnityPlayerActivity