打Jar包流程
1,新建一个AS的Java空项目 2,修改plugins为com.android.library,删掉多余的配置,再点击Sync Now,把这个工程变成类库
3,在java目录下新建所需要的Java类
4,打包
5,找到jar包
6,将这个jar包放入Unity工程下的Plugins/Android下即可
C#调用Java:
得到类:AndroidJavaClass class=new AndroidJavaClass(“包名.类名”); 得到对象:AndroidJavaObject obj =new AndroidJavaObject(“包名.类名”);
调用方法:obj.Call(“方法名”); 调用静态方法:class.CallStatic(“方法名”); obj.CallStatic(“方法名”); 得到字段:obj.Get(“字段名”);
Java调用C#
(1) 找到Unity安卓平台目录下的安卓jar包。 Unity安装目录下的:Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes (2) 将这个jar包放入AS工程下的libs目录下
(3) 将这个jar包添加到库中
(4) 通过UnityPlayer这个类中的UnitySendMessage方法与C#调用, 这个方法三个string类型参数, var1:游戏对象名称 var2:方法名 var3:参数
Unity安卓项目结构:
Unity打包安卓项目
用AS打开这个项目:File-Open
launcher:放置安卓的配置以及权限
AndroidManifests配置文件
unityLibrary:放置Unity主要内容
Java:代码 assets:游戏资源 AndroidManifest:
Activity(活动):
代表了一个具有用户界面的单一屏幕,具有一系列的周期函数 onCreate():第一次创建 onStart():用户可见调用 onResume():应用程序与用户可交互的时候调用 onPause():被暂停的活动无法接受用户输入,不能执行任何代码。当前活动暂停,上一个活动将被恢复时调用 onStop():不可见调用 onDestroy():销毁调用 onRestart():停止后重新打开调用
创建一个自定义的活动,
Unity的默认的UnityActivity可以在Unity的安装目录下的:Editor\Data\PlaybackEngines\AndroidPlayer\Source\com\unity3d\player下找到
-
创建一个自定义的活动类继承Activity,重写周期函数 -
在AndroidManifest增加一个Activity节点,将UntiyPlayerActivity节点的主活动移动到自定义活动下 -
创建活动自定义布局
创建后自定义GUI(Text,Button等),鼠标拖动放入,编辑详细信息
- 在onCreate中调用setContentView这个自定义布局
setContentView(R.layout.testlayout);//通过id设置 - 布局上的GUI组件,通过调用findViewById(R.id.button)得到
Button btn = findViewById(R.id.button); 给按钮加上事件:btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(TestActivity.this,UnityPlayerActivity.class);//跳转活动 startActivity(intent);//开始活动 }});
创建Activity动画
(1)帧动画
- 在res/drawable创建一个动画XML
- 新建根节点< animation-list android:oneshot=“false”>,oneshot:false代表一直重复播放
- 在animation-list节点下创建图片节点:drawable表示哪个图片,duration表示当前图片播放多久,毫秒计算
- 在layout中创建一个ImageView组件,将background设为新建的动画XML
- 在活动脚本的onCreate方法,先设置布局,在得到ImageView组件,在激活对应的动画
setContentView(R.layout.test);//设置布局 Img = findViewById(R.id.wrap);//通过id得到组件 Img.setImageResource(R.drawable.animation);//给图片组件绑定动画 AnimationDrawable animationDrawable = (AnimationDrawable) Img.getDrawable();//得到图片组件上的动画 animationDrawable.start();//激活动画
(2)自定义UnityAPK启动页
(1) 新建AS项目(注意包名要和Unity的包名相同)导入class.jar和UnityPlayerActivity脚本,在Unity安装目录下 (2) 在新建一个Java类继承UnityPlayerActivity (3) 重写onCreate方法 (4) 创建ImageView这样的GUI组件: ImageView iv = new ImageView(this); (5) 增加动画以及给组件绑定动画以及激活动画,方式和帧动画方式差不多(帧动画的图片大小不能太大,不然会报GC的错误) (6) 添加到unity的活动中 mUnityPlayer.addView(iv); (7) 增加隐藏方法调用隐藏启动页: iv.setVisibility(View.GONE); //GONE隐藏,GONE 不显示且不占用布局,VISIBLE显示,INVISIBLE:不显示 (8) 修改AndroidManifest.xm,增加activity节点以及intent-filter节点设置主activity为自定义的activity,
(9) 生成的主jar包,以及AndroidManifest.xml,以及res下用到的资源也放入Unity工程下(Assets/Plugins/Android下)。(注意,这个jar包里有UnityPlayerActivity和BuildConfig脚本,会与unityLibrary里的重复,可以通过改后缀的方式用360压缩解压在删除在压缩在改后缀删除) (10) 在Unity的Awake方法中调用这个隐藏方法
动态请求权限
Unity中可以通过UnityEngine.Android.Permission.RequestUserPermission方法获取用户同意的一些权限,比如相机之类的
另外一些权限直接在AndroidManifest文件中添加uses-permission节点
AndroidStudio中的一些小功能
(1) 显示消息面板:Toast.makeText(Context text,String str).show(); Context:Activity是继承Context的,如果实在Activity中的话,直接this str:消息内容 (2)
AS小技巧:
AS打开日志输出:
按住Ctrl键的同时单击鼠标查看源码
显示代码行数:
修改文件编码为UTF-8
多行注释取消注释快捷键: Ctrl+/
注意事项
(1) ,警告AGPBI导致的问题 是包重复引用导致的原因,仔细检查Java类中的引用包 (2) 报错Attribute application@label value=…AndroidManifest 是因为Library也定义了与主项目相同的属性,会导致合并失败,比如都默认生成的android:label="@string/app_name" 或者 android:icon="@drawable/icon_logo",在application中加入tools:replace="android:icon, android:theme , android:label"标签解决或者选择删除哪个属性 (3) res下的文件不能以数字开头
|