First off, I really like the fact that custom properties exist in Blender and that they can be accessed and manipulated from Python and the UI. They have all kinds of nice uses for more advanced scripting and such.
However, in the current implementation I have some suggestions for improvements mostly when used through the
Custom Properties UI panels:
When adding a property it is called
propby default. But as the property list is sorted by name (great!) you have to search for the new property after creating it when you already have a number of properties set. Why not call it something like
<new>, which will (most of the time) show up at the top of the list.
It currently takes a few steps to set up a property, as it is created by default as a single float with a range of [0,1]. This will only be the needed type and range in a few cases. As the type of a property is determined based on the value you enter (I guess parsing the expression as Python) why not have a new property have an empty value initially which, when filled in for the first time, determines the type just like when setting it through the
editUI? This saves having to change from float every time you add a non-float (or vector) property.
Setting a property’s value to something higher than the maximum works, but then you can’t edit the property anymore through the arrow buttons or text box next to the value name. Would make more sense to adjust the maximum (and minimum) when the value is outside the current range.
There’s a default value, but that’s a bit weird as there’s no way to not set a value for a property other than by removing it (which will also remove the value)? The tooltip suggests it has something to do with NLA editing?
Assigning unique and persistent ID for data blocks is a topic that occasionally resurfaces (e.g. Universal unique id per object, Blender Python API Papercuts, https://blenderartists.org/t/unique-object-id/602113). Using a custom property for this is only partly a solution, as duplication of an object also duplicates all its custom properties and you end up with non-unique IDs. But how about slightly changing the property duplication code so that properties with a certain name, say starting with two underscores, do not get duplicated when copying a data block? You can then use such a property as unique ID. It’s easy to detect
__myuniqueidis missing and generate a new unique ID at that point. An undo will restore an object with such an ID, but it was already guaranteerd to be unique. I actually do not have the full picture on whether this would work in all situations, but just a thought after working with custom properties for a while now.