Unity備忘録51頁目「エディタをいじってElement名を変える」

江上宿六です。

 

相変わらず遊び優先です。 まぁ、少しずつ片付いてきているので

そろそろちゃんと再開できるような気はします、多分。

 

それで今回は前回の延長で、後で記すとか書いていたやつです。

こういうエディタ周りの事とかは全くわからんので何とも言えない所ですけど

自分でも記しておいた方が自分でも参照しやすいと思うので。

 

まぁ、なんかエディタに変更を加えるにはAssetフォルダ内にEditorフォルダを

作る必要があって、そこにコードを入れる必要があるようです。

フォルダを作ったらC#Scriptを追加し、NamedArrayDrawerと名付けます。

using UnityEngine;
using UnityEditor;

[CustomPropertyDrawer(typeof(NamedArrayAttribute))]
public class NamedArrayDrawer : PropertyDrawer
{
    public override void OnGUI(Rect rect, SerializedProperty property, GUIContent label)
    {
        try
        {
            int pos = int.Parse(property.propertyPath.Split('[', ']')[1]);

            EditorGUI.PropertyField(rect, property, new

            GUIContent(((NamedArrayAttribute)attribute).names[pos]));
        }
        catch
        {
            EditorGUI.PropertyField(rect, property, label);
        }
    }
}

それでこんな感じのを入力します。 なんとなくどういう感じの事をやろうと

しているのかは分かりますけど、深く考えないようにして次にいきます。

 

続けてC#Scriptを作りNamedArrayAttributeと名付けますが、これは

Element名を変えたりリストや配列を扱うコードと同じフォルダに入れます。

最初Editorフォルダに入れてて動かなかったので少し悩んでました。

using UnityEngine;

public class NamedArrayAttribute : PropertyAttribute
{
    public readonly string names;
    public NamedArrayAttribute(string
names) { this.names = names; }
}

これを作ったらクラスの宣言の所に一文追加します。

    [SerializeField]
    [NamedArrayAttribute(new string[] { "棒立ちの時つぶやき", "座った時", })]
    List<TextData> textLists = new List<TextData>();

リストの宣言前にNamedArrayAttributeを記述し、そこに置き換えたい文字列を

追加していけば良いわけです。 SerializeFieldとの順番は意識しなくても良いはず。

f:id:y6yegami:20220401231123p:plain

という感じで前回の画像と状態となりました。

 

まぁ、データが大きくなりそうだからこそ分かりやすさが欲しいという所から

進捗とはあまり関係ない所を考えて調べたりしてたわけです。

 

そんな所ですね。

f:id:y6yegami:20220405164033p:plain

今後の作業は、もう少しテキストの使い方をなんとかしたり、

吹き出しと被るという理由でカーソルを矢印からサークルに変えてみたかったり

キャラを座らせたデータを元にゲームステージに移行したり、そういう感じの

処理をしたいとは思っています。