unity调用android接口3d留一个接口怎么用

[Unity3D]调用Android接口 实现内容简要说明:-android100学习网
[Unity3D]调用Android接口 实现内容简要说明:
有一些手机功能,Unity没有提供相应的接口,例如震动,例如不锁屏,例如GPS,例如...
有太多的特殊功能Unity都没有提供接口,这时候,我们就需要通过使用Android原生...
有一些手机功能,Unity没有提供相应的接口,例如震动,例如不锁屏,例如GPS,例如...
有太多的特殊功能Unity都没有提供接口,这时候,我们就需要通过使用Android原生的ADT编辑器去编写Java代码,然后打包jar导入到Unity工程,然后通过Unity提供的调用Android接口的函数去调用jar包中的函数即可。
这里我们就介绍一下使用Unity实现手机震动效果
实现内容简要说明:
Android提供jar文件,xml文件,res目录,libs目录
通过AndroidJavaClass去调用Android函数
另外,这些功能只能在真机上运行!
具体实现:
Android部分
1.下载AndroidSDK(需要包含ADT编辑器的)
官方下载连接:/sdk/index.html
创建Android项目
菜单位置:File -&New-&Android Application Project
创建过程中,只有一下这个界面的内容需要更改,其他的使用默认的就行
生成后解决方案的目录如图
其中MainActivity就是我们需要编辑的java文件了
导入Unity相关jar
Jar目录:unity的安装路径\Editor\Data\PlaybackEngines\androidplayer\bin下的classes.jar
通过AddExternalArchives添加,如图:
导入jar后,就可以开始编辑相关的函数了,打开MainActivity
添加unityActivity,使MainActivity继承UnityPlayerActivity,并把SetContentView函数删掉(不然到手机上启动程序的时候就会只看到一句HelloWorld),这里用一个比较函数Max作为例子,有参数,有返回值
到这里,需要的函数已经写完,再修改一下xml文件
Xml文件在工程文件目录下,叫AndroidManifest.xml
接下来到处jar包
点击Export后选择Java目录下的Jar file,选择好路径之后按默认选项去到处jar文件即可
到这里Android部分结束了
设置PlayerSetting,要与Android的package对应上
在Assets目录下添加Plugins\Android目录,把Android的jar文件,res文件夹,libs文件夹,xml文件放入该目录
调用相关函数
(注:初步了解这里的参数之所以填”com.unity3d.player.UnityPlayer”和”currentActivity”,是因为在生成jar文件的时候,已经指定了MainActivityclass继承UnityPlayerActivity,也在XML指定了MainActivity是Main class)
/Androidjc/766296.true/Androidjc/766296.htmlTechArticle简介 有一些手机功能,Unity没有提供相应的接口,例如震动,例如不锁屏,例如GPS,例如... 有太多的特殊功能Unity都没有提供接口,这时候...欢迎大家光临!
欢迎来到、、企业培训教育专区,这里有很多、、、、,我们致力于打造业内培训、学习第一品牌。
①接口描述的是可属于任何类或结构的一组相关功能,所以实现接口的类或结构必须实现接口定义中指定的接口成员。
②接口使用关键字进行定义,可由方法、属性、事件、索引器或这四种成员类型的任意组合构成。
2、接口的特性
①接口类似于抽象基类,不能直接实例化接口;接口中的方法都是抽象方法,实现接口的任何非抽象类型都必须实现接口的所有成员。
②接口不能包含常量、字段、运算符、实例构造函数、析构函数或类型、不能包含静态成员。
③接口成员是自动公开的,且不能包含任何访问修饰符。
④接口自身可从多个接口继承,类和结构可继承多个接口,但接口不能继承类。
interface&IProgram
&&&&&&&&void&Fun();
&&&&class&Program:
&&&&&&&&&//显式实现接口成员
&&&&&&&&void&IProgram。
&&&&&&&&&&&Console.WriteLine(&I&am&Fun.&);
&&&&&&&&staticvoid&Main(string[]&args)
&&&&&&&&&&&IProgram&p&=new&Program();//声明一个接口实例,但不是对接口进行实例化
&&&&&&&&&&&p.Fun();
&&&&&&&&&&&Console.Read();
3、接口的实现分为两种:①显示实现&&②隐式实现
①显式实现的话方法是属于接口的,可以看成是寄托在类中实现的,访问这些方法时要先把对象转换成接口对象,然后通过接口对象调用。如果类或者结构继承了多个接口且接口中具有相同名称成员时,就要用到显式实现,当显式实现方式存在时,隐式实现方式就失效了。
②隐式实现的话实现的方法属于实现的类的,可以直接通过类的对象访问。当类或者结构要实现的是单个接口,可以使用隐式实现。
interface&IProgram
&&&&&&&&void&Fun();
&&&&interface&IAProgram
&&&&&&&&void&Fun();
class&Program&:&IProgram,&IAProgram
&&&&&&&&void&IProgram.Fun()&&//显式实现接口
&&&&&&&&&&&&Console.WriteLine(&I&am&IProgram&Fun.&);
&&&&&&&&void&IAProgram.Fun()&&//显式实现接口
&&&&&&&&&&&&Console.WriteLine(&I&am&IAProgram&Fun.&);
&//public&void&Fun()&&&//隐式实现接口
&&&&&&&&//{
&&&&&&&&//&&&&Console.WriteLine(&I&am&Program&Fun.&);
&&&&&&&&//}
&&&&&&&&staticvoid&Main(string[]&args)
&&&&&&&&&&&&//IProgram&p&=&new&Program();
&&&&&&&&&&&&//p.Fun();
&&&&&&&&&&&&//IAProgram&ap&=&new&Program();
&&&&&&&&&&&&//ap.Fun();
&&&&&&&&&&&&Program&pro&=new&Program();
&&&&&&&&&&&&((IProgram)pro).Fun();
&&&&&&&&&&&&((IAProgram)pro).Fun();
&&&&&&&&&&&&Console.Read();
4、接口的继承
接口继承和类继承不同:首先,类继承不仅是说明继承,而且也是实现继承;而接口继承只是说明继承。派生类可以继承基类的方法实现,而派生的接口只继承了父接口的成员方法说明,而没有继承父接口的实现,中类继承只允许单继承,但是接口继承允许多继承,一个子接口可以有多个父接口。
5、接口的覆盖
interface&IProgram
&&&&&&&&void&Fun();
&&&&abstract&&class&AProgram&:&IProgram
&&&&&&&&public&abstract&void&AFun();
&&&&&&&&void&IProgram.Fun()
&&&&&&&&&&&&AFun();
class&Program:AProgram
&&&&&&&&public&override&void&AFun()
&&&&&&&&&&&&Console.WriteLine(&I&am&AProgram.&);
&&&&&&&&staticvoid&Main(string[]&args)
&&&&&&&&&&&&IProgram&pro&=new&Program();
&&&&&&&&&&&&pro.Fun();
6、接口和抽象类的区别
①接口用于规范,抽象类用于共性。
②接口中只能声明方法,属性,事件,索引器。而抽象类中可以有方法的实现,也可以定义非静态的类变量。
③抽象类是类,所以只能被单继承,但是接口却可以一次实现多个。
④抽象类可以提供某些方法的部分实现,接口不可以。
⑤抽象类的实例是它的子类给出的。接口的实例是实现接口的类给出的
⑥在抽象类中加入一个方法,那么它的子类就同时有了这个方法。而在接口中加入新的方法,那么实现它的类就要重新编写。
⑦接口成员被定义为公共的,但抽象类的成员也可以是私有的、受保护的、内部的或受保护的内部成员
⑧接口不能包含字段、构造函数、析构函数、静态成员或常量。
更多精彩请点击:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:21526次
排名:千里之外
原创:53篇
(15)(26)(12)&>&&>&&>&&>&关于Unity3D使用串口的设置
关于Unity3D使用串口的设置
上传大小:216KB
关于Unity的学习在一直进行中,在过程中总是遇到各种各样的问题,可谓步步荆棘;关于串口通信这问题本来是相当寻常的,但是却花了不少工夫才找到了正确的解决办法,希望对后来人有帮助。
综合评分:3.5(13位用户评分)
所需积分:2
下载次数:154
审核通过送C币
创建者:city2046
创建者:pilouduo1367
创建者:pilouduo1367
课程推荐相关知识库
上传者其他资源上传者专辑
课程资源热门标签
VIP会员动态
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
android服务器底层网络模块的设计方法
所需积分:0
剩余积分:720
您当前C币:0
可兑换下载积分:0
兑换下载分:
兑换失败,您当前C币不够,请先充值C币
消耗C币:0
你当前的下载分为234。
关于Unity3D使用串口的设置
会员到期时间:
剩余下载次数:
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:unity3d中串口的使用
时间: 20:21:07
&&&& 阅读:273
&&&& 评论:
&&&& 收藏:0
标签:工作中遇到了串口的问题,通过查资料&实验写出了下面代码;
关于串口的代码我在网上看了好多,一种是用事件来做,另外一种使用线程来做;
看完以后,个人感觉比较麻烦,所以就用了下面的方式;
PS:也可以改成用IEnumerator 或者Invoke来写
1 using UnityE
2 using System.C
3 using System.IO.P
5 using System.T
7 public class ProtTest : MonoBehaviour
private SerialPort port = new SerialPort();
//用于读取缓存区数据
private byte[] readB
//缓存byte转化的string
private string byteConvertS
//缓存没有用过的数据
private string portDataSave = "";
//缓存依照约定拆解的字符串
private string[] portDataS
//缓存有效数据
private string validData = "";
private void Awake()
InitProp();
/// &summary&
/// 初始化串口
/// &/summary&
private void InitProp()
port.PortName = "COM3";
port.BaudRate = 9600;
port.Parity = Parity.N
port.DataBits = 8;
port.StopBits = StopBits.O
port.Open();
void Update()
HandleProtData();
DoSomething();
/// &summary&
/// 接收处理串口字符串,将字符串转换为标准形式
/// &/summary&
private void HandleProtData()
if (!port.IsOpen)
//读取串口数据
readBuffer = new byte[port.ReadBufferSize];
int count = port.Read(readBuffer, 0, port.ReadBufferSize);
//转化成字符串
byteConvertSave = Encoding.ASCII.GetString(readBuffer, 0, count);
if (count != 0)
//保存字符串
portDataSave += byteConvertS
catch (TimeoutException)
//拆解字符串
portDataSplit = portDataSave.Split(‘\n‘);//按照约定规则
/* 下面这样做是因为串口传过来的字符串不一定是完整的
* 比如说,正常的数据是
* 第一次传输a,b,c,d;
* 第二次传输c,f,b,g;
* 可能传过来的数据就变成了
* 第一次传输a,b,c,d;c,f
* 第二次传输,b,g;
if (portDataSplit.Length & 1)
//倒数第二个数据是有效数据,因为是完整的
validData = portDataSplit[portDataSplit.Length - 2];
//及时清除无用数据
//将当前未使用的数据更新为倒数第一个数据
portDataSave = portDataSplit[portDataSplit.Length - 1];
/// &summary&
/// 做什么东西
/// &/summary&
private void DoSomething()
CheckData();
/// &summary&
/// 检查数据是否符合规则
/// &/summary&
/// &returns&&/returns&
private bool CheckData()
return false;
&PS:最后说一下遇到的问题和解决方法:
问题:那就是找不到SerialProp这个类,当我引入using System.IO.Ports的时候,报错说找不到该命名空间。
解决方法:playersetting里面Api Compatibility Level 选择 .NET2.0而不是&.NET2.0 SubSet。
&&国之画&&&& &&
版权所有 京ICP备号-2
迷上了代码!

我要回帖

更多关于 unity接口有用吗 的文章

 

随机推荐