Open18

【Unity】未経験がシュミレーションゲームを自作するので、制作過程を記録してみる

手羽先手羽先

自己紹介

  • 高3
  • プログラミング少しできる
  • Unityは未経験
    • C#も分からない

今回作るもの

  • 自分の選択で世界が変わっていく2Dベースのシュミレーションゲーム
手羽先手羽先

辞書型のkeyエラー

以下のようにkeyを一覧表示させると出てくるのに
News_01_birthrate
UnityEngine.Debug:Log (object)

KeyNotFoundException: The given key 'News_01_birthrate' was not present in the dictionary.
System.Collections.Generic.Dictionary`2[TKey,TValue].get_Item (TKey key) (at <787acc3c9a4c471ba7d971300105af24>:0)
TextWriter+<Cotest>d__8.MoveNext () (at Assets/Scripts/Meeting/TextWriter.cs:67)
UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at <3b24cc7fa9794ed8ab04312c53e6dedd>:0)

結局、下記のようにTrimをつけると治った。

            string key = CSVReader.csvDatas[6][17 + i].Trim();
            string value = CSVReader.csvDatas[4][17 + i].Trim();

https://zenn.dev/teba_eleven/articles/7680e01d2c4fe3
これのプログラムの

        for (int i = 0; i < lineData.Count; i++)
        {
            csvDatas[i].Add(lineData[i].Trim());
        }

にTrimを追加しておいた。。

手羽先手羽先

C#での連想配列

// Dictionaryの定義。キーはstring型、値は(string, int)のタプル
Dictionary<string, (string Content, int Support)> newsItems = new Dictionary<string, (string, int)>();

// ニュース項目の追加
newsItems.Add("News_01", ("This is the first news item.", 10));
newsItems.Add("News_02", ("This is the second news item.", 20));

jsの{}のように簡単に複数のkey,valueを追加できなさそう。クラスを作るとかもあるらしい。

public class NewsItem
{
    public string Id { get; set; }
    public string Content { get; set; }
    public int Support { get; set; }

    public NewsItem(string id, string content, int support)
    {
        Id = id;
        Content = content;
        Support = support;
    }
}

// NewsItemのインスタンスを作成
NewsItem news1 = new NewsItem("News_01", "This is the first news item.", 10);
NewsItem news2 = new NewsItem("News_02", "This is the second news item.", 20);

// インスタンスの使用
Console.WriteLine($"ID: {news1.Id}, Content: {news1.Content}, Support: {news1.Support}");

https://marunaka-blog.com/c-sharp-dictionary/5396/