【Unity】独自拡張子のファイルをScripted ImporterでアセットにしてRiderで拡張子を紐付けて編集するまでの流れ

Unityで独自拡張子のファイルをScripted ImporterでアセットにしてRiderで拡張子を紐付けるまでの流れをまとめました。

Unity2020.2.2f1
Rider 2021.1

やりたいこと

UnityにはUnityが対応していない拡張子のファイルをアセットとして取り扱えるScripted Importerという機能があります。
また、Riderには任意の拡張子やファイル名を任意のファイル形式と紐づける機能があります。

本記事ではこれらの機能を利用して、独自拡張子のファイルをアセットとして取り扱えるようにし、
さらにそれをRiderで適したファイル形式と紐づけることで編集しやすくします。

独自拡張子のファイルをアセットとして取り扱う

まずScripted Importerを使って独自拡張子のファイルをアセットとして取り扱えるようにします。
Scripted Importerの細かい使い方については以下の記事にまとめていますので必要に応じて参照してください。

light11.hatenadiary.com

今回の例では上記の記事内にある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拡張子を追加します。

f:id:halya_11:20210412144505p:plain
cube拡張子をRiderで開けるようにする

これでcube拡張子のファイルをダブルクリックするとRiderで開かれるようになりました。

Riderで独自拡張子とファイル形式を紐づける

前節の方法で.cubeファイルがRiderで開かれるようにはなりましたが、この時点ではシンタックスハイライトなどが効いていません。
そこで次に拡張子.cubejsonファイル形式に紐付けます。
Riderでこれを行う方法は以下の記事にまとめていますので詳細はこちらを参照してください。

light11.hatenadiary.com

この記事の方法に従って、今回は以下のように設定しました。

f:id:halya_11:20210412145148p:plain
cube拡張子をjson形式に紐付ける

これでSaveをクリックすると設定が保存され、.cube拡張子のファイルがjsonとしてハイライトされることが確認できます。

以上で、独自拡張子のファイルをアセットにしてRiderで編集することができました。

関連

light11.hatenadiary.com

light11.hatenadiary.com