虽然循环在有限时间内激活TENS机器时会导致未命中的延迟

时间:2015-05-22 14:46:55

标签: unity3d while-loop arduino

您好我使用弹性传感器控制Unity视频游戏 - 当用户弯曲他们的二头肌时,角色向前移动。我想在用户收集游戏中的某些对象时激活TENS机器。我有这个工作.....问题是我想激活TENS机器1000ms然后停用它。我可以通过串口从游戏引擎激活/停用TENS机器,我的问题是DELAY功能。当我使用DELAY功能时,它会导致游戏中出现故障或暂停......作为一种解决方法,我尝试使用下面的功能,它会激活TENS,但它不会停用它。

#include <elapsedMillis.h>
#define interval 1000
elapsedMillis timeElapsed;

void triggertens()
{
 digitalWrite(TENS, HIGH);
 if (timeElapsed > interval) {
 timeElapsed -= interval; //reset the timer
 digitalWrite(TENS, LOW);}  
 }

什么是WHILE LOOP,但这也会导致类似DELAY的故障:

void triggertens()
                   {
                      elapsedMillis timeElapsed;
                      while (timeElapsed < interval)
                      {
                      digitalWrite(TENS, HIGH);
                      }
                      digitalWrite(TENS, LOW);
                      timeElapsed = 0;  
                    }

任何建议都会很棒。

1 个答案:

答案 0 :(得分:0)

为了让Unity能够使用&#34;线程&#34;类型感觉不会阻止使用协程所需的主要执行。 Unity全部在一个线程上运行,因此您编写的任何代码行都需要在运行下一行之前完成执行。看起来你正在使用c或c ++代码来延迟函数并等待一段时间,但是如果你从统一调用该函数,函数将不会返回,直到等待同一个线程的时间(因此制作游戏)出现了暂停)。

为了做到这一点,您需要使用协程在Unity中发生延迟,并告诉您使用的插件在代码的Unity端打开和关闭,而不是从插件代码打开和关闭。

http://docs.unity3d.com/Manual/Coroutines.html