首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测谷歌卡板磁性按钮点击

检测谷歌卡板磁性按钮点击
EN

Stack Overflow用户
提问于 2016-05-14 14:49:04
回答 1查看 923关注 0票数 1

我正在用硬纸板开发一个VR应用程序。当我在磁性按钮上点击两次时,我希望菜单出现。

如何用C#编写此条件?

EN

回答 1

Stack Overflow用户

发布于 2016-05-14 15:14:06

简单地说,你需要检测到你的手机指南针在没有倾斜的情况下发生了变化(也就是说,磁铁已经靠近手机,在不改变其物理方向的情况下破坏了它的指南针)。

你会想看看这两个向量,看看它们是否改变了。

有两个开放源码实现,其中最简单的我无耻地包括在下面(秘密成分游戏的安德鲁·惠特的全部功劳):

  1. Click
  2. https://github.com/CaseyB/UnityCardboardTrigger/blob/develop/MagnetSensor.cs

/* -- MIT/X11类似许可证--版权(c) 2014 Paramita,(秘密成分游戏) */ Google点击C# for Unity中的代码。//作者: Andrew //使用UnityEngine;使用System.Collections;使用系统;使用System.Collections使用System.IO;//公共静态XmlDocument XmlDoc;//公共静态XmlDocument XmlDoc;//公共静态XmlNodeList xnl;公共级magneticClick {//概念:两个FIR滤波器,运行在磁和倾斜上。//如果倾斜没有改变,但指南针改变了,那么磁场就会移动//没有设备--这是硬纸板磁铁点击的本质。私有Vector3 lastTiltVector;公共浮点数tiltedBaseLine = 0f;公共浮点数magnetBaseLine = 0f;公共浮点数tiltedMagn = 0f;公共浮点数magnetMagn = 0f;私有int N_SlowFIR = 25;私有int N_FastFIR_magnet = 3;私有int N_FastFIR_tilted = 5;//单击磁铁倾向于稍微倾斜设备。公共浮点数阈值= 1.0f;bool click = false;bool clickReported = false;public void (){ Input.compass.enabled = true;//注意到init是特定于统一的平台。magnetMagn = Input.compass.rawVector.magnitude;magnetBaseLine = Input.compass.rawVector.magnitude;tiltedBaseLine = Input.acceleration.magnitude;tiltedMagn = Input.acceleration.magnitude;} public void magUpdate(Vector3 acc,Vector3罗盘){ //在更新单行为中调用此函数如下: // .magUpdate(Input.acceleration,Input.compass.rawVector);//我们感兴趣的是倾斜的变化,而不是实际倾斜。Vector3 TiltNow = acc;Vector3 motionVec3 = TiltNow - lastTiltVector;lastTiltVector = TiltNow;// update倾斜和罗盘"fast“值tiltedMagn =((N_FastFIR_倾斜-1)* tiltedMagn +motionVec3.量值)/ N_FastFIR_tilted;magnetMagn =((N_FastFIR_MAN-1)* magnetMagn + compass.magnitude) / N_FastFIR_magnet;//更新”慢速“值tiltedBaseLine =(N_SlowFIR 1)* tiltedBaseLine +motionVec3.size)/N_FastFIR_magnet;magnetBaseLine =((SlowFIR 1)* magnetBaseLine + compass.magnitude) / N_SlowFIR;if( tiltedMagn < 0.2 & (magnetMagn / magnetBaseLine) > 1.1 ){ if( clickReported == false) { click = true;} clickReported = true;}N_SlowFIR{ clickReported = false;}公共bool field (){ //基本前提是,当//设备稳定时,磁场的大小应发生变化。这对于菜单等/清除单击似乎是合适的,如果(单击== true) { click = false;返回true;}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37228072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档