Unity与Android相互调试,调用

//-------------------------------------------------------------------

安装JDK与JRE,目录随意,不是同一个且记住就行。

安装完成后,此电脑(Win7叫计算机),右键,属性,高级系统选项,环境变量

系统变量,新建,JAVA_HOME变量
变量值选择或填写JDK的安装目录

系统变量,找到Path变量(已经存在的),编辑
在变量值最后输入JDK安装目录下的bin目录(可以直接输入也可以写成%JAVA_HOME%\bin)与JRE安装目录下的bin目录
注意:原Path变量最后若已经有分号则不用加,否则先加一个分号再输入

系统变量,新建,CLASSPATH变量
变量值填写(可直接复制下一行内容)
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

运行cmd 输入 java -version与javac -version
java或javac和 -version 之间有空格
若显示版本信息 则说明安装和配置成功

//-------------------------------------------------------------------

Unity发布Andriod注意:

Internal:
	可以不签名,使用默认的
Gradle:
	必须有自己的签名
	1.使用cmd进入jdk\bin目录下
		cd D:\Java\jdk1.8.0\bin
	2.keytool(钥匙工具) -genkey(生成钥匙) -alias(别名) Liang(自己起的名字) -keyalg(加密方式RSA) RSA
	-validity(有效时间,天) 36500 -keystore(密钥库文件名) liang.keystore(必须.keystore)
	3.一路输入
	
Unity打包错误:
	CommandInvokationFailure: Unable to list target platforms. Please make sure the android sdk path is correct. See the Console for more details. 
	D:/Java/jdk1.8.0\bin\java.exe -Xmx2048M -Dcom.android.sdkmanager.toolsdir="D:/Java/sdk\tools" -Dfile.encoding=UTF8 -jar "D:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\sdktools.jar" -

	stderr[
	Error:Invalid command android
	]
	stdout[

	]
	
	新版SDK中的tools工具不兼容
	
//----------------------------------------------------------

调试:
	1.com.unity3d.genericremote.apk(UnityRemote)
	2.AS
	3.模拟器
	
	1.UnityRemote使用
		Editor Setting->UnityRemote->Device->Any
		
	2.使用AndriodStudio AVD
		Tools->Android-> AVD
		
		
//----------------------------------------------------------

	实际正交视口 = 初始正交视口 * 初始宽高比 / 实际宽高比
		
	
//----------------------------------------------------------	
	
Andriod与Unity互相调用
	1.导出jar包 + 拓展MainActivity + Java主导
	新建Activity->勾选Launcher Activeity
	导入unity包  D:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
	放入libs中
	
	将app->manifeste中的xml文件复制到新建的Activeity中的manifeses中,修改
		<?xml version="1.0" encoding="utf-8"?>
		<manifest xmlns:android="http://schemas.android.com/apk/res/android"
		package="com.example.geefish.testlibrary">

			<application
				android:allowBackup="true"
				android:label="UnityAndriodTest"
				android:supportsRtl="true">
				<activity android:name=".MainActivity">
					<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>
		
	进入新建的MainActivity中,继承UnityPlayerActivity
	在MainActivity中实现方法
	选中新建的库,然后Build->Make Moudle"xxx"
	
	切回Project  build->intermediates->bundles->debug就是打包出的  将libs与res考出
	使用外部的classes.jar替换libs中的文件
	
	build->intermediates->manifeste->full->debug 中的xml文件考出
	修改xml文件中的包名,改成与unity一至,全小写
	文件中的android:label="UnityAndriodTest"属性会是打出包的名字
	
	打开unity,切换成andriod平台,改包名
	将三个文件放入 Plugins->Android 下
	
	使用:
	private void Start()
    {
        //获的位于com.unity3d.player包下UnityPlayer类
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        //获得类下的对象
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        //调用方法,泛型表示有返回
        jo.Call<int>("Add", 1, 2);
    }
	
Andriod调用Unity:
	UnityPlayer.UnitySendMessage("","","");		1.脚本所在物体 2.方法名 3.参数
	
	
//---------------------------------------------------------------------------

Andriod与Unity互相调用
	2.导出aar包 + 拓展MainActivity + Java主导
		修改icon 将app->manifeste中的xml文件复制到新建的Activeity中的manifeses中,修改
		增加 android:icon="@mipmap/ic_launcher"
		将app->res->mipmap复制到自己的res文件中
		
	与之前一样,导出后,找到build->outputs->arr,把里面文件考出
	build->intermediates->manifeste->full->debug 中的xml文件考出进行修改
		外面的xml照常修改,aar包里的xml不动包名,删除icon和lable属性
		aar包里的libs下的classes.jar删除并换成aar包根目录下的文件
		
	使用和别的一样
	
	
//---------------------------------------------------------------------------

Andriod与Unity互相调用
	2.提供额外的类 + Java主导
	
		新建Modle
		导入unity包  D:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
		放入libs中
		
		在 java->第一个文件夹中新建java class
		
		选中新建的库,然后Build->Make Moudle"xxx"
		切回Project  build->intermediates->bundles->debug中,使用classes.jar(可改名)放入 Plugins->Android 下
		
		
		不是静态方法,就是得到类的对象,如果是静态方法,需要得到类
		private void Start()
		{
			//获得类下的对象(包名.类名)可以给构造方法传参
			AndroidJavaObject jo = new AndroidJavaObject("com.example.geefish.simplelibrary.Test");
			//调用方法,泛型表示有返回
			jo.Call<int>("Add", 1, 2);
		}
		
		private void Start()
		{
			//获得类下的对象(包名.类名)可以给构造方法传参
			AndroidJavaClass jc = new AndroidJavaClass("com.example.geefish.simplelibrary.Test");
			//调用类下静态方法
			jc.CallStatic<int>("Add", 1, 2);
		}
		
		
Andriod与Unity互相调用
	3.C#主导(使用C#调用SDK)主要是找到所在包名
	
		private void Start()
		{
			//获得类下的对象(包名.类名)可以给构造方法传参
			AndroidJavaObject jo = new AndroidJavaObject("com.example.geefish.simplelibrary.Test");
			//调用方法,泛型表示有返回
			jo.Call<int>("Add", 1, 2);
		}
		
		private void Start()
		{
			//获得类下的对象(包名.类名)可以给构造方法传参
			AndroidJavaClass jc = new AndroidJavaClass("com.example.geefish.simplelibrary.Test");
			//调用类下静态方法
			jc.CallStatic<int>("Add", 1, 2);
		}
	
	
	AndroidJavaProxy的使用模拟java中的接口
	class DateCallBack : AndroidJavaProxy
    {
        public DateCallBack() : base("包名$接口名")
        {
        }

        //接口中的方法
    }
	
	
	
	
	
	
	
	
	
	
	
	
	

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值