gas
Unity
G2U

[Unity] G2Uを少しだけ使いやすくする

ゲームデータを管理するのに便利なG2U。
シート数が増えてくるとUnity側での読み込みに時間がかかるようになる。
G2Uはファイル毎の非表示設定はできるのに、シート毎の非表示設定ができない。

以下を実施すると少しだけ使いやすくなる。

スプレッドシートを二つ用意する

・全てのデータを管理するスプレッドシート(例:GameDB)
・Unity側で実際に読み込むスプレッドシート(例:GameDBlite)

スクリプトを作成する

・GameDBliteのsheetIDをコピーしておく
・GameDB側で以下のスクリプトを作成する
・スクリプト内のPast_Destination_SheetID_Hereのところに、GameDBliteのsheetIDを記入する(1箇所だけ)

g2u.gs
//ここにコピー先のsheetIDを入力
var sheetID = 'Past_Destination_SheetID_Here';

function onOpen(){
  //メニューの配列
  var myMenu=[
    {name: "別のワークブックにコピー", functionName: "copySheetTo"},
    {name: "別のワークブックにコピー(クリア)", functionName: "copySheetToWithClear"},
  ];
  //メニューを追加
  SpreadsheetApp.getActiveSpreadsheet().addMenu("G2U",myMenu); 
}

function copySheetTo(){
  //現在のアクティブなシートを取得する
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  //sheetIDで指定したのスプレッドシート(コピー先)を取得する
  var destination = SpreadsheetApp.openById(sheetID);
  //コピー先に同名のシートがあるか確認する
  var destSheet = destination.getSheetByName(sheet.getName());
  //同名のシートがある場合
  if(destSheet != null){
    //現在のシートをコピー先に一旦コピーする(コピーすると余計な文字列がつく)
    var newSheet = sheet.copyTo(destination);
    //元からあるシートを削除して
    destination.deleteSheet(destSheet);
    //さっきコピーしたシートを元の名前に戻す
    newSheet.setName(sheet.getName());
    //トースト表示
    SpreadsheetApp.getActiveSpreadsheet().toast('上書きしました : ' + destination.getName() );
  }
  //同名のシートがない場合
  else{
    //現在のシートをコピー先にコピー、名前を変更する(コピーすると余計な文字列がつく)
    sheet.copyTo(destination).setName(sheet.getName());
    //トースト表示
    SpreadsheetApp.getActiveSpreadsheet().toast('コピーしました : ' + destination.getName() );  
  }
}

function copySheetToWithClear(){
  //まずコピー
  copySheetTo();  

  //sheetIDで指定したのスプレッドシート(コピー先)を取得する
  var destination = SpreadsheetApp.openById(sheetID);

  //コピー先のシート数を取得
  var cnt = destination.getNumSheets();
  //(シート数-1)回、1番目のシートを削除する
  for(var i = 0; i < cnt - 1; i++){
    var sh = destination.getSheets()[0];
    destination.deleteSheet(sh);
  }

}

スクリプトを実行する

GameDBのメニュー内にG2Uが追加される

別のワークブックにコピー
現在アクティブになっているシートがGameDBliteにコピーされる。
GameDBliteにすでに同名のシートがある場合は上書きされる。
なければ新規作成される。

別のワークブックにコピー(クリア)
GameDBliteにコピーされたシート以外をすべて削除できる。
GameDBliteが膨らんでしまった時に使う。

Unity側でやること

GameDBliteのみを表示する。
(GameDBは目玉アイコンを押して非表示にしておく)

スプレッドシート側でやること

GameDBのみを編集し、GameDBliteは開かない。
コピー作業は全てスクリプト経由にする。

こうすることで、間違ってGameDBliteを編集してしまうことがなくなるのでおすすめ。