Unity+AndroidStudio:学习:三:(第2次操作:失败).arr文件如何导入到Unity3D中+交互

目录

一.目的

1.1 想知道:.arr文件如何导入到Unity3D中

二.参考

2.1 Unity+AndroidStudio:学习:二:(第2次操作:成功)AndroidStudio如何产生.arr文件+交互

2.1Unity与Android交互方案优化版 

2.1.Unity 调用Android arr包(互相调用并传值)

2.2.Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)

三.操作:1:失败

3.1 版本

3.1 新建U3D工程

3.1 .aar导入U3D

3.1 Unity设置

3.1 运行结果:导入.aar后直接打包APK:报错:

3.1 解决报错:已解决

3.1.1 运行结果:打包成功

3.1 Unity调用AS中的代码

3.1 运行结果:失败

 三.操作:2:失败

3.1.新建Plugins目录与Android子目录+导入aar文件至Android目录下

3.1.找到AndroidManifest.xml 

3.1.导入AndroidManifest.xml文件至Android目录下

1.注意BoudleID可以不用设置和aar相同名字+BoudleID也不用设置和AndroidManifest.xml的package一样的名字


一.目的

1.1 想知道:.arr文件如何导入到Unity3D中

二.参考

2.1 Unity+AndroidStudio:学习:二:(第2次操作:成功)AndroidStudio如何产生.arr文件+交互

https://blog.csdn.net/qq_40544338/article/details/118406173

  1. 总结:good:我自己写的,亲测有效的

2.1Unity与Android交互方案优化版 

https://www.jianshu.com/p/86b275da600e

  1. Demo下载下来了,运行了是正常的。
  2. 更新后的版本 VS2019+unity2019.4.9f1

2.1.Unity 调用Android arr包(互相调用并传值)

https://blog.csdn.net/Blog_Sun/article/details/102481342

  1. 待检测

2.2.Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)

http://www.xuanyusong.com/archives/667

  1. 待检测

三.操作:1:失败

3.1 版本

  1. .aar是公司安卓工程师给我的,所以我导入到U3D
  2. unity2019.4.9f1

3.1 新建U3D工程

  1. 名字改为 :unityblelibrary  ;

3.1 .aar导入U3D

.aar导入U3D的  \Assets\Plugins\Android\  

3.1 Unity设置

  1. 包名、最低版本 和AndroidManifest.xml 保持一致。

3.1 运行结果:导入.aar后直接打包APK:报错:

3.1 解决报错:已解决

  1. 删除.aar里面的 classes.jar
  2. 由于Unity在打包APK时会自动包含自身的classes.jar,所以需使用压缩软件打开*.aar文件删除libs目录下的classes.jar文件

3.1.1 运行结果:打包成功

3.1 Unity调用AS中的代码

新建代码 UnityAndAndroid 然后挂在Main Camera

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

using UnityEngine.UI;

public class UnityAndAndroid : MonoBehaviour
{
    /// <summary>Text:显示安卓发送来的消息</summary>
    public Text text_showAndroid;

    /// <summary>Button:btn_initBle </summary>
    public Button btn_initBle;

    /// <summary>Button:btn_startBle</summary>
    public Button btn_startBle;

    /// <summary>Button:btn_stopBle</summary>
    public Button btn_stopBle;

    /// <summary>
    /// android原生代码对象
    /// </summary>
    /// 

    private AndroidJavaClass javaClass = null;
    private AndroidJavaObject javaObject = null;

