SpriteNameFileIdPairExt[] GetSerializedNameFileIdTable(SerializedObject so) { var nameFileIdTableSo = so.FindProperty("m_SpriteSheet.m_NameFileIdTable"); var arraySize = nameFileIdTableSo.arraySize; var nameFileIdPairs = new SpriteNameFileIdPairExt[arraySize]; if (nameFileIdPairs.Length > 0) { var sp = nameFileIdTableSo.GetArrayElementAtIndex(0); for (var i = 0; i < nameFileIdTableSo.arraySize; ++i) { var spriteNameFileId = SpriteNameFileIdPairExt.GetValue(sp); // check if this internal nid is already in one of the sprite. // We don't check name as changing internal id can cause reference to be lost var spriteRect = m_SpritesMultiple.FirstOrDefault(x => x.internalID == spriteNameFileId.internalID); if (spriteRect != null) { spriteNameFileId.SetFileGUID(spriteRect.spriteID); } nameFileIdPairs[i] = spriteNameFileId; sp.Next(false); } } return(nameFileIdPairs); }