LoginSignup
2
1

More than 5 years have passed since last update.

ScriptableObjectで発生した Check that the definition is in a file of the same name.について

Last updated at Posted at 2017-11-24

ScriptableObjectではまったのでメモ

よくこんなSampleで動作確認とかしますよね。

ScriptableSample.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class Sample : ScriptableObject
{
    public int Counter;
}

public class ScriptableSample
{
    [MenuItem("Assets/Create/ScriptableSample")]
    public static void CreateAsset()
    {
        Sample ObjSample = ScriptableObject.CreateInstance<Sample>();
        string path = AssetDatabase.GenerateUniqueAssetPath("Assets/Data/" + typeof(Sample) + ".asset");

        AssetDatabase.CreateAsset(ObjSample, path);
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();
    }
}

Unity5.5で動いたので、安心してUnity5.6.2で動かしてみるとWarningが出ます!Unity2017でも同じようです。
No script asset for Sample. Check that the definition is in a file of the same name.

Warningの内容からdefinition 定義が無いと怒られているみたいです。
さて定義とは何でしょう。
あれこれぐぐっていたらここにぶつかりました。
When building AssetBundles some scriptable objects get corrupted

最後にこんな説明がありました。
A ScriptableObject must have his own name file. For example, your StructureSettings definition must be in "StructureSettings.asset" file. Please check your definition place about StructureSettings.

ScriptableObjectにはそれを定義するファイルが必要だということです。
”ファイル?”

そう、file。

そこで、こんな感じ(↓)に変更してみると。Warningは消えました!
ScriptableObjectを作る時は、ファイル名とセットのクラスが定義されていることが大事なんですね。

ScriptableSample.cs

public class ScriptableSample : ScriptableObject
{
    public int Counter;

    [MenuItem("Assets/Create/ScriptableSample")]
    public static void CreateAsset()
    {
        ScriptableSample ObjSample = ScriptableObject.CreateInstance<ScriptableSample>();
        string path = AssetDatabase.GenerateUniqueAssetPath("Assets/Data/" + typeof(ScriptableSample) + ".asset");

        AssetDatabase.CreateAsset(ObjSample, path);
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();
    }
}

ちなみにファイルを二つに分け、
Sample.csScriptableSample.cs
Sample.cs側は
public class Sample : ScriptableObject{}

ScriptableSample側で、
CreateAsset()という形でもWarningは出ませんよ。

2
1
2

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
2
1