3.Android调用Unity

3.Android调用Unity


3.1 知识点

Android调用Unity规则

想要被Android端调用的Unity函数:

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

交互时,在Android端调用API:

  • UnityPlayer.UnitySendMessage("对象名", "函数名", "参数信息")
    注意:该API中的参数只能是String类型或者为null。

测试交互

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

using UnityEngine;
using UnityEngine.UI;

public class TestAndroidUnityInteraction : MonoBehaviour
{
    public Text testAndroidCallUnityText;
    
    public void TestAndroidCallUnity(string str)
    {
        testAndroidCallUnityText.text = str;
    }

    void Start()
    {
        using (AndroidJavaClass androidJavaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
        {
            using (AndroidJavaObject androidJavaObject = androidJavaClass.GetStatic<AndroidJavaObject>("currentActivity"))
            {
                // 调用有返回值的成员函数
                string testFunStr = androidJavaObject.Call<string>("TestFun");
            }
        }
    }
}

在场景上创建一个空物体,将脚本挂载上去

在Android端书写测试代码

// 测试成员函数
public String TestFun()
{
    // 在返回前可以尝试调用Unity的函数
    // 交互时,在Android端调用API:
    // UnityPlayer.UnitySendMessage("对象名", "函数名", "参数信息")
    // 注意:该API中的参数只能是String类型或者为null
    UnityPlayer.UnitySendMessage("Lesson03", "TestAndroidCallUnity", "AndroidCallUnity");

    return "String";
}

重新打包aar包,替换原先插件文件夹下的aar文件,导入Unity中进行打包测试,注意要进行上节课的三次删除操作,重新生成应用程序,在模拟器测试


总结

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


3.2 知识点代码

MainActivity

package com.tao.unityandroidtestgame;

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;

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

    //测试成员函数
    public String TestFun()
    {
        // 在返回前可以尝试调用Unity的函数
        //  交互时,在Android端调用API:
        //  UnityPlayer.UnitySendMessage("对象名", "函数名", "参数信息")
        //  注意:该API中的参数只能是String类型或者为null
        UnityPlayer.UnitySendMessage("Lesson03", "TestAndroidCallUnity", "AndroidCallUnity");

        return "String";
    }

    //测试静态函数
    public static String TestStaticFun()
    {
        return "TestStaticFun";
    }
}

Lesson03_Unity和Android交互教程

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

public class Lesson03_Unity和Android交互教程 : MonoBehaviour
{
    public Text testAndroidCallUnityText;

    void Start()
    {
        #region 知识点一 Android调用Unity规则

        //想要被Android端调用的Unity函数
        //1.需要写在继承MonoBehaviour的脚本中
        //2.需要挂载在场景中处于激活状态的GameObject上

        //交互时,在Android端调用API:
        //  UnityPlayer.UnitySendMessage("对象名", "函数名", "参数信息")
        //  注意:该API中的参数只能是String类型或者为null

        #endregion

        #region 知识点二 测试交互

        //1.在Unity端创建测试脚本,编写测试函数
        //2.在场景上创建一个空物体,将脚本挂载上去
        //3.在Android端书写测试代码
        //4.重新打包aar包,导入Unity中进行打包测试


        using (AndroidJavaClass androidJavaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))//com.unity3d.player.UnityPlayer是固定写法
        {

            using (AndroidJavaObject androidJavaObject = androidJavaClass.GetStatic<AndroidJavaObject>("currentActivity"))//currentActivity是固定写法 获取当前激活的Activity
            {
                //调用有返回值的成员函数
                string testFunStr = androidJavaObject.Call<string>("TestFun");
            }
        }
        
        #endregion

        #region 总结

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

        #endregion
    }


    public void TestAndroidCallUnity(string str)
    {
        testAndroidCallUnityText.text = str;
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