unity 减少drawcallandroidjavaobject.call 是异步还是同步

Unity 与 Android交互
网上有很多关于这一方面的帖子,试了很多都是有问题的,可能是因为版本的原因,这里我写出关于现在unity版本的教程,希望对大家有所帮助,不需要走太多弯路。
环境要求:
1. & & unity3d 5.4.0f3
2. & & Android Developer Tools(Eclipse)
&
在开始之前,这里先说明一下,这篇教程没有太多技术上的东东,以操作为主,所以这里不会讲太多理论的知识。如果大家想要进行理论知识的补充,建议在操作成功以后,再去谷歌有关的资料,这样会更加明朗。祝大家学习愉快!!
开始啦~~~
1,首先新建android工程
726 || this.offsetHeight>700){if(this.offsetWidth/726 > this.offsetHeight/700){this.width=726;}else{this.height=700;}}" style="max-width:726max-height:700" title="点击查看原图" onclick="if(this.parentNode.tagName!='A') window.open('/forum/attachment/1610/thread/27_12052_3cfda74e3720338.jpg');" />
给项目取名
726 || this.offsetHeight>700){if(this.offsetWidth/726 > this.offsetHeight/700){this.width=726;}else{this.height=700;}}" style="max-width:726max-height:700" title="点击查看原图" onclick="if(this.parentNode.tagName!='A') window.open('/forum/attachment/1610/thread/27_31d58b969.jpg');" />
&next--&&
726 || this.offsetHeight>700){if(this.offsetWidth/726 > this.offsetHeight/700){this.width=726;}else{this.height=700;}}" style="max-width:726max-height:700" title="点击查看原图" onclick="if(this.parentNode.tagName!='A') window.open('/forum/attachment/1610/thread/27_d0f30d0fe.jpg');" />
注意:这里最好勾选上,好处待会儿下面讲
726 || this.offsetHeight>700){if(this.offsetWidth/726 > this.offsetHeight/700){this.width=726;}else{this.height=700;}}" style="max-width:726max-height:700" title="点击查看原图" onclick="if(this.parentNode.tagName!='A') window.open('/forum/attachment/1610/thread/27_12052_e0ccbe.jpg');" />
&726 || this.offsetHeight>700){if(this.offsetWidth/726 > this.offsetHeight/700){this.width=726;}else{this.height=700;}}" style="max-width:726max-height:700" title="点击查看原图" onclick="if(this.parentNode.tagName!='A') window.open('/forum/attachment/1610/thread/27_bca.jpg');" />726 || this.offsetHeight>700){if(this.offsetWidth/726 > this.offsetHeight/700){this.width=726;}else{this.height=700;}}" style="max-width:726max-height:700" title="点击查看原图" onclick="if(this.parentNode.tagName!='A') window.open('/forum/attachment/1610/thread/27_1f4da449a6.jpg');" />
2,创建工程以后,我们需要把unity的工具包引用过来,在eclipes右键工程目录-&build path-&Add
External Archives选项。
726 || this.offsetHeight>700){if(this.offsetWidth/726 > this.offsetHeight/700){this.width=726;}else{this.height=700;}}" style="max-width:726max-height:700" title="点击查看原图" onclick="if(this.parentNode.tagName!='A') window.open('/forum/attachment/1610/thread/27_c8f5ff82c.jpg');" />
Unity工具包路径在
X:\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes(x为盘符)目录下的classes.jar文件。
726 || this.offsetHeight>700){if(this.offsetWidth/726 > this.offsetHeight/700){this.width=726;}else{this.height=700;}}" style="max-width:726max-height:700" title="点击查看原图" onclick="if(this.parentNode.tagName!='A') window.open('/forum/attachment/1610/thread/27_12052_eab9.jpg');" />
完成后,打开MainActivity类,把该类默认继承的Activity改成继承UnityPlayerActivity类,
然后把不要的代码去掉,如把onCreate函数里面的setContentView(R.layout.activity_main);删掉,并且把onCreateOptionsMenu函数删掉(如果你不需要的话)。
删掉以后长这样子:
&726 || this.offsetHeight>700){if(this.offsetWidth/726 > this.offsetHeight/700){this.width=726;}else{this.height=700;}}" style="max-width:726max-height:700" title="点击查看原图" onclick="if(this.parentNode.tagName!='A') window.open('/forum/attachment/1610/thread/27_12052_3abfc.jpg');" />
3.我们写一些简单的测试代码,如下
726 || this.offsetHeight>700){if(this.offsetWidth/726 > this.offsetHeight/700){this.width=726;}else{this.height=700;}}" style="max-width:726max-height:700" title="点击查看原图" onclick="if(this.parentNode.tagName!='A') window.open('/forum/attachment/1610/thread/27_1d880a4c7dc.jpg');" />
保存以后eclips会自动生成编译好的jar包,在bin目录下面,这就是为什么上面需要勾选的原因726 || this.offsetHeight>700){if(this.offsetWidth/726 > this.offsetHeight/700){this.width=726;}else{this.height=700;}}" style="max-width:726max-height:700" title="点击查看原图" onclick="if(this.parentNode.tagName!='A') window.open('/forum/attachment/1610/thread/27_4f3ddf3da6.jpg');" />
看,这个就是我们要的jar包,待会儿给unity使用
726 || this.offsetHeight>700){if(this.offsetWidth/726 > this.offsetHeight/700){this.width=726;}else{this.height=700;}}" style="max-width:726max-height:700" title="点击查看原图" onclick="if(this.parentNode.tagName!='A') window.open('/forum/attachment/1610/thread/27_7a036eaf8c.jpg');" />
4.新建一个Unity3d工程,新建的过程这里就不介绍了。
在Assets目录下面新建一个Plugins文件夹,放插件用的文件夹,在Plugins目录下面新建一个Android文件夹,以后把安卓的东东会放到这里下面,目录长这样
726 || this.offsetHeight>700){if(this.offsetWidth/726 > this.offsetHeight/700){this.width=726;}else{this.height=700;}}" style="max-width:726max-height:700" title="点击查看原图" onclick="if(this.parentNode.tagName!='A') window.open('/forum/attachment/1610/thread/27_ef9870f20ff.jpg');" />
5.然后要拷贝两个文件过来这里,
①一个是刚刚的那个jar包。还记得在哪里吗?在eclipes的bin目录下面
②就是在你的unity3d安装目录里面的AndroidManifest.xml文件,路径是: x:\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Apk(x是你的安装盘符)
我的路径是
726 || this.offsetHeight>700){if(this.offsetWidth/726 > this.offsetHeight/700){this.width=726;}else{this.height=700;}}" style="max-width:726max-height:700" title="点击查看原图" onclick="if(this.parentNode.tagName!='A') window.open('/forum/attachment/1610/thread/27_12052_ba726d07419ebfb.jpg');" />
其它两个文件夹不用理它
注意:这个千万不能用eclipes里面的,会报错.
两个拷贝完成后目录长这样
726 || this.offsetHeight>700){if(this.offsetWidth/726 > this.offsetHeight/700){this.width=726;}else{this.height=700;}}" style="max-width:726max-height:700" title="点击查看原图" onclick="if(this.parentNode.tagName!='A') window.open('/forum/attachment/1610/thread/27_ba90dd26267.jpg');" />
6.ok,现在我们要对AndroidManifest.xml进行简单的配置
726 || this.offsetHeight>700){if(this.offsetWidth/726 > this.offsetHeight/700){this.width=726;}else{this.height=700;}}" style="max-width:726max-height:700" title="点击查看原图" onclick="if(this.parentNode.tagName!='A') window.open('/forum/attachment/1610/thread/27_18e26723b.jpg');" />
如上图:
第一处要改成你自己的项目包名,包名在哪里找呢?就在创建项目时候取名字的时候的那个框726 || this.offsetHeight>700){if(this.offsetWidth/726 > this.offsetHeight/700){this.width=726;}else{this.height=700;}}" style="max-width:726max-height:700" title="点击查看原图" onclick="if(this.parentNode.tagName!='A') window.open('/forum/attachment/1610/thread/27_f.jpg');" />
什么?没有注意看?那怎么办呢?没事,在代码里面到处都是,看这里
726 || this.offsetHeight>700){if(this.offsetWidth/726 > this.offsetHeight/700){this.width=726;}else{this.height=700;}}" style="max-width:726max-height:700" title="点击查看原图" onclick="if(this.parentNode.tagName!='A') window.open('/forum/attachment/1610/thread/27_f8eba6edba.jpg');" />
好,把包名填好了,上图的第二处就是填写你jar包的入口类。就是MainActivity.java类,记得要加上包名哦。
5.在unity方面,在写c#代码之前,我们还有一个地方要配置,就是android平台界面的配置,看下图
726 || this.offsetHeight>700){if(this.offsetWidth/726 > this.offsetHeight/700){this.width=726;}else{this.height=700;}}" style="max-width:726max-height:700" title="点击查看原图" onclick="if(this.parentNode.tagName!='A') window.open('/forum/attachment/1610/thread/27_bf352b4f7e07.jpg');" />
这里的包名要跟android的包名要一致才行哦。
6.好了,下面开始写c#测试代码了
在写代码之前我们先用UGUI在场景创建一个button和text,用于待会儿测试。
如下图所示:
726 || this.offsetHeight>700){if(this.offsetWidth/726 > this.offsetHeight/700){this.width=726;}else{this.height=700;}}" style="max-width:726max-height:700" title="点击查看原图" onclick="if(this.parentNode.tagName!='A') window.open('/forum/attachment/1610/thread/27_640b3136cd.jpg');" />
然后,随便创建一个类,挂到场景的任意物体上,开始写代码了
726 || this.offsetHeight>700){if(this.offsetWidth/726 > this.offsetHeight/700){this.width=726;}else{this.height=700;}}" style="max-width:726max-height:700" title="点击查看原图" onclick="if(this.parentNode.tagName!='A') window.open('/forum/attachment/1610/thread/27_12052_ffaa4d.jpg');" />
在onClick函数里面加入了如下代码AndroidJavaClass
= new ndroidJavaClass(&com.unity3d.player.UnityPlayer&);//参数必须为com.unity3d.player.UnityPlayerAndroidJavaObject
= .GetStatic&AndroidJavaObject&(&currentActivity&);//参数必须为currentActivityvar
= .CallStatic&int&(&sum&, new object[] { 1, 2 });
. = .ToString();
&
7,写完了以后进行打包,然后安装到android手机或虚拟机上进行测试
726 || this.offsetHeight>700){if(this.offsetWidth/726 > this.offsetHeight/700){this.width=726;}else{this.height=700;}}" style="max-width:726max-height:700" title="点击查看原图" onclick="if(this.parentNode.tagName!='A') window.open('/forum/attachment/1610/thread/27_12052_df8cd464bbfcf00.jpg');" />
测试成功!!如有问题,请在下面留言或者给我发邮件
要评论请先&或者&
感谢楼主提供的方法 &安装在手机上时 出现了解析错误这个该怎么解决?
:感谢楼主提供的方法 &安装在手机上时 出现了解析错误这个该怎么解决? 出现了什么错误?麻烦把代码和错误截图发上来
非常感谢啊!一试就成功了,别人的方法都好乱。
:非常感谢啊!一试就成功了,别人的方法都好乱。 不客气,很高兴能帮到你
牛人,一千一万个赞,我花了一周时间在搞这个,搞不定,功夫不负有心人,终于让我碰上你的贴子,帮我解决了一个大忙,非常感谢谢
:牛人,一千一万个赞,我花了一周时间在搞这个,搞不定,功夫不负有心人,终于让我碰上你的贴子,帮我解决了一个大忙,非常感谢谢 还有个问题,现在谷歌不是不再维护eclpise,那现在还用eclipse开发,会有影响不?
:还有个问题,现在谷歌不是不再维护eclpise,那现在还用eclipse开发,会有影响不? 这个跟什么工具开发没关系的
726 || this.offsetHeight>700){if(this.offsetWidth/726 > this.offsetHeight/700){this.width=726;}else{this.height=700;}}" style="max-width:726max-height:700" onclick="if(this.parentNode.tagName!='A'&&this.width>screen.width-461) window.open(this.src);" />726 || this.offsetHeight>700){if(this.offsetWidth/726 > this.offsetHeight/700){this.width=726;}else{this.height=700;}}" style="max-width:726max-height:700" title="点击查看原图" onclick="if(this.parentNode.tagName!='A') window.open('/forum/attachment/1611/thread/27_bfbcb1541bc2.png');" />我照着教程做了一遍,最后点按钮是出现这个错误,能帮忙看看吗
:我照着教程做了一遍,最后点按钮是出现这个错误,能帮忙看看吗 真机或者虚拟机上测试当前位置: >
非常详细的unity与android之间的通讯操作
时间: 09:17 来源:互联网 作者:网络 浏览:
& &&&这段时间在研究嵌入sdk,途中遇到不少问题和坑,在这就不一一说了。嵌入sdk是比较常见的吧,如接入广告啊,新浪的分享...... 这些都需要接入sdk的。(这些我在这段时间都应以研究成功了,后期会写上)。现在我们从最基本的做吧。&&其实这些和什么引擎都是没多大关系的。不管是unity,还是cosos2d......&&说白了,这些就是和移动平台有关系。ios,android,wp8啊。& &如果你不熟悉android,没关系,即使你是从未打开过eclipse都可以,因为我把详细步骤给以图片的方式展示出来。现在我们就从最基本的做起吧。主要是实现在unity中去调android的方法。其实这个很简单,只是为了从未接触过安卓的人才弄的这样详细。(我以前没接触过安卓,当时多么希望能有一份这样的教程教导我啊。)1.& &打开eclipse,新建一个安卓的工程。在这里要注意我们的包名,和最低的sdk,包名的话我们在unity中导出的时候需要用到。至于最低的sdk就是一个兼容问题了,如果我们选4.0一下的话,那当我们在unity导出的时候会报错误的。我在这坑了很久很久,最后才发现一系列的错误是这个因起来的。最好是要在32位的sdk,jdk中进行吧,这样会少很多莫名的错误问题, 注意的就是我在下图圈起来的地方。我们一直狂点下一步,当我们看见这个时,就是最后一步了。如果大家都没错,创建的新工程就是如下一样了。我圈起来的地方多是会用到了,需要注意的地方。2.现在我们安卓工程创建好了,就到了开始编写的时候了。我们打开该目录D:\Program Files (x86)\Unity\Editor\Data\PlaybackEngines\androidplayer\bin找到class.jar 。这个是unity帮我们封装好了的jar包,我们要用到该包。然后我们将class.jar,放进我们的安卓工程去。直接拖进libs目录就可以。如图现在我们来引用下吧,选中它,右键.......... 如下:3.好了,现在我们把重要的都加进来了,那我们现在就来做个简单的实验,就是点击unity中德按钮,打开一个安卓的ACtivity吧。我们首先要做的就是把这个Activity布局。我们在res--layout文件夹下找到activity_main打开,加入这些内容:&?xml version=&1.0&&encoding=&utf-8&?&&ScrollView&& & xmlns:android=&/apk/res/android&& &&& & xmlns:tools=&/tools&& &&& & android:id=&@+id/container&& & android:layout_width=&match_parent&& & android:layout_height=&match_parent&& & tools:context=&com.ITFFuture.testua.MainActivity&&& & tools:ignore=&MergeRootFrame&&&&LinearLayout& & android:layout_width=&fill_parent&& & android:layout_height=&wrap_content&& & android:orientation=&vertical&&&TextView android:id=&@+id/textView0&& & android:layout_width=&fill_parent&& & android:layout_height=&wrap_content&& & android:textColor=&#000000&& & android:textSize=&18sp&& & android:background=&#00FF00&& & android:text=&测试Unity f和 Android之间额通讯&& & android:gravity=&center_vertical|center_horizontal&&/&&TextView android:id=&@+id/textView1&& & android:layout_width=&fill_parent&& & android:layout_height=&wrap_content&& & android:textColor=&#FFFFFF&& & android:textSize=&18sp&& & android:background=&#0000FF&& & android:text=&大家好,我是安卓的Activity&& & android:gravity=&center_vertical|center_horizontal&&/&&Button android:id=&@+id/button0&& & android:layout_width=&fill_parent&& & android:layout_height=&wrap_content&& & android:text=&关闭这个Activity&/&&/LinearLayout&&/ScrollView&我们的内容转成实际界面是这样的样子。现在我们来新建一个Class,取名为OpenActivity1,如图:然后我们接入代码,代码内容如下:package com.ITFFuture.import android.app.Aimport android.os.Bimport android.view.Vimport android.view.View.OnClickLimport android.widget.Bimport android.widget.TextVpublic&class&OpenActivity1 extends Activity {&&&&& & /** Called when the activity is first created.&*/& &&& & @Override& &&& & public&void&onCreate(Bundle savedInstanceState) {& && &&&& & & & super.onCreate(savedInstanceState);& && &&&& & & & setContentView(R.layout.activity_main);& & & & TextView text&= (TextView)this.findViewById(R.id.textView1);& & & & text.setText(this.getIntent().getStringExtra(&name&));& & & & Button close&= (Button)this.findViewById(R.id.button0);& & & & close.setOnClickListener(new&OnClickListener() {& && && && && & & & & & @Override& & & & & & public&void&onClick(View v) {& & & & & & & & OpenActivity1.this.finish();& & & & & & }& & & & });& & }}这个代码很简单,,改变中间的字母内容,是点击关闭按钮,关闭此Activity.最终效果如下:好了,现在我们在MainActivity中谢方法吧,这个Activity就相当于第一个场景。 MainActivity的内容:package com.ITFFuture.import com.unity3d.player.UnityPlayerAimport android.app.Aimport android.content.Cimport android.content.Iimport android.os.Bimport android.util.Lpublic&class&MainActivity extends UnityPlayerActivity {&& & Activity mActivity=& & Context mContext&=&& & @Override& & protected&void&onCreate(Bundle savedInstanceState) {& & & & super.onCreate(savedInstanceState);& & & & mActivity=& & & & mContext&=&& & & & StartActivity1(&我是通过安卓中显示的Activity&);& & }& & public&void&StartActivity1(String name){&& & & & //&TODO Auto-generated method stub& & & & Intent intent =&new&Intent(mContext,OpenActivity1.class);&& & & & intent.putExtra(&name&, name);& & & & mActivity.startActivity(intent);& & }}还有最后一点,要配置AndroidManifest.xml.声明我们定义的Activity.&?xml version=&1.0&&encoding=&utf-8&?&&manifest xmlns:android=&/apk/res/android&& &&& & package=&com.ITFFuture.testua&& & android:versionCode=&1&& & android:versionName=&1.0&&&& & &uses-sdk& & & & android:minSdkVersion=&14&& & & & android:targetSdkVersion=&17&&/&& & &application&& & & & android:allowBackup=&true&& & & & android:icon=&@drawable/ic_launcher&& & & & android:label=&@string/app_name&& & & & android:theme=&@style/AppTheme&&&& & &activity&& & & & android:name=&com.ITFFuture.testua.MainActivity&&& & & & android:label=&@string/app_name&&&&& & & & &intent-filter&& & & & & & &action android:name=&android.intent.action.MAIN&&/&&& & & & & & &category android:name=&android.intent.category.LAUNCHER&&/&& & & & &/intent-filter&& & &/activity&& & &activity&& & & & android:theme=&@android:style/Theme.NoTitleBar.Fullscreen&& & & & android:name=&.OpenActivity1&&& & &/activity&&& & &/application&&/manifest&我们主要是声明了我们自己的Avtivity,这个很重要,在后期加入广告啊,新浪微博分享爱啊....好了,那我们最终来导出jar包吧。在导出之前还是先刷新下(F5),和Build 下Project.我们现在来导出吧。1.& &2.3.现在我们的jar包已经成功导出了。是这样子的我们在安卓中的所有操作也就完成了哈,现在接下来的就是如何和unity进行互通了。3.从unity中去调用在unity中,我们新建一个Plugins文件夹,Plugins下面又建Android文件夹,Android文件夹下再建一个bin文件夹,我们将我们导出的jar包放进这个文件夹下,然后我们在eclipse中的res文件复制一份放入Android。也要把AndroidManifest.xml放进Android目录下。详细情况如下:现在我们新建一个脚本吧。用来调用安卓中那个StartActivity1方法。using&UnityEusing&System.Cpublic&class&Test : MonoBehaviour{&& &//&Update is called once per frame& & void&Update(){& & & & if&(Input.GetKeyDown(KeyCode.Escape) || Input.GetKeyDown(KeyCode.Home) ||&Input.GetKeyDown(KeyCode.Menu)){& & & & & & Application.Quit();&& & & & }& & }& & void&OnGUI(){& & & & if&(GUILayout.Button(&Open Activity&, GUILayout.Height(80))){&& & & & & & AndroidJavaClass jc&=&new&AndroidJavaClass(&com.unity3d.player.UnityPlayer&);&& & & & & & AndroidJavaObject jo= jc.Get&AndroidJavaObject&(&currentActivity&);& & & & & & jo.Call(&StartActivity1&,&&Unity中调出android的方法了&);& & & & }& & }}最后我们导出apk吧。在其中要设置一项。就是包名。这个要和安卓工程的包名一模一样哦。然后我们运行下吧。在刚开始的时候我们会看安卓中德Activity,然后我们点击关闭按钮,就能看那Unity的Scene了。这个是我们点击Open Activity这个按钮时候,安卓中的Activity又被我们打开了。好了,测试成功!!
(责任编辑:向阳)
免责声明:Unity之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。
猜你也喜欢看这些 ??????
其他类型的代码编程 ??????因为unity需要接入java的sdk,所以今天主要学习了一下相关的通信方法。需要先做如下准备工作:
  1、下载android SDK安装包,,里面会包含sdk和eclipse两个文件夹;
  2、unity工程从Build Settings界面选择android平台,选中Google Android Projects,导出安卓工程;
  3、打开eclipse导入安卓工程,测试编译通过。
  有两种方法可以让unity跟java进行通信:
  第一种写法,在eclipse中自定义个包名,在里面创建一个类,例如我自定义了com.sdk.SDKAPI:
