当前位置:   article > 正文

Unity安卓接入以及通信(详细教程)_unity怎么连接安卓设备

unity怎么连接安卓设备

相关问题:

关屏幕再开屏幕导致重启问题https://blog.csdn.net/SnoopyNa2Co3/article/details/86215782

Sdk接入一定涉及到安卓既接入和通信,虽然现在很多sdk只要打一下母包就可以出n个渠道的包,不过母包还是要接入安卓

这次教程分两部分

第一部分:unity接入安卓

首先我们先确定一下unity里面的包名

1.在eclipse新建安卓应用工程

File->New->Android application project

然后名字和unity一一对应,注意大小写问题

2.不创建icon,然后下一步

3.创建一个空白的activity,然后下一步

4.点完成

5.创建完成之后的项目

6.把下图圈着的删除掉(layout,styles.mxl,values-v11,values-v14)

7.删除之后会出现报错,先打开androidmanifest,删除报错地方,如下图

8.继续打开mainactivity.java,同样删除报错地方

9.右键项目(Snoopy)->Properties,打开如下图,然后选Android->选中appcompat_v7->remove->OK,

10.右键项目(Snoopy)->Properties,然后选Java build Path-—》libraries-》Add external JARS

然后导入unity对应的Classes.Jar,最后点OK完成

11.导完classes之后打开MainActivity

把Activity改成UnityPlayerActivity

这里要导入import com.unity3d.player.UnityPlayerActivity;

12.最后要导出Jar包给unity 项目右键-》Export-》JAR file

13.如下图所示只勾选Src其他设置不变,然后设置导出目录,最后点finish就可以

14.回到unity工程创建文件夹Assets\Plugins\Android,在Android文件夹下创建libs文件夹,把上面导出的jar包放了libs里面(放bin文件夹也可以:Android文件夹创建bin文件夹)

15.最后把安卓工程的AndroidManifes和res文件夹放到Unity里面的Android文件夹

16.unity接入安卓就这样,然后打包测试一下会不会闪退之类

一般闪退都是安卓包名和unity设置的包名不一致导致的

打包安卓报错,把buildSystem改成Internal,如下图

第二部分:unity和安卓之间通信

1.Unity调用安卓方法

  1. AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
  2. AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
  3. jo.Call("CallUnity");
  4. jo.Call("CallUnity1","abc");

关键代码

AndroidJavaObject.Call("方法名",参数(可不填))

2.Android发数据给Unity

  1. public void CallUnity()
  2. {
  3. UnityPlayer.UnitySendMessage("TestGameObj", "Test1", "1");
  4. }
  5. public void CallUnity1(String name)
  6. {
  7. UnityPlayer.UnitySendMessage("TestGameObj", "Test2", name);
  8. }

TestGameObj是场景一个gameobject的名字

Test1TestGameObj所挂脚本上面的一个方法

1是发给unity参数

3.测试完整代码

unity代码

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. public class test : MonoBehaviour
  6. {
  7. public Text text;
  8. public Text text2;
  9. // Use this for initialization
  10. void Start ()
  11. {
  12. AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
  13. AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
  14. jo.Call("CallUnity");
  15. jo.Call("CallUnity1","abc");
  16. }
  17. public void Test1(string name)
  18. {
  19. text.text = name;
  20. }
  21. public void Test2(string name)
  22. {
  23. text2.text = name;
  24. }
  25. }

安卓代码

  1. package com.Snoopy.AndroidTest;
  2. import com.unity3d.player.UnityPlayer;
  3. import com.unity3d.player.UnityPlayerActivity;
  4. import android.app.Activity;
  5. import android.os.Bundle;
  6. import android.view.Menu;
  7. import android.view.MenuItem;
  8. public class MainActivity extends UnityPlayerActivity {
  9. @Override
  10. protected void onCreate(Bundle savedInstanceState) {
  11. super.onCreate(savedInstanceState);
  12. }
  13. public void CallUnity()
  14. {
  15. UnityPlayer.UnitySendMessage("TestGameObj", "Test1", "1");
  16. }
  17. public void CallUnity1(String name)
  18. {
  19. UnityPlayer.UnitySendMessage("TestGameObj", "Test2", name);
  20. }
  21. }

测试场景,创建空Gameobject命名TestGameObj,因为上面的安卓代码是给这个TestGameObj发消息所以命名这个,添加test组件,TestGameObj所挂的脚本有Test1和Test2方法就行,把对应的ui拖上去打包安卓包测试

测试结果

教程就到这里

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/118867
推荐阅读
相关标签
  

闽ICP备14008679号