- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在构建一个包含 Unity 3d 交互体验的 Android 应用程序。
我已将 Unity 项目导入 Android Studio,但启动时 Activity 是全屏的,不显示 Android 操作栏。
我该怎么做?
集成步骤
尝试的解决方案
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.company.unity.test"
android:installLocation="preferExternal"
android:versionCode="1"
android:versionName="1.0">
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:xlargeScreens="true" />
<application
android:banner="@drawable/app_banner"
android:debuggable="false"
android:icon="@drawable/app_icon"
android:isGame="true"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
<activity
android:name="com.company.unity.test.UnityPlayerActivity"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale"
android:label="@string/app_name"
android:launchMode="singleTask"
android:screenOrientation="fullSensor">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
<meta-data
android:name="unityplayer.UnityActivity"
android:value="true" />
</activity>
</application>
<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="23" />
<uses-feature android:glEsVersion="0x00020000" />
<uses-feature
android:name="android.hardware.sensor.accelerometer"
android:required="false" />
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />
<uses-feature
android:name="android.hardware.touchscreen.multitouch"
android:required="false" />
<uses-feature
android:name="android.hardware.touchscreen.multitouch.distinct"
android:required="false" />
</manifest>
UnityPlayerActivity.java
package com.company.unity.test;
import android.app.Activity;
import android.content.res.Configuration;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.Window;
import com.unity3d.player.UnityPlayer;
public class UnityPlayerActivity extends Activity
{
protected UnityPlayer mUnityPlayer; // don't change the name of this variable; referenced from native code
// Setup activity layout
@Override protected void onCreate (Bundle savedInstanceState)
{
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
getWindow().setFormat(PixelFormat.RGBX_8888); // <--- This makes xperia play happy
mUnityPlayer = new UnityPlayer(this);
setContentView(mUnityPlayer);
mUnityPlayer.requestFocus();
}
// Quit Unity
@Override protected void onDestroy ()
{
mUnityPlayer.quit();
super.onDestroy();
}
// Pause Unity
@Override protected void onPause()
{
super.onPause();
mUnityPlayer.pause();
}
// Resume Unity
@Override protected void onResume()
{
super.onResume();
mUnityPlayer.resume();
}
// This ensures the layout will be correct.
@Override public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
mUnityPlayer.configurationChanged(newConfig);
}
// Notify Unity of the focus change.
@Override public void onWindowFocusChanged(boolean hasFocus)
{
super.onWindowFocusChanged(hasFocus);
mUnityPlayer.windowFocusChanged(hasFocus);
}
// For some reason the multiple keyevent type is not supported by the ndk.
// Force event injection by overriding dispatchKeyEvent().
@Override public boolean dispatchKeyEvent(KeyEvent event)
{
if (event.getAction() == KeyEvent.ACTION_MULTIPLE)
return mUnityPlayer.injectEvent(event);
return super.dispatchKeyEvent(event);
}
// Pass any events not handled by (unfocused) views straight to UnityPlayer
@Override public boolean onKeyUp(int keyCode, KeyEvent event) { return mUnityPlayer.injectEvent(event); }
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { return mUnityPlayer.injectEvent(event); }
@Override public boolean onTouchEvent(MotionEvent event) { return mUnityPlayer.injectEvent(event); }
/*API12*/ public boolean onGenericMotionEvent(MotionEvent event) { return mUnityPlayer.injectEvent(event); }
}
最佳答案
对于 Unity 5.5 版,避免 Android 中沉浸模式的最佳方法是传入构造函数而不是 Activity,而是将 ApplicationContext 转换为 Wrapper Context。
mUnityPlayer = new UnityPlayer((ContextWrapper) getApplicationContext());
这是可行的,因为在混淆后的 UnityPlayer.class(在 unity-classes.jar 中)有一个实例检查。
private void h() {
if(this.h instanceof Activity) {
((Activity)this.h).getWindow().setFlags(1024, 1024);
}
}
因此,如果它不是 Activity,则 UnityPlayer.class 不会设置标志。
关于java - Android UnityPlayerActivity 操作栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33558564/
我正在 Unity 上构建一个 Android 游戏,它有一个打开新 Activity 的按钮。 问题是在构建 APK 时,无论我在自定义 AndroidManifest.xml 中放入什么,Unit
我正在构建一个包含 Unity 3d 交互体验的 Android 应用程序。 我已将 Unity 项目导入 Android Studio,但启动时 Activity 是全屏的,不显示 Android
UnityPlayerActivity 中是否有 getContext 的替代方法? 我想要如下所示的代码。 Activity.getContext() 最佳答案 来自 here 的回答 using
我正在使用 android studio 制作统一插件,但这里有问题。一些 SDK 提供仅使用 AppcompatActivity 来制作 fragment 但我的MainActivity , 正是
我正在为 Unity3D 编写 Android 插件。我需要从 UnityPlayerActivity 打开我的自定义 Activity ,以便它是透明的并且游戏在后台可见。但是当我打开我的 Acti
我正在尝试借助 docs.unity3d 扩展 UnityPlayerActivity。我有一个带有 MainActivity 类的简单 jar 文件,还将文件 classes.jar 包含到 lib
因此,我已经使用了一个扩展 UnityPlayerActivity 的第 3 方插件,此外我们还扩展了它以将我们自己的东西撒入其中,现在出现了 facebook sdk 与它自己的扩展 UnityPl
我正在尝试为我的 Unity 游戏创建一个 Android 插件。我看过很多教程(其中大部分都是基于 eclipse 的过时的)并且也阅读了文档。我正在使用 Unity 2019.3.0f6。我想用
我有一个android库项目,并在Unity项目中导入了库项目。现在,我想在 Unity 项目中实现一个回调,它将根据 android 库项目给出的响应执行。我的意思是说,从 UnityPlayerA
我正在尝试为 Unity3D 编写一个 Android 插件来与 Google Play In App Billing 进行交互。我知道有可用的插件,但我希望自己做。 看来我需要捕获 Android
我是一名优秀的程序员,十分优秀!