12345678910111213141516171819202122232425262728293031323334353637package com.sdk;import org.json.JSONException;import org.json.JSONObject; import android.os.Bundle;import android.util.Log;&import com.unity3d.player.*;public class SDKAPI{ private String test(int a,String b) {
Log.i(&unity&, &test: &+a+& &+b);
JSONObject obj = new JSONObject();
obj.put(&first&, 43);
obj.put(&second&, &testCall&);
} catch (JSONException e) {
e.printStackTrace();
com.unity3d.player.UnityPlayer.UnitySendMessage(&ARCamera&, &UnityTest&, obj.toString());
return &wxd&; } private static int test1(int a,String b) {
Log.i(&unity&, &test1: &+a+& &+b);
JSONObject obj = new JSONObject();
obj.put(&first&, 55);
obj.put(&second&, &test1Call&);
} catch (JSONException e) {
e.printStackTrace();
com.unity3d.player.UnityPlayer.UnitySendMessage(&ARCamera&, &UnityTest&, obj.toString());
return 6543; }}  打开AndroidManifest.xml文件,在application节点下有若干个activity节点,找到android:name=”com.xxxxx.UnityPlayerNativeActivity”属性,后面字符串显示的是目前java工程中当前正在使用的activity类文件,把他改成我们刚才自定义的com.sdk.SDKAPI,然后在unity中代码如下:
UnityEngine;
System.Collections;
MonoBehaviour
&&&&private
AndroidJavaClass
&&&&&&&&_class
AndroidJavaClass(&com.sdk.SDKAPI&);
UnityTest(string
&&&&&&&&Debug.Log(&UnityTest
&&&&&&&&if
(GUI.Button(new
&test ...&))
&&&&&&&&&&&&if
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&string
_class.Call&string&(&test&,
&wxdgame&);
&&&&&&&&&&&&&&&&Debug.Log(&::1:::&
&&&&&&&&&&&&}
&&&&&&&&if
(GUI.Button(new
&test1 ...&))
&&&&&&&&&&&&if
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&int
_class.CallStatic&int&(&test1&,
&testgame&);
&&&&&&&&&&&&&&&&Debug.Log(&::2:::&
&&&&&&&&&&&&}
  编译运行通过,点击我们放置的按钮,查看log输出,于是我们得到了两个结论:1、java类中的私有方法也可以被unity调用;2、只能调用静态方法。如果我想调用java非静态方法怎么办呢?于是就有了第二种写法,我们修改下unity的代码:
12345678910111213141516171819202122232425262728293031323334353637using UnityEngine;using System.Collections;&public class GameWorld : MonoBehaviour {&&&&private AndroidJavaClass _class;&&&&private AndroidJavaObject _obj;& void Start ()&&&&{&&&&&&&&_class = new AndroidJavaClass(&com.unity3d.player.UnityPlayer&);&&&&&&&&_obj = _class.GetStatic&AndroidJavaObject&(&currentActivity&); }&&&&void UnityTest(string b)&&&&{&&&&&&&&Debug.Log(&UnityTest -- & + b);&&&&}&&&&void OnGUI()&&&&{&&&&&&&&if (GUI.Button(new Rect(0, 0, 200, 100), &test ...&))&&&&&&&&{&&&&&&&&&&&&if (_obj != null)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&string a = _obj.Call&string&(&test&, 119, &wxdgame&);&&&&&&&&&&&&&&&&Debug.Log(&::1:::& + a);&&&&&&&&&&&&}&&&&&&&&}&&&&&&&&if (GUI.Button(new Rect(0, 100, 200, 100), &test1 ...&))&&&&&&&&{&&&&&&&&&&&&if (_obj != null)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&int b = _obj.CallStatic&int&(&test1&, 911, &testgame&);&&&&&&&&&&&&&&&&Debug.Log(&::2:::& + b);&&&&&&&&&&&&}&&&&&&&&}&&&&}}  同时java里的代码也要进行调整:
org.json.JSONException;
org.json.JSONObject;
android.os.Bundle;
android.util.Log;
com.and3.UnityPlayerNativeActivity;
com.unity3d.player.*;
UnityPlayerNativeActivity
Log.i(&unity&,
&test: &+a+&
JSONObject
JSONObject();
obj.put(&first&,
obj.put(&second&,
&testCall&);
(JSONException
e.printStackTrace();
com.unity3d.player.UnityPlayer.UnitySendMessage(&ARCamera&,
&UnityTest&,
obj.toString());
Log.i(&unity&,
&test1: &+a+&
JSONObject
JSONObject();
obj.put(&first&,
obj.put(&second&,
&test1Call&);
(JSONException
e.printStackTrace();
com.unity3d.player.UnityPlayer.UnitySendMessage(&ARCamera&,
&UnityTest&,
obj.toString());
  这样java里的两个方法就都可以被调用了,那么差别主要包括哪些呢,总共有四点:
  1、java里面的类需要继承UnityPlayerNativeActivity;
  2、unity里面AndroidJavaClass的参数改为:
1_class = new AndroidJavaClass(&com.unity3d.player.UnityPlayer&);  3、从刚才得到的class实例中获取currentActivity:
_class.GetStatic&AndroidJavaObject&(&currentActivity&);
  4、下面在调用call方法的时候,把之前从AndroidJavaClass实例调用改成从AndroidJavaObject调用。
  此外,关于java调用unity的接口比较简单,直接调用com.unity3d.player.UnityPlayer.UnitySendMessage接口就行了。总共包含三个参数,第一个表示unity中包含c#脚本的GameObject实例名称,第二个表示方法名,第三个表示传递的参数,由于只是个字符串类型,所以如果有多个参数需要传递的话,可以像我这样使用JSONObject传递多个参数。
本文已收录于以下专栏:
相关文章推荐
本文原作者未知,转载自:http://blog.csdn.net/ycl295644/article/details
一直以来本人都在做Android Multi-Media Framework下的Lib支持库的开发和修改,终于最近告一段落,但根据项目要求,需要写一个和网络相关的service,用java来实现。其实...
C#采用socket与java 服务端的简单通信,客户端采用Unity。
近日根据官方提供的通信例子自己写了一个关于Unity(C#)和后台通信的类,拿出来和大家分享一下。
具体请参考...
using System.Collections.G
using System.L
using System.T
using System.N...
公司做的是手游,用的是unity客户端语言为c#,服务器为java,客户端已基本做完,服务器刚招的人
一开始服务器给了个ip和port,我就开始连接,我直接用原生socket直接soc...
在上一篇博客中,我们通过unity中的www类来和web服务器进行数据的交互,所使用的方式就是http通信,那么http通信的原理是什么呢,socket通信原理又是什么呢,这里推荐两篇写的比较不...
在上两篇的基础上,这次我们要做物体同步。使两个物体在两个机器上显示同样的移动效果。这里,使用W、S、A、D四个键位实现前后左右的移动。
注意:如果您复制粘贴代码,千万注意文件编码!最好为ANSI,否...
他的最新文章
讲师:李江龙
讲师:司徒正美
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 unity drawcall 查看 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信