うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】Google Drive API を利用して Google Drive や SpreadSheet にアクセスするライブラリ

Unity から Google Drive を利用したいと思い調べていると NuGet の導入が必要とのことで
個人的に面倒だったので自前で作ってしまえばいいじゃんということで作成しました

対応機能

  • SpreadSheet の読み書き
  • ディレクトリ一覧の表示
  • 画像のロード

公開されていない場合は Google Developers Console より クライアントIDクライアントシークレット を発行する必要があります

発行方法に関してはこちらの記事を参考にしてください

クライアントIDクライアントシークレット は公開しないように注意しましょう

導入

Github

github.com

PackageManager

「Add package from git URL」に https://github.com/yayorozu/UnityGoogleDriveHelper.git をAddしてください


サンプル

3つのサンプルが同封されているので各サンプル

公開 Spread Sheet へのアクセス

Tools/GoogleDriveSample/ShaderSpreadSheet

公開設定のSheet のIDとシート名を入力することで、シートの中身を表示します

Sheet の ID は URL を確認することでわかります https://1docs.google.com/spreadsheets/d/{sheet id}

f:id:hacchi_man:20211216000541p:plain:w450
f:id:hacchi_man:20211216000651p:plain:w450

Spread Sheet へのアクセス

Tools/GoogleDriveSample/SpreadSheet

GoogleOAuthClientDataクライアントIDクライアントシークレット を入力した状態で、EditorWindow を開き
「Get OAuth Code」より認証コードを取得して、「Paste OAuth Code from clipboard」をクリックすることでアクセスすることができるようになるので

こちらも同じように Sheet ID を入力して「ロード」を押します

すると Spread Sheet のシート一覧が表示されるので、みたいシートを選択すると中身を表示できます

f:id:hacchi_man:20211216002920p:plain:w450

Google Driveディレクトリ一覧を取得

Tools/GoogleDriveSample/Folder

上記と同じく設定したのち、この EditorWindow を開くと「GetRoot」と表示される

f:id:hacchi_man:20211216003100p:plain:w450

これを押すとディレクトリ一覧が表示され、フォルダであれば更に中のファイル一覧を確認することができる

使い方

スクリプトを利用して Google Drive へのアクセス方法を記述する

公開されている画像へのアクセス

GoogleDriveFileApi.LoadShareTexture(id, texture => {});

公開SpreadSheetへのアクセス

GoogleSpreadSheetApi.GetSheet(spreadSheetId, sheetName, v => /* string[,] */);

公開SpreadSheet のデータをクラスへキャスト

1行目のカラムと変数名を一致させ自動的にクラスへの変換を行う

private class Sample
{
    public int IntValue;
}
 
GoogleSpreadSheetApi.GetSheet<Sample>(spreadSheetId, sheetName, v => /* List<Sample> */);

OAuth を使ったアクセス

// ClientId と ClientSecret を登録
var clientData = GoogleOAuthClientData.Load("GoogleAuthData");
var data = new GoogleSpreadSheetOAuthData(clientData);
data.SetToken(new EditorOAuthToken(EditorApplication.applicationPath));
 
// ブラウザを開いて認証コードを取得
data.GetOAuthCode();
 
// 取得した認証コードを適応してアクセストークンを取得
data.SetOAuthCode(code);
data.GetToken();
 
// Spread Sheet のロード
data.LoadSpreadSheet(_spreadSheetId, data =>
{
    // SpreadSheet の情報を取得
});
 
// SpreadSheet のデータをもとにシートをロード
data.LoadSheet(_sheetData, sheet, v =>
{
    // string[,]
});