Androidstudio和unity互相调用

1.新建Android lib工程New->New Module

2.选择Android Library

3.输入package name 这个要和unity的包名一致

4.在新建的工程下如图位置new 一个 EmptyActivity

 

5.在android工程下的libs文件里添加unity的jar包

Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Classes里面找到对应需要的class.jar

6. 将class.jar复制到libs下面点击Add AsLibrary导入

7.在unity中新建AndroidPlugin脚本来调用java

public class AndroidPlugin : MonoBehaviour {

       private AndroidJavaObject m_androidObj = null;

       private void Awake()

       {

               AndroidJavaClass androidClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");

               m_androidObj = androidClass.GetStatic<AndroidJavaObject>("currentActivity");

       }

       void Start () 

        {

               if (m_androidObj != null)

               {

                    m_androidObj.Call("CallUnityMethod", "testString");

               }

        }

       public void UnityMethod(string str)

       {

           Debug.Log("android called unityMethodparam:" + str);

       }

  }

8.在unity场景中新建一个gameobject,并且把脚本挂在上面

9.将Android工程里的activity修改一下

import android.os.Bundle;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;
public class MainActivity extends UnityPlayerActivity {

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

public void CallUnityMethod(String str)
 {
 UnityPlayer.UnitySendMessage("Driver","UnityMethod",str);
}
}

这里的CallUnityMethod方法在unity的脚本中有调用,里面在调用“Driver”这个gameObject上挂着的脚本里的对应函数

10.make一下Android工程

在这里插入图片描述

11.make完以后在build/intermediates下面的manifests里面有需要的manifest文件Packaged-class下面有class.jar文件


在这里插入图片描述
在这里插入图片描述
Packaged-res/debug下面有layout和values文件
在这里插入图片描述
12.将需要的文件对应复制到unity里面

注意这里的androidManifest需要修改一下

手动加一些属性,复制过来的不太全,请参照下面的

图标其他的也要自己加入

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

    <!--访问网络连接,可能产生GPRS流量-->
     <uses-permission android:name="android.permission.INTERNET"/>

     <application>
       <activity android:name=".MainActivity">
         <intent-filter>
           <action android:name="android.intent.action.MAIN" />

           <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
       </activity>
     </application>

</manifest>

<?xml version=“1.0"encoding=“utf-8”?>

<manifestxmlns:android=“http://schemas.android.com/apk/res/android”

   package=“com.sl.unity_android”

   android:versionCode=“1”

   android:versionName=“1.0” >

   <uses-sdk

       android:minSdkVersion=“19”

        android:targetSdkVersion=“27”/>

   <application

         android:label=”@string/app_name">

       <activity android:name=".MainActivity">

           <intent-filter>

                <actionandroid:name=“android.intent.action.MAIN” />

                <categoryandroid:name=“android.intent.category.LAUNCHER” />

           </intent-filter>

       </activity>

   </application>

</manifest>

 13.最后unity打包的时候要选择这一项

在这里插入图片描述

 

14.打出apk运行就能看到日志了

 


Android Studio中集成Unity游戏,并想让应用与Unity交互,例如控制游戏中角色的图片切换,你需要通过通讯接口(如JNI、AIDL等)或者使用一些第三方库如Retrofit或Moshi来完成。以下是基本步骤: 1. **创建接口**: 首先,在Android项目中创建一个Java接口,定义一个方法用于发送图片切换的命令到Unity。 ```java public interface UnityBridge { void switchImage(String imageName); } ``` 2. **在Unity端处理**: 在Unity中,你需要编写一个插件(C#脚本),监听来自Android的消息并相应地改变图片。使用`Application:Call(string methodName, params object[] arguments)`来调用Android的方法。 ```csharp public class UnityBridgeHandler : MonoBehaviour { [DllImport("unity_android")] private static extern void SwitchImage(string imageName); public void OnSwitchImageFromAndroid(string imageName) { SwitchImage(imageName); // 在这里加载或更新图片资源 } } ``` 3. **Android调用**: 使用JNI或事件Bus将切换图片的指令传递给Unity。 ```java // JNI 示例 public class NativeMethods { @CalledByNative public static void switchImageFromJava(String imageName) { UnityBridge bridge = UnityBridgeFactory.getBridge(); if (bridge != null) { bridge.switchImage(imageName); } } } public class UnityBridgeFactory { private static UnityBridge bridge; public static UnityBridge getBridge() { if (bridge == null) { // 初始化或从缓存获取UnityBridge实例 } return bridge; } } ``` 4. **建立连接**: - 如果使用JNI,记得在AndroidManifest.xml添加必要的权限以及在C++层注册Java函数。 - 或者使用事件Bus,需要在AndroidUnity之间共享事件系统,比如Leanback EventBus。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值