- Home /
UnityOSC and timer
Hi, I'm using UnityOSC and I'm trying to implement a timer so that, whenever a new message is received, there's a couple of seconds of delay before sending a new message. I think I missed something on the logical side because the timer is not working. The application displays a primitive shape based on the value received. The OSC is working, just the OSC message is not waiting for the timer. Thanks!
How it works:
Check the received OSC message and its value
If different from the previous one, destroy the old shape and create a new one
If timer has expired, send a new OSC message
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityOSC;
using System.Net;
public class ScreenR : MonoBehaviour
{
public KinectController kinect;
public OSCController oscController;
private GameObject shape;
//time to wait
public float waitTime = 100f;
private float timer;
public string outIP = "127.0.0.1";
public int outPort = 9999;
// current shape (1 cube, 2 sphere, 3 capsule)
private int index;
public int Index
{
get { return index; }
set { index = value; }
}
void Start()
{
//initial index
index = 1;
// initial shape
shape = GameObject.CreatePrimitive(PrimitiveType.Cube);
//send the first message
oscController.sendOsc(index);
GetComponent<Renderer>().material.color = Color.black;
}
void Update()
{
//print("TIMER: " + timer);
// check the received osc message
// depending on its value, destroy the old shape
// create a new shape
// if timer expired, send a new osc message
if (oscController.ReceivedVal == 1)
{
if (shape.name != "Cube") {
Destroy(shape);
shape = GameObject.CreatePrimitive(PrimitiveType.Cube);
}
timer += Time.deltaTime;
if (timer > waitTime)
{
index = 3;
oscController.sendOsc(index); //send new osc message
timer = 0f; //reset timer
}
}
else if (oscController.ReceivedVal == 2)
{
if (shape.name != "Sphere")
{
Destroy(shape);
shape = GameObject.CreatePrimitive(PrimitiveType.Sphere);
}
timer += Time.deltaTime;
if (timer > waitTime)
{
index = 1;
oscController.sendOsc(index); //send new osc message
timer = 0f; //reset timer
}
}
else if (oscController.ReceivedVal == 3)
{
if (shape.name != "Capsule")
{
Destroy(shape);
shape = GameObject.CreatePrimitive(PrimitiveType.Capsule);
}
timer += Time.deltaTime;
if (timer > waitTime)
{
index = 2;
oscController.sendOsc(index); //send new osc message
timer = 0f; //reset timer
}
}
else
print("ZERO: " + oscController.ReceivedVal);
}
}
Your answer
Follow this Question
Related Questions
How to make reverse countdown timer in unity? 1 Answer
Stop and Pause Timer 2 Answers
timer not ticking down 2 Answers
How do I make the timeScale not affect the timer? 1 Answer
Trying to make a timer work.. 0 Answers