Unityで独自拡張子のファイルをScripted ImporterでアセットにしてRiderで拡張子を紐付けるまでの流れをまとめました。
Unity2020.2.2f1
Rider 2021.1
やりたいこと
UnityにはUnityが対応していない拡張子のファイルをアセットとして取り扱えるScripted Importerという機能があります。
また、Riderには任意の拡張子やファイル名を任意のファイル形式と紐づける機能があります。
本記事ではこれらの機能を利用して、独自拡張子のファイルをアセットとして取り扱えるようにし、
さらにそれをRiderで適したファイル形式と紐づけることで編集しやすくします。
独自拡張子のファイルをアセットとして取り扱う
まずScripted Importerを使って独自拡張子のファイルをアセットとして取り扱えるようにします。
Scripted Importerの細かい使い方については以下の記事にまとめていますので必要に応じて参照してください。
今回の例では上記の記事内にあるUnity公式のサンプルをそのまま使います。
using UnityEngine; using System.IO; using UnityEditor.AssetImporters; [ScriptedImporter(1, "cube")] public class ExampleImporter : ScriptedImporter { // インポーターのInspectorから設定できる値 [SerializeField] private float _scale = 1; public override void OnImportAsset(AssetImportContext ctx) { // ファイルから文字列を読み込んで座標に変換 var position = JsonUtility.FromJson<Vector3>(File.ReadAllText(ctx.assetPath)); // GameObjectを生成 var cube = GameObject.CreatePrimitive(PrimitiveType.Cube); cube.transform.position = position; cube.transform.localScale = new Vector3(_scale, _scale, _scale); // Materialを生成 var material = new Material(Shader.Find("Standard")) {color = Color.red}; cube.GetComponent<MeshRenderer>().material = material; // GameObjectをメインアセットとして追加する // かならずAssetImportContextを通して追加すること(AssetDatabaseのAPIを叩かない) ctx.AddObjectToAsset("Main", cube); ctx.SetMainObject(cube); // Materialをサブアセットとして追加する ctx.AddObjectToAsset("Material", material); } }
これで、以下のようなjsonファイルを.cube
拡張子でインポートするとアセットとして取り扱われます。
{"x":1,"y":1,"z":1}
独自拡張子のファイルをRiderで開けるようにする
さてこの時点では上記でできたアセットをUnity上でダブルクリックしてもRiderで開くことができません。
この拡張子をRiderで開けるようにするには、Preferences > External Tools > Extensions handled
にcube拡張子を追加します。
これでcube拡張子のファイルをダブルクリックするとRiderで開かれるようになりました。
Riderで独自拡張子とファイル形式を紐づける
前節の方法で.cube
ファイルがRiderで開かれるようにはなりましたが、この時点ではシンタックスハイライトなどが効いていません。
そこで次に拡張子.cube
をjsonファイル形式に紐付けます。
Riderでこれを行う方法は以下の記事にまとめていますので詳細はこちらを参照してください。
この記事の方法に従って、今回は以下のように設定しました。
これでSaveをクリックすると設定が保存され、.cube
拡張子のファイルがjsonとしてハイライトされることが確認できます。
以上で、独自拡張子のファイルをアセットにしてRiderで編集することができました。