UM3L3——Android中调用Unity内容

本章代码关键字

1
UnityPlayer.UnitySendMessage()    //在安卓内执行Unity内内容,传入场景上的对象,再传入要调用的脚本的方法,再传入字符串参数

Android调用Unity规则

Android调用Unity相对比较简单,在Android端使用 UnityPlayer.UnitySendMessage​ API即可

想要被Android端调用的Unity函数

  1. 需要写在继承MonoBehaviour​的脚本中
  2. 需要挂载在场景中处于激活状态的GameObject上

交互时,在Android端调用API:UnityPlayer.UnitySendMessage("对象名", "函数名", "参数信息")

注意:该API中的参数只能是String​类型或者为null

测试交互

  1. 在Unity端创建测试脚本,编写测试函数

    假设要调用这个类下的TestAndroidCallUnity​,让屏幕上的UI输出传入的字符串

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    using UnityEngine;
    using UnityEngine.UI;

    public class Lesson3 : MonoBehaviour
    {
    public Text txtACU;

    public void TestAndroidCallUnity(string str)
    {
    txtACU.text = str;
    }
    }
  2. 在场景上创建一个空物体,将脚本挂载上去

    image

  3. 在Android端书写测试代码

    在Unity执行安卓程序的某个方法时,该方法反过来调用Unity内的方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    package com.taikr.mytestgame;

    // import androidx.appcompat.app.AppCompatActivity;

    import android.os.Bundle;

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

    public class MainActivity extends UnityPlayerActivity {
    //用于测试的成员变量相关
    public int testI;
    public static int testStaticI = 20;

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

    //用于测试的成员函数
    public String TestFun() {
    //在返回之前 先调用Unity当中的某个函数
    UnityPlayer.UnitySendMessage("ACU", "TestAndroidCallUnity", "你好Unity");
    return "String";
    }

    //用于测试的静态成员函数
    public static String TestStaticFun() {
    return "TestStaticFun";
    }
    }
  4. 重新打包aar包,导入Unity中进行打包测试

    新打包的arr包需要重新执行删除特定文件的步骤,具体可看打包注意事项
    然后,打包apk,安装到真机或者模拟器上运行,查看效果:

    Screenshot_20240402_215534_com.taikr.mytestgame