Есть ли способ поставить в очередь вызов функции и ее параметры для последующего вызова?
Есть ли способ сохранить вызовы функций и их переменные параметры в базе данных, когда проигрыватель находится в автономном режиме, и вызывать их снова, когда проигрыватель возвращается в режим онлайн.
Привет! Я работаю над новой игрой (Unity C#), в которой игрок проходит через зоны с небольшим приемом. Игрок находит кодовые слова и вводит их в поле, чтобы разблокировать контент. В то же время я хочу записать запущенные кодовые слова для каждого пользователя. Проблема в том, что соединение может быть потеряно во время сеанса. Мне удавалось ставить в очередь функции каждый раз, когда игрок вводит кодовое слово, когда он отключен, но после получения приема игрок снова отправляет только последнюю запись. Помощь очень ценится!
public void NotConnected()
{
CallsOnQueue.Add( () => StartCoroutine(TestCodeword()));
}
public void BackOnline()
{
if (CallsOnQueue.Count == 0)
{
LookforCodewordInDB();
}
else
{
foreach (Action item in Callsonqueue)
StartCoroutine(TestCodeword(teamname, codeword, city, date));
}
Callsonqueue.Clear();
}
2 ответа
Я думаю, что наиболее разумный подход - сохранить функцию как объект в базе данных, а затем извлечь ее.
public class MyFunction{
string FuncionName { get; set; }
public string Param1 { get; set; }
public string Param2 { get; set; }
//more params
}
тогда вы можете использовать оператор сравнения, чтобы вызвать соответствующий метод.
switch (storedFunction.FunctionName)
{
case "myFunction":
myFunction();
}
Мне кажется, что ваш код в порядке, за исключением цикла foreach.
Вместо того, чтобы вызывать сохраненное действие, вы запускаете одну и ту же сопрограмму для каждого элемента!
Измените свой код на этот
foreach (Action item in Callsonqueue)
item.Invoke():