Skip to content

Instantly share code, notes, and snippets.

@todorok1
Last active February 7, 2019 06:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save todorok1/ae45d3f8b58cc121f39a4d4a80a23161 to your computer and use it in GitHub Desktop.
Save todorok1/ae45d3f8b58cc121f39a4d4a80a23161 to your computer and use it in GitHub Desktop.
CSVファイルをエクスポートするEditor拡張のサンプル
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;
[CustomEditor(typeof(CsvExporter))]
public class CsvExporterEditor : Editor {
public override void OnInspectorGUI(){
var csvExporter = target as CsvExporter;
DrawDefaultInspector();
if (GUILayout.Button("敵データのエクスポート")){
OutputCsv(csvExporter);
}
}
void OutputCsv(CsvExporter csvExporter){
if (string.IsNullOrEmpty(csvExporter.fileName)){
Debug.LogWarning(csvExporter.name + " : 出力するCSVファイル名が入力されていません。");
return;
}
// プロジェクト内のEnemyDataを読み込む
string[] outputList = AssetDatabase.FindAssets("t:EnemyData");
List<EnemyData> enemyDataList = new List<EnemyData>();
foreach (string guid in outputList){
string path = AssetDatabase.GUIDToAssetPath(guid);
EnemyData data = AssetDatabase.LoadAssetAtPath<EnemyData>(path);
if (data != null){
enemyDataList.Add(data);
}
}
// CSVファイルの出力先を設定する
string outputPath = AssetDatabase.GetAssetPath(csvExporter);
outputPath = outputPath.Substring(0, outputPath.LastIndexOf(csvExporter.name)) + csvExporter.fileName + ".csv";
FileInfo fi = new FileInfo(outputPath);
StreamWriter sw = fi.CreateText();
string header = "enemyName,maxHp,atk,def,exp,gold";
sw.WriteLine(header);
// ScriptableObjectの内容をファイルに書き込む
foreach (EnemyData data in enemyDataList){
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append(data.enemyName).Append(",")
.Append(data.maxHp).Append(",")
.Append(data.atk).Append(",")
.Append(data.def).Append(",")
.Append(data.exp).Append(",")
.Append(data.gold);
sw.WriteLine(sb.ToString());
}
// ファイルアクセスを閉じる
sw.Flush();
sw.Close();
// プロジェクト内のアセットの表示を更新する
AssetDatabase.Refresh();
Debug.Log("敵データのエクスポート完了!");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment