Open18
【Unity】未経験がシュミレーションゲームを自作するので、制作過程を記録してみる
自己紹介
- 高3
- プログラミング少しできる
- Unityは未経験
- C#も分からない
今回作るもの
- 自分の選択で世界が変わっていく2Dベースのシュミレーションゲーム
テキストをRPGゲームみたいに表示する
配列の扱い方
TextMeshProでのフォント適用の方法
タイマーの作り方
TextMeshProの操作方法
スクリプトの取得
GitHubで100MB以上アップロードした時の対処法
textのfontsをgitignoreに追加していなかったので、こちらで対処。
CSVの読み込み
今回はテキストデータなどをスプレッドシートで管理しているので、csvが良いかなと。
フォルダーの外観変更
サウンド再生の方法
シーン切り替え時にフェードイン
CSVを改行含めて取得する
書いた
画像をトリミングしたい
スプライトエディターで出来るかと思ったができない
辞書型の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();
これのプログラムの
for (int i = 0; i < lineData.Count; i++)
{
csvDatas[i].Add(lineData[i].Trim());
}
にTrimを追加しておいた。。
インベントリシステム
やっぱりオブジェクトを全てアタッチしてそこからgetComponentする形なのか。Unityちょっとわかってきた。
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}");
ドラッグアンドドロップ
オブジェクトの動的な生成
昔本でやったのを忘れていたが、簡単にできた。