SerializedPropertyの配列の中のインデックスを求める
propertyがArrayの要素のとき、propertyPathは <親のArray Propertyの名前>.Array.data[0] の形になってる
親が配列かどうかは、property.serializedObject.FindProperty(fieldInfo.Name).isArrayでとれる
配列のフィールドにつけたAttributeのPropertyDrawerを作ると、PropertyDrawerは配列に対して1つだけしか生成されないにも関わらず、OnGUIメソッドはArrayの要素に対して呼ばれるので、結構めんどうくさい。
結局使わずにpathをキーにした辞書を作った
結局使った...
決め打ちでコードを短くしたやつ
code:foo.cs
// propertyがArrayの要素のとき、propertyPathは <親のPropertyの名前>.Array.data<Index> の形になってる var match = Regex.Match(property.propertyPath, @"\[(0-9*)\]$"); // new Regexしてキャッシュしても良い var num = path.Substring(match.Index + 1, match.Length - 2);
if (!Int32.TryParse(num, out var index))
{
index = -1;
}