LoginSignup
noutarins
@noutarins (nou tarins)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

ContextMenuItemで追加したメニューが出てこない

解決したいこと

Unityのインスペクターから、メソッドを実行できるContextMenuItemが、おそらく多重リストの中身であると機能しない件について。

発生している問題・エラー

お疲れ様です。
今回わからないことについてなのですが、解決したいことにある通りです。
具体的に今回行おうとしたことは、まず、
[Serializable]属性を付加した自作BaseClass(aTest)を、
[Serializable]属性を付加した多数の自作Class(bTest)に継承し、
それをListとして保持した、[Serializable]属性を持ち、ScriptableObjectを継承した自作class(serializetest )を作りました。
そしてこのListにContextMenuItem、SerializeReference属性を付与してインスペクター上から任意の派生classを追加できるようにしました。
イメージとしては以下の感じです。(追加したのはAdd Bs です)
image.png
次にその発展として、上で述べた構造を入子状態(dTest、eTest)にして、
追加した派生classの中にもListを作り、ContextMenuItem、SerializeReference属性を付与してインスペクター上から任意の派生classを追加できるようにしようとしました。
しかし、ここで問題発生です。
なぜか上の画像のようなメニューが出てきませんでした。
(以下の画像のようにメニューに出てきません。)
image.png

該当するソースコード

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
[Serializable]
[CreateAssetMenu(fileName = "serializetest", menuName = "Createserializetest")]

public class serializetest : ScriptableObject
{
    [ContextMenuItem("Add Bs", "AddBs")]
    [SerializeReference]
    List<aTest> bs;
    
    public void AddBs()
    {
        bTest BTest = new bTest();
        bs.Add(BTest);
       
    }
}
[Serializable]
public class aTest
{
    [SerializeField]
    string isa;
}

[Serializable]
public class bTest:aTest
{
    [SerializeField]
    string isb;
    [ContextMenuItem("Add ds", "AddDs")]
    [SerializeReference]
    List<dTest> ds;
    public void AddDs()
    {
        
        eTest ETest = new eTest();
        ds.Add(ETest);
    }
}
[Serializable]
public class dTest
{
    [SerializeField]
    private string isd;
}
[Serializable]
public class eTest:dTest
{
    [SerializeField]
    private string ise;
}

どうしたらメニューに出てくるようになるのか、なぜメニューに出てこないのか、がわかりません。
なにとぞご教授のほどよろしくお願いします。

0

No Answers yet.

Your answer might help someone💌