LoginSignup
1
2

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-05-08

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

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

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

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

スクリプトを作成する

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

g2u.gs
//ここにコピー先のsheetIDを入力
var sheetID = 'Paste_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を編集してしまうことがなくなるのでおすすめ。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2