Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cómo importar el proyecto de Unity al proyecto de Android para que forme parte del proyecto de Android?

¿Cómo importar el proyecto de Unity al proyecto de Android para que forme parte del proyecto de Android?

1. El código lateral de Android se puede desarrollar en Eclipse (no he probado Android Studio, debería ser posible)

2. El código lateral de Unity3D se debe desarrollar en Unity

3. Lado de Android y Unity3D, ambas partes necesitan agregar algún código para poder relacionar la interacción.

4. Compile el código de Android en un archivo jar y colóquelo en Unity como un complemento.

5. Compile todo el proyecto en un archivo apk. Compile todo el proyecto en un archivo apk en Unity y luego instálelo en un teléfono móvil o simulador para ejecutarlo

Este artículo presenta principalmente 1, 2 y 3. Con respecto a 4 y 5, se recomienda que consulte los artículos 17 y 18 del blog Unity de YuSongMOMO.

UnityPlay:

Antes de escribir código para Android y Unity3d, es muy importante comprender la clase UnityPlay, que permite que las dos partes del código interactúen.

Mi entendimiento personal es que UnityPlay es una clase de interfaz proporcionada por Unity para interacción externa.

¿Por qué "comprensión personal"? No hay API ni documentación al respecto en el sitio web oficial (si alguien puede encontrarlo, me encantaría obtener una copia para poder patearme).

Cuando se asocia con Android, los paquetes jar que desean obtener UnityPlay y clases relacionadas se pueden encontrar en la siguiente dirección: La ruta de instalación de Unity es: \Editor\Data\PlaybackEngines\androidplayer\bin Hay clases. jar archivo jar, eso es lo que queremos.

Hay un archivo src en el mismo directorio de bin. Haga clic hasta el final y hay tres clases, a saber, UnityPlayerActivity.java, UnityPlayerProxyActivity.java, UnityPlayerNativeActivity.java.

En realidad, hay código en el UnityPlayerNativeActivity abierto, supongo que este es el código fuente de UnityPlayerNativeActivity.

Debido a que solo encontré un código fuente para UnityPlay, publicaré todo el código en UnityPlayerNativeActivity. Si me equivoco, espero que todos puedan corregirme.

/**

* UnityPlayerActivity y UnityPlayerProxyActivity heredan de UnityPlayerNativeActivity

* y UnityPlayerNativeActivity hereda de NativeActivity

* en esta clase. Algunos Los métodos de devolución de llamada que son iguales al ciclo de vida de ANDROID se definen para que las subclases de actividad personalizadas puedan anular estos métodos.

*/

clase pública UnityPlayerNativeActivity extiende NativeActivity

{

// Referencia a UnityPlayer, no podemos cambiar el nombre de esta variable de referencia. al que hace referencia el código nativo

protected UnityPlayer mUnityPlayer;

protected void onCreate (Bundle savedInstanceState)

{

requestWindowFeature(Window . FEATURE_NO_TITLE);

super.onCreate(savedInstanceState);

//Establecer parámetros de la ventana de visualización

getWindow().takeSurface(null);

setTheme(android.R.style.Theme_NoTitleBar_Fullscreen);

getWindow().setFormat(PixelFormat.RGB_565);

// Crear un objeto UnityPlayer y asígnalo a la variable de referencia global

mUnityPlayer = new UnityPlayer(this);

// Establece algunos parámetros para UnityPlayer

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;

// Antes de adjuntar la vista al diseño, debe llame al método UnityPlayer.init().

Llamará al código local

mUnityPlayer.init(lesMode, trueColor8888);

// Obtener la vista de Unity desde UnityPlayer

Ver playerView = mUnityPlayer.getView () ;

//Cargar la vista de Unity en la vista raíz

setContentView(playerView);

//Dar foco a la vista de Unity

playerView.requestFocus();

}

protected void onDestroy ()

{

// Llama a UnityPlayer cuando finaliza la actividad. método quit(), que descargará el código local previamente llamado

mUnityPlayer.quit();

super.onDestroy();

}

p>

//Los siguientes métodos son devoluciones de llamada relacionadas con ANDROID para garantizar que UnityPlayer llame al método correspondiente cuando ANDROID ejecuta el método correspondiente

protected void onPause()

{

super.onPause();

mUnityPlayer.pause();

}

vacío protegido onResume()

{

Super.onWindowFocusChanged(hasFocus);

mUnityPlayer.windowFocusChanged( hasFocus);

}

despachador booleano públicoKeyEvent (Evento KeyEvent)

{

if (event.getAction() ==KeyEvent.ACTION_MULTIPLE )

return mUnityPlayer.onKeyMultiple(event.getKeyCode(), event.getRepeatCount(), evento);

return super.dispatchKeyEvent( event.ACTION_MULTIPLE);