Unityで基本的な2Dプラットフォームを作成していますので、各レベルを完了するのにかかる時間を節約できますUI要素に最速の時刻を表示します。私は時間をテキストファイルに書いています(これはうまくいきます)。そして、リストからすべての行をリストに読み込みます。そこから最低の値などが見つかります。しかし、私のコードはうまくいかず、次のようになります他のスクリプトから関数を呼び出すときにエラーが発生します。私はC#の初心者ですので、誰でも私に与えることができるどんな助けにも大いに感謝します!オブジェクトの現在の状態(System.Iinq)のために操作が無効です
ありがとうございます!
フルエラーメッセージ
例外InvalidOperationException:操作によるオブジェクト System.Linq.Enumerable.Iterate [シングル、シングル](IEnumerableを1 source, Single initValue, System.Func
3セレクタ) System.Linqの現在の状態に有効ではありません(Asset/Scripts/Highscores/SaveScores.cs:73) GameManager.Update()(Assets/Scripts/GameManager.csの場合).Enumerable.Min(IEnumerable`1 source) SaveScores.ReadData(System.String LevelLoaded) 45)
C頌歌
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System;
using System.Linq;
public class SaveScores : MonoBehaviour {
void Start()
{
//ReadData();
}
public static void WriteData(float time, string LevelLoaded)
{
try
{
//Debug.Log("Saving time");
StreamWriter sw = new StreamWriter(@"C:\Users\Theo\Documents\Unity Projects\V13\Platformer\Assets\Scripts\Highscores\Scores.txt", true);
sw.WriteLine(LevelLoaded + " " + time);
sw.Close();
}
catch(Exception e)
{
Console.WriteLine("Exception: " + e.Message);
}
finally
{
Console.WriteLine("Executing final block");
}
}
public static void ReadData(string LevelLoaded)
{
List <float> timesLevel1 = new List<float>();
List <float> timesLevel2 = new List<float>();
List <float> timesLevel3 = new List<float>();
try
{
var lines = File.ReadAllLines(@"C:\Users\Theo\Documents\Unity Projects\V13\Platformer\Assets\Scripts\Highscores\Scores.txt");
foreach (var line in lines)
{
if (line.Contains("Level1"))
{
timesLevel1.Add(Convert.ToSingle(line));
}
else if (line.Contains("Level2"))
{
timesLevel2.Add(Convert.ToSingle(line));
}
else if (line.Contains("Level3"))
{
timesLevel3.Add(Convert.ToSingle(line));
}
}
}
catch (Exception e)
{
Console.WriteLine("Exception: " + e.Message);
}
finally
{
Console.WriteLine("Executing final block");
}
switch (LevelLoaded)
{
case "Level1":
UIManager.lowestTime = timesLevel1.Min();
break;
case "Level2":
UIManager.lowestTime = timesLevel2.Min();
break;
case "Level3":
UIManager.lowestTime = timesLevel3.Min();
break;
}
}
}
ありがとう、ただ実現しました。私が全ラインで読んでいることを忘れて、私は複数のレベルの時間を節約できるように、各ラインに "LevelX"を追加しました。ですから、私はこの接頭辞を何とか除外して、リストに時間を追加する必要があります。 –