一些相关知识:
1,
unity3d android 包入口默认类UnityPlayerActivity与UnityPlayerNativeActivity
5.X以上版本 导出apk安装包的默认入口类名字为 com.unity3d.player.UnityPlayerActivity
5.X以下的版本(亲验证4.6.3)的入口类名字则为 com.unity3d.player.UnityPlayerNativeActivity
//AndroidJNI 来自Mono的Android VM的'原始'JNI接口。
AndroidJNI.AttachCurrentThread();//将当前线程附加到Java(Dalvik)VM。
AndroidJavaClass cls = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
m_AJO = cls.GetStatic<AndroidJavaObject>("currentActivity");
m_DataDir = m_AJO.Call<string>("getDataPath");
AndroidJavaClass只能调用静态方法,获取静态属性
AndroidJavaObject能调用公开方法和公开属性
另外,jar文件,不一定非要放在plugins/android目录下。
Unity调用自定义Jar:https://blog.youkuaiyun.com/glunoy/article/details/76638929
1.使用Application.persistentDataPath来操作文件(荐)
本文来自 oldherowang 的优快云 博客 ,全文地址请点击:https://blog.youkuaiyun.com/oldherowang/article/details/78578796?utm_source=copy
1.通过服务器直接下载保存到该位置,也可以通过Md5码比对下载更新新的资源
2.没有服务器的,只有间接通过文件流的方式从本地读取并写入Application.persistentDataPath文件下,然后再通过Application.persistentDataPath来读取操作。
注:在Pc/Mac电脑以及android跟Ipad、ipone都可对文件进行任意操作,另外在IOS上该目录下的东西可以被iCloud自动备份。
概略概述:
一个游戏的开头固定有2种行为,第1种:入口和一个while循环。第2种:解压资源,检查更新,初始化环境。
第1个开头包含:
基本设置:
Application.targetFrameRate = 30;
QualitySettings.vSyncCount = 0;--使用0为不等待垂直同步。值必须是0,1或2。
Screen.sleepTimeout = SleepTimeout.NeverSleep; 省电设置,最后活跃用户交互之后,过一些时间,使屏幕变暗。sleepTimeout以秒计算,0表示不睡眠。默认
基本操作:
log(打印相关),平台(不同平台不同的有,文件路径规则,sdk,验证信息,声音,),计时器(之后即使有操作也直接放在计时器里)
设置纹理shader
第2步无限循环:
1,在FixUpadte刷新所有的人物管理器,在LateUpdate刷新人物动作事件行为。
2,在update中分一定会执行的是计时器。
在update中分几帧依次处理,init,initsdk,initload,检查更新等,将相关的管理器统一初始化好,包括lua。
在update中,前几帧初始化完成之后,之后每帧都调用所有管理器的update函数。
3,在LateUpdate刷新摄像机行为。人物动作事件行为。ui相关管理,切换场景相关管理。
第3步,在所有的东西都初始化完成之后,才开始解压,进入游戏。
-------------------------------------------------------------------
Lua处理部分:
1,一次性注册所有需要的函数,LuaScripteManager.Instance.Init()
2,调用第一个lua函数,将平台,文件地址等必要信息传入,GameClient.init,包含如下:
3,在C#中循环调用Lua函数LuaNetwork.processHandle,但是有一个控制,在特殊情况下打开控制。
4,在C#中循环调用Lua函数GameClient.update