😎

GoogleスプレッドシートからPrefabを作る

2023/02/07に公開

ゲームジャムで作ったツール紹介です。

何するツール?

複数種類のPrefabをスプレッドシート情報をもとに配置して、配置したものをPrefabとして保存するやつです。正直ゲームジャムくらいでしか使えません。でもゲームジャムではこれくらいのツールで十分です。

コード

コードはここにありますが、展開しつつ説明したりします。
https://github.com/enpel/GlobalGameJam2023TUT/blob/main/Assets/Scripts/LevelEditor/Editor/LevelLoaderWindow.cs
https://github.com/enpel/GlobalGameJam2023TUT/blob/main/Assets/Scripts/LevelEditor/Editor/LevelLoaderConvertSettings.cs

参考

スプレッドシート読み込みはこちらの記事を参考にしました。
https://qiita.com/simanezumi1989/items/32436230dadf7a123de8

ツールのドキュメント

https://github.com/enpel/GlobalGameJam2023TUT/wiki/スプレッドシートからLevelのPrefabを作成する手順

スプレッドシートの制作例


こういう配置があった時にこの数字の所に対応したPrefabを配置してくれます。

生成例

こんな感じのやつです

ツールの設計

ゲームジャム用で利用者をいちいち世話は出来ないのでなので使い方は簡単である必要がありました。雑にスプシに数字入れて、そんでもってその通りに生成するみたいな。

要件

  • スプシのデータ=生成される配置データ
  • スプシの数字に対応したPrefabはスプシ作ってる人が設定できる必要がある

使い方

シート名とシートIDを入れたら生成ボタンを押すだけ!
押すとシート名のPrefabが所定の位置に作られます。

作り

地味にめんどくさかったのでEditor起動中であればIdとかはScriptableSingletonで保存してます。でも普通にResourcesとかに保存ファイル作っても良かったかも。試しに使ったら結構これでもめんどくさかった。
https://docs.unity3d.com/ja/2021.2/ScriptReference/ScriptableSingleton_1.html

EditorWindow

地味にスプレッドシートから帰ってくる値が想定と違って苦戦しました。
なんか帰ってくるcsv が "1","1","1" みたいな感じでダブルクォーテーションが含まれてて結構時間かかりました。
(最初ダブルクォーテーションが入ってると思ってなかった)

List<PrefabPlaceData> ConvertPrefabPlaceDataFromCSV(string csv)
     {
         StringReader reader = new StringReader(csv);

         float xOffset = -50.0f;
         List<PrefabPlaceData> prefabPlaceData = new List<PrefabPlaceData>();

         string line = "";
         float placePositionY = 0;
         while (reader.Peek() > -1) {
             line = reader.ReadLine();
             string[] Splits = line.Split(',');

             for (int i = 0; i < Splits.Length; i++)
             {
	     // ここの処理を書くのに少し手間取った
                 var key = Splits[i].Replace("\"", "");
                 if (string.IsNullOrWhiteSpace(Splits[i]))
                 {
                     continue;
                 }

                 var position = new Vector3(xOffset + i, placePositionY, 0);
                 prefabPlaceData.Add(new PrefabPlaceData(position, key));
             }

             placePositionY-= 1;
         }

         return prefabPlaceData;
     }

作ってよかったこと

最初ツール作るのチームの中では結構うーんって感じだったんですけどまあ暇あるし作るかってつくったらわりと手間取って困りました。
また次作る時に自分の記事みて作りたいと思います。
おわり

Discussion