- 最后登录
- 2017-4-1
- 注册时间
- 2011-7-26
- 阅读权限
- 90
- 积分
- 24690
  
- 纳金币
- 24658
- 精华
- 6
|
使用加速度感应检测设备方向,您随时可以使用内置的 iphoneInput.orentation 属性检测设备方向。不过,如果您需要更好的控制它,也可以使用自己的底层过滤方式处理这种情况。在加速计信号感应方面使用底层过滤方式检测设备的方向,比计算最近一次的方向平均值要好。这是因为最近值将对比旧数据视为更重要,还因为它容易执行,并且稍微更有效。(this is because recent data would be treated as more important than older data, and because it's easier to implement and it's slightly more efficient.)
private const float AccelerometerUpdateInterval = 1.0f / 60.0f; private const float LowPassFilterFactor = AccelerometerUpdateInterval / LowPassKernelWidthInSeconds; // tweakable private Vector3 lowPassValue = Vector.zero; // should be initialized with 1st sample Vector3 LowPassFilter(Vector3 newSample) { lowPassValue = Math.Lerp(lowPassValue, newSample, LowPassFilterFactor); return lowPassValue; } lowPassKernelWidthInSeconds有更大的价值,其中较慢的过滤值将靠拢当前输入采样(反之依然)。你将能够使用LowPassFilter代替avgSamples()。
我想尽可能精确地读取加速度传感器。该怎么做? 读取iphoneInput.accelemrometer变量不等于采样硬件。简而言之,unity以60Hz的频率对硬件采样然后将结果纳入变量中。在现实中,事情变的更加复杂。加速计通过NSTimer内部进行控制。它并不执行在恒定的时间间隔,而是根据cpu负载情况而变化。例如你能在一帧得到2次采样,而在另一帧只得到1次。
下面列出的是一个时间间隔以毫秒为单位的加速计采样数据。采样间隔120Hz,当一个测试场景运行在30fps,和简单的代码模拟约20毫秒每帧的的cpu负载。 accelerator dt = 1.0ms accelerator dt = 0.5ms accelerator dt = 0.4ms accelerator dt = 26.5ms accelerator dt = 0.8ms accelerator dt = 12.7ms accelerator dt = 5.6ms 您可以访问所有方向的测量在加速计执行期间。下面的代码将简单计算一个平均值对前一帧收集的所有加速计事件。 float period = 0; Vector3 acc = Vector3.zero; foreach (iPhoneAccelerationEvent evnt in iPhoneInput.accelerationEvents) { acc += evnt.acceleration * evnt.timeDelta; period += evnt.timeDelta; } if (period > 0) acc *= 1.0/period; 有一些设备属性你可以读取用于处理各种案例。从检查客户是否运行于特定的iphone os版本,到合并device名称以某种方式应用到你的游戏中等等。这些属性是 iPhoneSettings.uniqueIdentifier iPhoneSettings.name iPhoneSettings.model iPhoneSettings.systemName iPhoneSettings.systemVersion iPhone Stripping Level(专业版功能)
尺寸优化的方法如下:
A)在程序集剥离级别(at Strip assemblies level):脚本对字节代码进行分析,根据收集的资料,没有被引用的类和方法将被移除,dll也被AOT step排除。此优化主要减少二进制码和相应的dll尺寸。这个功能是安全的,没有不良反映。
B)在Use micro mscorlib 级别:使用特别的袖珍版本mscorlib,有些组件将被预先移除,例如:Security, Reflection.Emit, Remoting, non Gregorian calendars, etc 因此内部组件的互相依存程度降到最低。此优化主要减少二进制代码和micorlib尺寸。这个功能和某些系统部件不兼容,要小心使用。
c)在Strip ByteCode级别(剥离字节代码):额外的.NET DLLs(储存在数据文件夹)将被卸下只剩元数据。这是可能的因为所有代码已经在ATO中预编译并且联接到主代码。注解:如果你选择B级,那么意味着优化方案A也被实现,如果你选择C级,那么A和B一级的优化也包括在内 iphone 脚本调用优化(专业版功能)慢和安全:默认mono内部调用操作,支持例外(exception)。快和不支持例外(Fast and Exceptions Unsupported):快速mono内部调用执行,但例外(exception)是不支持的,所以使用时要当心。典型的情况下它是可用的:应用程序调用大量unityEngine并且不抛出任何例外。此选项可节省1-4ms每帧。 Using .NET libraries 我们建议尽量少的保留对库引用,因为1MB的.NET CIL 能转化为3-4MB ARM代码。例如 应用程序引用System.dll 和 System.xml.dll,这意味着附加的6MB ARM代码如果不使用剥离功能。在某点上的应用程序将到达极限时,连接器连接code.x会有麻烦。如果您多留心应用程序的大小,你能发现C#是更适合你的语言代码,它比 Boo或Javascript依赖性更小。未支持的项目一般性的:。不支持iphone simulator。使用iphone Remote 程序在iphone上快速开发、部署和运行你的项目。。不支持Ogg音频压缩。图形:。
Pixel shaders iphone硬件不支持,但你能使用纹理混合。。DXT纹理压缩不支持,使用PVRTC代替。。非平方纹理不支持。。地形engine不支持。电话功能:。iphone 摄像头、定位服务、沉默开关(silent switch),麦克输入和震动不直接支持,但可以使用定制的ObjectC代码访问这些功能。脚本:。动态javascript功能像 duck typing ,“eval”函数等等都不支持。因为所有代码在构建期间已经被提供编译。使用#program 严格你的脚本,强制编译器报告一个动态功能错误。。 .NET2.0功能(包括泛型)不支持。。.NET socket 在 unity iphone standard版中不支持。system.dll &system.Xml在标准版中不支持。。视频流通过WWW class当前不支持。HTTPS在当前WWW class 中不支持。。7,额外的.NET组件支持(实际数量取决于有多少种不同的脚本语言使用在项目中)。建议保持.NET组件依赖程度到尽可能低的水平,因为它极大的影响最终的二进制代码和封装发布尺寸。 |
|