Игра Unity выдает ArgumentNullException: значение не может быть нулевым, имя параметра: путьC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Игра Unity выдает ArgumentNullException: значение не может быть нулевым, имя параметра: путь

Сообщение Anonymous »

Я делаю игру в Unity, используя библиотеку TikTokLive от Фрэнка фон Хофа. В настоящее время я работаю над сохранением дарителей и количества подаренных ими монет в файл json (который будет сохранен в базе данных после закрытия игры), но каждый раз, когда я получаю подарок и запускаю функцию, я получаю сообщение об ошибке из заголовка. Проработал над этим большую часть 3 часов, не могу понять проблему...
Вот инициализация пути к файлу и метода запуска:

Код: Выделить всё

 private string filePath;

private void Start()
{
filePath = Path.Combine(Application.dataPath, "/userGiftData.json");
//filePath = "C:/Users/Kaki/Desktop/userGiftData.json";

// Check if the file exists, if not, create it
if (!File.Exists(filePath))
{
File.WriteAllText(filePath, "{}");
}
}
Вот функция Init, которая должна вызывать функцию OnGiftUpdateValue для каждого подарка:

Код: Выделить всё

 public void Init(TikTokGift gift)
{
if (gift == null || gift.Sender.UniqueId == null || gift.Gift.Name == null)
{
Debug.LogError("Gift or sender data is null!");
return;
}

Gift = gift;
Gift.OnAmountChanged += AmountChanged;
Gift.OnStreakFinished += StreakFinished;
txtUserName.text = $"{Gift.Sender.UniqueId} sent a {Gift.Gift.Name}!";
txtAmount.text = $"{Gift.Amount}x";
RequestImage(imgUserProfile, Gift.Sender.AvatarThumbnail);
RequestImage(imgGiftIcon, Gift.Gift.Image);
// Run Streak-End for non-streakable gifts
if (gift.StreakFinished)
StreakFinished(gift, gift.Amount);
OnGiftUpdateValue(Gift.Sender.UniqueId, Gift.Gift.Name); //Line 93
}
Вот функция OnGiftUpdateValue:

Код: Выделить всё

public void OnGiftUpdateValue(string userName, string giftName)
{
// Read the existing JSON data from the file
Dictionary userData = ReadUserDataFromJson();

if (giftValues.ContainsKey(giftName))
{
int giftValue = giftValues[giftName];  // Retrieve the value of the gift

// If the user exists in the data, update the total gift value, else create new
if (userData.ContainsKey(userName))
{
userData[userName] += giftValue;
}
else
{
userData[userName] = giftValue;  // New user starts with the gift value
}

// Write the updated data back to the JSON file
WriteUserDataToJson(userData); //Line 120
}
else
{
Debug.LogError($"Gift '{giftName}' does not exist in the dictionary.");
}
}
И, наконец, функции ReadUserDataFromJson и WriteUserDataToJson:

Код: Выделить всё

 private Dictionary ReadUserDataFromJson()
{
if (File.Exists(filePath))
{
string jsonData = File.ReadAllText(filePath);
//return JsonConvert.DeserializeObject(jsonData) ?? new Dictionary();
return JsonUtility.FromJson(jsonData);
}
return new Dictionary();
}

private void WriteUserDataToJson(Dictionary data)
{
string jsonData = JsonUtility.ToJson(data);
//File.WriteAllText(filePath, jsonData);
System.IO.File.WriteAllText(filePath, jsonData); //Line 144
Debug.Log("Data saved to: "+filePath);
}
Также изображение ошибки единства, которую я получаю при каждом подарке (кстати, как только я удаляю функцию вызова из Init, остальная часть кода работает нормально...):Изображение ошибки Unity
Большое спасибо, что нашли время, чтобы прочитать это!

Подробнее здесь: https://stackoverflow.com/questions/789 ... meter-name
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»