SerializedPropertyの配列の中のインデックスを求める
propertyがArrayの要素のとき、propertyPathは <親のArray Propertyの名前>.Array.data[0] の形になってる
親が配列かどうかは、property.serializedObject.FindProperty(fieldInfo.Name).isArrayでとれる
配列のフィールドにつけたAttributeのPropertyDrawerを作ると、PropertyDrawerは配列に対して1つだけしか生成されないにも関わらず、OnGUIメソッドはArrayの要素に対して呼ばれるので、結構めんどうくさい。
結局使わずにpathをキーにした辞書を作った
https://github.com/shivaduke28/kanikama/blob/feature/v3/Kanikama/Packages/net.shivaduke28.kanikama.core/Editor/SpecifyObjectAttribute.cs
結局使った...
https://light11.hatenadiary.com/entry/2018/03/15/000832 にあるようにRegexで引けばよい
決め打ちでコードを短くしたやつ
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;
}