Метод обрывается после вызова Random.Range на Unity

using UnityEngine;
using System.Threading;

public class CreaturesMovement : MonoBehaviour
{
    public float creatureSpeed;
    float currentVerticalSpeed;
    float currentHorizontalSpeed;
    int wallNum;

    private void Start()
    {
        TimerCallback tm = new TimerCallback(Buffer);
        Timer timer = new Timer(tm, 0, 0, 2000);
    }

    private void FixedUpdate()
    {
        transform.Translate(currentHorizontalSpeed, currentVerticalSpeed, 0);
    }

    void Buffer(object obj)
    {
        wallNum = Random.Range(1, 5); // прекращает работу
        switch(wallNum)
        {
            case 1:
                Debug.Log("1");
                currentVerticalSpeed = creatureSpeed;
                currentHorizontalSpeed = 0;
                break;
            case 2:
                Debug.Log("2");
                currentHorizontalSpeed = -creatureSpeed;
                currentVerticalSpeed = 0;
                break;
            case 3:
                Debug.Log("3");
                currentVerticalSpeed = -creatureSpeed;
                currentHorizontalSpeed = 0;
                break;
            case 4:
                Debug.Log("4");
                currentHorizontalSpeed = creatureSpeed;
                currentVerticalSpeed = 0;
                break;
        }
    }
}

Ответы (1 шт):

Автор решения: AC Studio
using UnityEngine;
using System.Threading;

public class CreaturesMovement : MonoBehaviour
{
    public float creatureSpeed;
    float currentVerticalSpeed;
    float currentHorizontalSpeed;
    int wallNum;

    private void Start()
    {
      // 0 - начальный старт вызова Buffer, 5 - каждый раз будет вызывать Buffer 
      InvokeRepeating("Buffer", 0, 5);
    }

    private void FixedUpdate()
    {
        transform.Translate(currentHorizontalSpeed, currentVerticalSpeed, 0);
    }

    void Buffer()
    {
        wallNum = Random.Range(1, 5); 
        switch(wallNum)
        {
            case 1:
                Debug.Log("1");
                currentVerticalSpeed = creatureSpeed;
                currentHorizontalSpeed = 0;
                break;
            case 2:
                Debug.Log("2");
                currentHorizontalSpeed = -creatureSpeed;
                currentVerticalSpeed = 0;
                break;
            case 3:
                Debug.Log("3");
                currentVerticalSpeed = -creatureSpeed;
                currentHorizontalSpeed = 0;
                break;
            case 4:
                Debug.Log("4");
                currentHorizontalSpeed = creatureSpeed;
                currentVerticalSpeed = 0;
                break;
        }
    }
}
→ Ссылка