Las notas de estudio de comunicación de Unity y AndroidStudio están empaquetadas de forma predeterminada (01)

Reimpreso del tutorial del jefe, aprenda cómo grabarlo y usarlo. Publicación original: Interacción de Unity y Android (comunicación de doble extremo)_blog de unity3d y android_Xiao Yin en codificación... Blog de CSDN https://blog.csdn.net/Ai1114/article/details/128386292?spm=1001.2014.3001.5506

Versión de unidad: 2020.3.40f1

AndroidStudio: 4.0.2

Paso uno: parte de la unidad

Crear un nuevo proyecto de Unity 

1. Cambie al entorno de Android, abra Player y configure el nombre del paquete. El nombre del paquete de Android debe ser coherente con el registro de Unity.

 Hasta ahora, se ha construido el entorno de la unidad.

2. Construye la escena de Unity

como muestra la imagen:

El guión es el siguiente:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Move : MonoBehaviour
{
    public Button btn_up;
    public Button btn_down;
    public Button btn_left;
    public Button btn_right;

    private AndroidJavaClass androidJavaClass;
    private AndroidJavaObject androidJavaObject;
    private void Start()
    {

        androidJavaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        androidJavaObject = androidJavaClass.GetStatic<AndroidJavaObject>("currentActivity");

        btn_up.onClick.AddListener(AndroidUp);
        btn_down.onClick.AddListener(AndroidDown);
        btn_left.onClick.AddListener(AndroidLeft);
        btn_right.onClick.AddListener(AndroidRight);
    }


    public void AndroidUp()
    {
        androidJavaObject.Call("Up");
        Debug.Log("Unity端调用了Android端的Up方法");
    }

    public void AndroidDown()
    {
        androidJavaObject.Call("Down");
        Debug.Log("Unity端调用了Android端的Down方法");
    }

    public void AndroidLeft()
    {
        androidJavaObject.Call("Left");
        Debug.Log("Unity端调用了Android端的Left方法");
    }

    public void AndroidRight()
    {
        androidJavaObject.Call("Right");
        Debug.Log("Unity端调用了Android端的Right方法");
    }




    public void Up()
    {
        transform.Translate(0, 0.5f, 0);
        Debug.Log("Android端调用了Unity场景Cube物体上的Move脚本中的Up方法");
    }
    public void Down()
    {
        transform.Translate(0, -0.5f, 0);
        Debug.Log("Android端调用了Unity场景Cube物体上的Move脚本中的Down方法");
    }
    public void Left()
    {
        transform.Translate(-0.5f, 0, 0);
        Debug.Log("Android端调用了Unity场景Cube物体上的Move脚本中的Left方法");
    }
    public void Right()
    {
        transform.Translate(0.5f, 0, 0);
        Debug.Log("Android端调用了Unity场景Cube物体上的Move脚本中的Right方法");
    }




}

 3. Exporte el proyecto de Android (agregue la escena a la configuración de compilación, marque Exportar proyecto)

Después de la exportación se ve así:

 Paso 2: crea un nuevo proyecto de Android

1

Preste atención al nombre del paquete y a la selección del SDK.

 2. Después de esperar a que se complete la compilación, copie unity-classes.jar en el proyecto UNity recién empaquetado en las bibliotecas del proyecto de Android.

 

 

3. Copie UnityPlayerActivity en el directorio de instalación de Unity al mismo directorio que MainActivity

 

4. Agregue el código ndk a build.gradle   (de lo contrario, se informará un error. Lo que no se puede cargar. El error de eso)

 ndk {
            abiFilters 'armeabi-v7a','x86'
        }

 5. Agregue código dentro de la cadena. De lo contrario, se informará un error y no se podrán encontrar los recursos relacionados con UNity.

<resources>
    <string name="app_name">Anzhuo</string>
    <string name="game_view_content_description">Game view</string>
</resources>

 En este punto, el proyecto de Android está configurado.

Paso 3: Combinación de Unity y Android

1. Modifique el código Activity_main.xml de la siguiente manera

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="进入Unity"
        android:textAllCaps="false"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

2. Cree un nuevo código Activity_Androidtounity.xml en el mismo directorio que Activity_main.xml de la siguiente manera:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <RelativeLayout
        android:id="@+id/UnityView"
        android:layout_width="match_parent"
        android:layout_height="600dp">

    </RelativeLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal">
        <Button
            android:id="@+id/btn1"
            android:text="上移"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btn2"
            android:text="左移"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginHorizontal="20dp"/>


        <Button
            android:id="@+id/btn3"
            android:text="右移"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginHorizontal="20dp"/>

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal">
        <Button
            android:id="@+id/btn4"
            android:text="上移"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </LinearLayout>

</LinearLayout>

 3. Cree una nueva clase AndroidToUnityActivity en el mismo directorio que MainActivity

El código se muestra a continuación: 

package com.zhangsan.anzhuo;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RelativeLayout;

import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;

public class AndroidToUnityActivity extends UnityPlayerActivity {

    /**
     * 声明变量
     */
    private RelativeLayout Unity_View;
    private Button up_btn,left_btn,right_btn,down_btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_androidtounity);

        /**
         * 为变量绑定控件
         */
        Unity_View = (RelativeLayout) findViewById(R.id.UnityView);
        up_btn = (Button) findViewById(R.id.btn1);
        left_btn = (Button) findViewById(R.id.btn2);
        right_btn = (Button) findViewById(R.id.btn3);
        down_btn = (Button) findViewById(R.id.btn4);

        /**
         * 将Unity视图添加到RelativeLayout中
         */
        Unity_View.addView(mUnityPlayer);

        up_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                UnityPlayer.UnitySendMessage("Cube","Up","");
            }
        });
        left_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                UnityPlayer.UnitySendMessage("Cube","Left","");
            }
        });
        right_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                UnityPlayer.UnitySendMessage("Cube","Right","");
            }
        });
        down_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                UnityPlayer.UnitySendMessage("Cube","Down","");
            }
        });
    }

    private void Up(){
        UnityPlayer.UnitySendMessage("Cube","Up","");
    }
    private void Down(){
        UnityPlayer.UnitySendMessage("Cube","Down","");
    }
    private void Left(){
        UnityPlayer.UnitySendMessage("Cube","Left","");
    }
    private void Right(){
        UnityPlayer.UnitySendMessage("Cube","Right","");
    }
}

Nota: cambie el nombre del paquete en el código anterior.

Si hay algún otro error, simplemente alt+enter para importar la clase correspondiente.

4 Modifique el código MainActivity de la siguiente manera

package com.zhangsan.anzhuo;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    private Button btn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        btn = (Button) findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this, AndroidToUnityActivity.class);
                startActivity(intent);

            }
        });

    }
}

Finalmente, coloque los siguientes dos paquetes de recursos en el proyecto de Android.

Se acabó todo, simplemente empaquételo.

Después de las pruebas, descubrí que cuando hice clic en el botón para cargar la escena de Unity, se bloqueó. Jajajaja, ahí es donde algo salió mal.

 intentar otra vez

Continuar reportando errores. . .

Descubrí que necesito declarar esta clase en la lista.

 <activity android:name=".AndroidToUnityActivity" >
        </activity>

 El embalaje volvió a ser un éxito. ¡Por todas partes! !

Supongo que te gusta

Origin blog.csdn.net/qq_38513810/article/details/130808900
Recomendado
Clasificación