Метод обрывается после вызова 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;
}
}
}