c# - How do i delay a function after the handled device ends shake? -
i'm developing game on unity3d. here have 5 cards, , i'm trying shuffle them shake movement, but, code, cards being shuffle while shake performed, need that function can delayed or start when shake ends. here code:
using unityengine; using system.collections; using unityengine.ui; public class shake1 : monobehaviour { int numtimes = 50; public image personajes; public image lugares; public image situaciones; public image emociones; public image objetos; public gameobject camshake; float accelerometerupdateinterval; // greater value of lowpasskernelwidthinseconds, slower filtered value converge towards current input sample (and vice versa). float lowpasskernelwidthinseconds; // next parameter initialized 2.0 per apple's recommendation, or @ least according brady! ;) float shakedetectionthreshold ; float lowpassfilterfactor; vector3 lowpassvalue; vector3 acceleration; vector3 deltaacceleration; void start () { lowpasskernelwidthinseconds = 1.0f; accelerometerupdateinterval = 1.0f / 60.0f; lowpassvalue = vector3.zero; lowpassfilterfactor = accelerometerupdateinterval / lowpasskernelwidthinseconds; } public vector3 lowpassfilter(vector3 newsample){ lowpassvalue = vector3.lerp (lowpassvalue, newsample,lowpassfilterfactor); return lowpassvalue; } void update () { acceleration = input.acceleration; deltaacceleration = acceleration - lowpassfilter (acceleration); if (mathf.abs (deltaacceleration.x) >= 0.2 && mathf.abs (deltaacceleration.y) >= 0.2 && mathf.abs (deltaacceleration.z) >= 0.2) { (int = 0; < numtimes; i++) { handheld.vibrate(); if (personajes.transform.parent.name == "panel_superior") { personajes.sprite = resources.load<sprite> ("cartas/pillow-cards-" + random.range (2, 13)) sprite; } if (situaciones.transform.parent.name == "panel_superior") { situaciones.sprite = resources.load<sprite> ("cartas/pillow-cards-" + random.range (28, 39)) sprite; } if (emociones.transform.parent.name == "panel_superior") { emociones.sprite = resources.load<sprite> ("cartas/pillow-cards-" + random.range (41, 52)) sprite; } if (lugares.transform.parent.name == "panel_superior") { lugares.sprite = resources.load<sprite> ("cartas/pillow-cards-" + random.range (15, 26)) sprite; } if (objetos.transform.parent.name == "panel_superior") { objetos.sprite = resources.load<sprite> ("cartas/pillow-cards-" + random.range (54, 68)) sprite; } } } } }
as update()
called @ 60hz, can create counter (let's it's called zeroacc
) increased everytime acceleration below triggering threshold of "shake".
@ same time shake triggered, can store value of zeroacc
@ moment, let's acctri
.
need decide delay, example 30 calls of update()
, , trigger callback.
this:
void update(){ //keep code have , add this: if (zeroacc - acctri > 30) { callback (); acctri = int.maxvalue; //we don't want trigger again } }
Comments
Post a Comment