    // Start is called before the first frame update
    void Start()
    {
        测试:1:失败
        //AndroidJavaClass javaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        //AndroidJavaObject javaObject = javaClass.GetStatic<AndroidJavaObject>("currentActivity");

        测试:2:失败:安装到手机报错:Caused by: java.lang.ClassNotFoundException: Didn't find class "com.zhhd.unityblelibrary.UnityBleActivity" 
        通过该API来实例化导入的arr中对应的类
        //javaObject = new AndroidJavaObject("com.zhhd.unityblelibrary.UnityBleActivity");

        测试:3:失败:adb报错 java.lang.NoSuchFieldError: no "Ljava/lang/Object;" field "UnityBleActivity" in class "Lcom/unity3d/player/UnityPlayer;" or its superclasses
        //AndroidJavaClass javaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        //AndroidJavaObject javaObject = javaClass.GetStatic<AndroidJavaObject>("UnityBleActivity");

        测试:4:失败:
        // javaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        // javaObject = javaClass.GetStatic<AndroidJavaObject>("currentActivity");

        //测试:5:失败:报错: E/Unity: NullReferenceException: Object reference not set to an instance of an object
        javaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        javaObject = javaClass.GetStatic<AndroidJavaObject>("com.zhhd.unityblelibrary.UnityBleActivity");

        测试:6:失败:报错:E/Unity: NullReferenceException: Object reference not set to an instance of an object
        //javaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        //javaObject = javaClass.GetStatic<AndroidJavaObject>("UnityBleActivity");

        //btn_initBle.onClick.AddListener(() => { javaObject.Call("initBle"); });
        //btn_startBle.onClick.AddListener(() => { javaObject.Call("startBle"); });
        //btn_stopBle.onClick.AddListener(() => { javaObject.Call("stopBle"); });
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    /// <summary>
    /// 安卓调用此方法:
    /// </summary>
    /// <param name="content"></param>
    public void FromAndroid(string content)
    {
        text_showAndroid.text = content;
    }

    public void Set_btn_initBle()
    {
        javaObject.Call("initBle");
    }

    public void Set_btn_startBle()
    {
        javaObject.Call("startBle");
    }

    public void Set_btn_stopBle()
    {
        javaObject.Call("stopBle");
    }



}

3.1 运行结果:失败

 三.操作:2:失败

3.1.新建Plugins目录与Android子目录+导入aar文件至Android目录下

3.1.找到AndroidManifest.xml 

将.arr后缀改为.rar,这样就可以解压出来文件夹,找到AndroidManifest.xml

3.1.导入AndroidManifest.xml文件至Android目录下

1.注意BoudleID可以不用设置和aar相同名字+BoudleID也不用设置和AndroidManifest.xml的package一样的名字

下图是我的其他工程,其中可以发现Unity3D中的PackageName和导入AndroidManifest.xml的package内容不一样。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Unity3D-XRInput是一个简单易懂的XR输入系统,专为Unity3D开发者设计。XRInput提供了一种集成虚拟现实和增强现实硬件设备的解决方案,帮助开发者更方便地处理虚拟现实设备的输入操作。 XRInput具有以下特点: 1. 简单易用:XRInput提供了一套简化的API接口,开发者可以轻松地获取XR设备的输入信息。无论是手柄、头戴式显示器或其他XR硬件设备,都可以通过XRInput统一管理。 2. 多平台兼容:XRInput支持大部分主流的VR和AR平台,包括Oculus Rift、HTC Vive、Windows Mixed Reality等。开发者可以无需关注具体设备的差异,只需使用XRInput即可适配多个平台。 3. 扩展性强:XRInput提供了可扩展的功能,开发者可以根据自己的需求进行定制。例如,可以添加自定义的手势识别算法,或者扩展新的输入设备。 4. 与Unity集成:XRInput与Unity3D紧密集成,无需额外的配置和插件。开发者可以直接在Unity编辑器使用XRInput进行虚拟现实应用程序的开发。 5. 支持常见输入操作:XRInput支持常见的输入操作,如位置追踪、手势识别、触摸输入等。开发者可以根据需要处理这些输入操作,以实现更丰富的交互体验。 总之,Unity3D-XRInput是一个简单易懂的XR输入系统,为Unity开发者提供了更便捷的虚拟现实设备输入管理,帮助开发者节省时间和精力,快速开发出高质量的XR应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值