2013-07-17 143 views
1

我正在尝试在Android上执行以下操作(可能在iOS上),并且将不胜感激:作为具有透明背景的子视图UnityPlayer? (Unity游戏引擎)

在原生Android视图之上覆盖UnityPlayer视图,其中只绘制3D对象没有摄像头的背景(透明背景)

我目前的进度:

到目前为止,我设法用我的Unity3D项目作为库添加到另一个Android项目,并分配UnityPlayer查看到的FrameLayout在另一个Android的看法,但在相机的顶部背景颜色显示...我试图改变清除标志选项只有深度,但它没有工作。

我也成功地使用了一个单独的GLSurfaceView,我分配了继承UnityPlayer的类并实现了GLSurfaceView.Renderer作为渲染器,但我仍然获得了不透明的背景。

我的代码如下:

// the class extending the player 
class CustomUnityPlayer extends UnityPlayer implements GLSurfaceView.Renderer { 
    public CustomUnityPlayer(ContextWrapper context) { 
     super(context); 
    } 
    public void onDrawFrame(GL10 gl) { 
     super.onDrawFrame(gl); 
    } 
} 

// inside OnCreate function: 
     m_UnityPlayer = new CustomUnityPlayer(this); 
     int glesMode = m_UnityPlayer.getSettings().getInt("gles_mode", 1); 
     m_UnityPlayer.init(glesMode, false); 

     mUnityView = new GLSurfaceView(getApplication()); 
     mUnityView.setEGLContextClientVersion(2); 
     mUnityView.setZOrderOnTop(true); 
     mUnityView.setZOrderMediaOverlay(true); 
     mUnityView.setEGLConfigChooser(8, 8, 8, 8, 16, 0); 
     mUnityView.setRenderer(m_UnityPlayer); 
     mUnityView.getHolder().setFormat(PixelFormat.TRANSLUCENT); 

     setContentView(R.layout.activity_fullscreen); 

     FrameLayout layout = (FrameLayout) findViewById(R.id.UnityView); 
     LayoutParams lp = new LayoutParams(LayoutParams.FILL_PARENT, 
       LayoutParams.FILL_PARENT); 
     layout.addView(mUnityView, 0, lp); 

我失去了一些东西,是它甚至可能吗?任何帮助都感激不尽。

非常感谢一些尝试后

回答

1

...删除mUnityView.setZOrderMediaOverlay(真);为我做了诡计(适用于Unity 4.2及更低版本...不适用于Unity 4.3及更高版本)

+0

我有问题想问你的问题制造商/回答者。我读过你可以在你的问题中说出你的看法,但从Unity 4.3开始,在一个场景中不可能有透明背景,如果你试图这样做,你会得到一个黑色的背景。您提供的这个例子是否适用于Unity 4.2? Unity 4.3+可以做到这一点吗? 谢谢。 – JavaZava

+0

@JavaZava是的,这只适用于统一4.2和以下...不统一4.3因为他们改变了视图的构造方式(他们从Java移到C++)......我将编辑答案来澄清它 – YNK