C # SerialPort EventHandler en Unity

Estoy escribiendo el código C # para Unity. Simplemente leyendo el valor SerialPort en EventHandler. El problema es que no se llama al controlador. aquí está el código

using UnityEngine;
using System.Collections;
using System;
using System.IO.Ports;

public class MainScript : MonoBehaviour {

public SerialPort mySerialPort;
public static float speed=100;
GameObject cube ;
public GUIStyle style ;
// Use this for initialization
void Start () {

    cube = GameObject.FindGameObjectWithTag ("cube");

    if(mySerialPort.IsOpen)
        mySerialPort.Close();

    mySerialPort = new SerialPort("com5");
    mySerialPort.BaudRate = 9600;
    mySerialPort.Parity = Parity.None;
    mySerialPort.StopBits = StopBits.None;
    mySerialPort.DataBits = 8;
    mySerialPort.Handshake = Handshake.None;
    mySerialPort.DataReceived += new SerialDataReceivedEventHandler (DataReceivedHandler);

    if(mySerialPort.IsOpen == false)
        mySerialPort.Open();
}


void OnGUI(){
    GUI.Box (new Rect(100,100,100,100),"Speed : " + speed , style);
}
// Update is called once per frame
void Update () {
// speed = mySerialPort.ReadTo ("\r");
// update My View with the speed new value

    cube.transform.Rotate(Vector3.up * speed *Time.deltaTime);

}


public static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
    SerialPort sp = (SerialPort)sender;
    speed = float.Parse( sp.ReadTo ("\r") ) ;
    print ("Data Recieved : " + speed);
}
}

el problema no está en el puerto serie ya que, cuando lo leo en la función de actualización para la unidad, lee el valor correcto, pero hay un problema de rendimiento al actualizar la interfaz de usuario.

Gracias

Respuestas a la pregunta(1)

Su respuesta a la pregunta