欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

荐 U3D调用AndroidStudio3.5(附测试工程)

程序员文章站 2022-03-29 20:15:45
使用版本:Unity:2018.2.10fAS:3.5最近由于需要接公司原生的java SDK,所以打算用U3D调用sdk、然后监听sdk回调的方法,麻烦的地方在于sdk部分需要在AS中去做。查找了不少帖子,终于找到了以这篇博客。1,根据博客中的方法,首先新建一个安卓工程:2,工程新建之后右键创建一个模块,取名叫unityactivity,注意这里的包名和新建工程的包名要一致(尽量避免不必要的错误,当然具体原因我还不太清楚)3,然后打开U3D安装目录,找到Edi....
使用版本:
Unity:2018.2.10f
AS:3.5

最近由于需要接公司原生的java SDK,所以打算用U3D调用sdk、然后监听sdk回调的方法,麻烦的地方在于sdk部分需要在AS中去做。查找了不少帖子,终于找到了以这篇博客

1,

根据博客中的方法,首先新建一个安卓工程:

荐
                                                        U3D调用AndroidStudio3.5(附测试工程)

荐
                                                        U3D调用AndroidStudio3.5(附测试工程)

2,工程新建之后右键创建一个模块,取名叫unityactivity,注意这里的包名和新建工程的包名要一致(尽量避免不必要的错误,当然具体原因我还不太清楚)

荐
                                                        U3D调用AndroidStudio3.5(附测试工程)

荐
                                                        U3D调用AndroidStudio3.5(附测试工程)

荐
                                                        U3D调用AndroidStudio3.5(附测试工程)

3,然后打开U3D安装目录,找到Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes下的classes.jar,找到后复制放入unityactivity模块的libs文件夹下,然后右键->Add as Library

荐
                                                        U3D调用AndroidStudio3.5(附测试工程)

荐
                                                        U3D调用AndroidStudio3.5(附测试工程)

这里选默认的就行了,也就是导入到unityactivity文件夹下,导入之后截图如下(classes.jar前面有效小三角,代表导入成功):

荐
                                                        U3D调用AndroidStudio3.5(附测试工程)

荐
                                                        U3D调用AndroidStudio3.5(附测试工程)

荐
                                                        U3D调用AndroidStudio3.5(附测试工程)

4,在AS中编写交互脚本,一个是U3D调用AS,然后AS给U3D回调。如果是接SDK的话,即U3D调用SDK的消息,然后等SDK收到回调方法后,再把消息通知给U3D。代码如下:

package com.yadong.unityactivity;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.Toast;

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

public class UnityMainAcivity extends UnityPlayerActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    //unity调用Android
    public void UnityCallAndroid () {
        AndroidCallUnity();
    }

    //android调用unity
    public void AndroidCallUnity () {
        //第1个参数为Unity场景中用于接收android消息的对象名称
        //第2个参数为对象上的脚本的一个成员方法名称(脚本名称不限制)
        //第3个参数为unity方法的参数
        UnityPlayer.UnitySendMessage("Text", "fromeAndroid", "安卓给你发消息了.");
        Toast.makeText(this,"android给U3D返回消息", Toast.LENGTH_LONG).show();
    }
}

5,修改AndroidManifest.xml

荐
                                                        U3D调用AndroidStudio3.5(附测试工程)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.yadong.unityactivity">

    <!-- 这个android:label设置后,unity中ProductName就不生效了,记得改这个-->
    <application >

        <!-- 这个android:name的值必须为包名+类名-->
        <activity android:name="com.yadong.unityactivity.UnityMainAcivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <!-- 这一行不能少,否则会闪退-->
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
        </activity>
    </application>

</manifest>

6先Build-Clean Project一下,然后Build-Make Module ‘模块名字’,生成jar包,结果如下:

荐
                                                        U3D调用AndroidStudio3.5(附测试工程)

荐
                                                        U3D调用AndroidStudio3.5(附测试工程)
7,在unity新建文件夹 Plugins/Android/bin,将上一步找到的classes.jar放进去,同时将第六步修改的AndroidManifest.xml复制到Plugins/Android和bin同一层级,放完后:

荐
                                                        U3D调用AndroidStudio3.5(附测试工程)

8,接下来我们处理U3D的部分,新建一个测试的脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class NewBehaviourScript : MonoBehaviour
{
    public Text text;

    public Button btn;
    AndroidJavaObject jo;
    private void Start()
    {
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        btn.onClick.AddListener(CallAndroid);

    }

    public void CallAndroid()
    {

        jo.Call("UnityCallAndroid");
        Debug.Log("点击按钮");
        System.Console.WriteLine("点击按钮");
    }

    void methodName111(string str)
    {
        text.text = str;
        Debug.Log(str);
        System.Console.WriteLine(str);
    }

    void fromeAndroid(string str)
    {
        text.text = str;
        Debug.Log("安卓传来信息 : " + str);
        System.Console.WriteLine("安卓传来信息 : " + str);
    }
}

 

9,然后建个Text,将脚本拖上去;再建个button,监听点击回调

荐
                                                        U3D调用AndroidStudio3.5(附测试工程)

 

10,打包成apk,这里要注意apk的包名不能与安卓的包名一致

荐
                                                        U3D调用AndroidStudio3.5(附测试工程)

 

最终测试结果:

荐
                                                        U3D调用AndroidStudio3.5(附测试工程)

荐
                                                        U3D调用AndroidStudio3.5(附测试工程)

 

 

测试工程我已经上传到下载资源中,地址为:https://download.csdn.net/download/Tel17610887670/12584600

本文地址:https://blog.csdn.net/Tel17610887670/article/details/107176352