问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

unity可以用c#开发,那么怎么移植到android上的

发布网友 发布时间:2022-05-10 16:07

我来回答

2个回答

热心网友 时间:2023-10-15 05:04

为了实现交互,我们采用的是简单的函数相互调用。如果我们在Unity3D中想调用Android代码,那么可以在脚本文件C#中这样写:
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject activity = jc.GetStatic<AndroidJavaObject>("currentActivity"); activity.Call("UnlockGame")

第一行代码构造了"com.unity3d.player.UnityPlayer"类的一个对象,然后获取了本类的静态成员"currentActivity",取得了activity就可以调用Android代码了(如果你在Unity导出的Eclipse工程中查看unity-class.jar这个文件中的类,你会发现com.unity3d.player这个package下就有UnityPlayer.class这个类,这个类中有个currentActivity)。这个UnlockGame函数是简单的成员方法,一般直接写在MainActivity中,也就是说Android代码中必须要有UnlockGame这个函数,然后才能调用;而"com.unity3d.player.UnityPlayer"和"currentActivity"都是默认的参数。
如果要在Android工程中调用Unity3D中的方法,我们需要新建一个Android工程。可以这样写java代码:
UnityPlayer.UnitySendMessage("AndroidManager", "AndroidCallBackUnlockGame", "");

这里调用了Unity3D中"AndroidCallBackUnlockGame"这个方法,最终激活了游戏。第一个参数表示Unity3D中某个gameObject,第二个参数是这个gameObject上的脚本中的某个方法,第三个参数是这个方法的参数。
上面只是讲述了交互的基本原理,下面是详细步骤。
(1)在Unity3D中创建脚本,如上面第一段代码所示,加入调用Android函数的代码;如果Android要调用C#代码,也要写下被Android代码回调的C#函数。然后,把Unity项目导出为Android工程即可。这里需要注意下图红色部分,其中Bundle Identifier就是导出的Android工程的包名。
(2)打开Eclipse,导入工程,选择import->Existing Android Code Into Workspace,最好把Copy Into WorkSpace选项也选上,这个工程通常叫做“UnityPlayerProxyActivity”。导入工程后,我们可以直接运行这个工程了。但这里是为了与Android代码交互,所以还不能这样做。通常的方法是,我们新建一个Android Application Project,包名必须与导入的工程包名相同;然后把导入的工程作为新工程的Library Project,在工程的Properties里设置
(3)将导入的Unity工程assets目录里的bin和libs目录(新版的没有lib目录)拖放到新工程的assets目录里,即移动资源位置而已。说明一点,新建的Android工程作为了主工程,导入的Unity工程作为了Library Project,它们的Assets和Res资源将会最终合并在一起,但主工程必须要添加Library工程中所有需要的配置信息,也就是AndroidManifest.xml中的内容。这里还可能遇到资源ID冲突的现象,优先级高的主工程将覆盖优先级低的工程。
(4)好了,现在我们有两个工程,一个是新建的,一个是从Unity3D中导入的。这里必须学点Android开发的基础知识,onCreate函数是入口函数,其它的自学吧。想在Android里调用Unity3D代码,就用本文开头的第二段代码即可。通常,我们在新工程里创建一个Activity,在AndroidManifest.xml里进行设置要启动的Activity。假设要启动的是MainActivity,那么对于MainActivity这个类,我们要让它继承UnityPlayerActivity这个类,然后在Oncreate里调用super.onCreate即可。然后,运行新工程,我们的Unity3D游戏也跟着启动了。我们的主工程是新建的,没有设置任何视图,之所以启动了游戏,是因为继承了UnityPlayerActivity这个类,然后调用super.onCreate通过父类启动了游戏。

热心网友 时间:2023-10-15 05:04

为了实现交互,我们采用的是简单的函数相互调用。如果我们在Unity3D中想调用Android代码,那么可以在脚本文件C#中这样写: AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject activity = jc.Ge...
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
电脑屏保息屏时间设置怎么设置电脑几分钟自动锁屏时间 如何设置电脑三分钟锁屏怎么设置电脑几分钟自动锁屏时间 为什么CF玩一段时间ping好高 关于CFping高的问题 抖音免费蓝v是永久的吗?需要什么条件? 求皮卡堂金冠。女号跪求啦!要钱很多很多。衣服很多很多。要发35级以 ... 3a证书多少钱一套 成人教育都包括什么 成人教育有哪几种形式 成人教育包括哪些 什么是幼儿园基础课程? 去澳洲读硕士的话需要多久啊? 澳洲研究生读几年 国内上的本科,去澳洲读研究生,要几年? 锡柴490柴油机水箱里进机油了什么原因 如何理解幼儿园教育工作为幼儿一生发展奠定基础 锡柴发动机水箱里进机油是什么原因造成的 幼儿园教育的基本要素 牌心中有个猫的游戏详细规则 手机上面自己怎么查车况 锡柴发动机机油散热器坏 跟发动机窜机油有关联吗? 怎么查车况? 机油散热器作用? 锡柴410发动机的机油散然器是什么样的? 锡柴4DW91-45g2有机油散热器吗水箱有机油? j6350锡柴发动机散热器损坏有什么影响 拉煤王锡柴发动机机油散热器在发动机哪个位置 如何查 询车况? 一汽锡柴4100的机油散热器和朝柴4102的一样吗 查车况怎么查? unity5.6不能导出android 用Unity3D做好了自己的游戏项目,怎么导入到android手机上玩,是不是还需要调用android的SDK? 明年打算去澳洲莫纳什大学读硕士,请问需要读几年的呢 unity导出Android遇到说SDK安装有问题 无dnase和rnase的枪头有哪些 怎么测自己酒精浓度开车昨晚十一点喝的酒,今天上午可以开车吗?哪里可以测量酒驾_百度问一问 有什么软件可以让王者荣耀刷金币 益阳有查酒驾的仪器买不 &#x2126;在键盘哪里 花蛤能过夜吗 关于保护环境的有创意的标语 延时喷剂评测,安太医好不好,副作用,效果综合评测 慌了,完全慌了,,没底了,问下延时喷剂哪个好啊?我到现在也不知道自己为什么会时间变的那么短了? 延时喷剂什么牌子用的人最多 环保标志绿叶戴耳机什么意思 低碳生活新创意标语 我国的原油期货使用的标价和结算货币是什么? 延时喷剂用法麻烦不? 嘉吉投资(中国)有限公司怎么样? 去农庄能玩什么,有推荐的吗?