How to create a panel with different properties for different objects In Blender when I select an object and I change any setting, the other objects are not affected, but when I create a panel with properties from bpy.props, changing an intProperty on one changes it on the others
Look at this example:
I made a custom panel with 2 properties

I create 2 object A and B with property &quot;Resolution&quot; = 12, then on object A I change resolution to 20

when clicking on object B I see that resolution is 20 as well, but I want it to be still 12.
I understand that this is because I have only registered one set of properties, that are all the same, so is there a way to register different properties for each object, and create a panel that shows only the properties of the active one?
(custom ID props could be a workaround, but I would prefer to use a custom panel because it's cleaner and drivers are way worse to trigger update functions)

here there is the part of the code related to properties:
class MyProperties(bpy.types.PropertyGroup):

    sphere_resolution: IntProperty(
        name=&quot;Resolution&quot;,
        description=&quot;resolution of the sphere&quot;,
        default=8,
        min=3,
        update=updateResolution #function that changes the subdivisions of the sphere
    )

    sphere_transform: FloatProperty(
        name=&quot;Transformation&quot;,
        description=&quot;curvature of the Radial Sphere: = 0 is a plane, 1 is a sphere&quot;,
        default=1.0,
        min=0.0,
        max=1.0
    )


# operator to create the objects. Each object should have its own properties
class MESH_OT_CreateRadialSphere(bpy.types.Operator):
    bl_idname = &quot;mesh.create_radial_sphere&quot;
    bl_label = &quot;Radial Sphere&quot;

    def execute(self, context):
        # stuff
        return {'FINISHED'}

# create panel. Here there should be the properties of the active object, if the active object was created by the create operator, and changing a value should only affect the active object
class MESH_PT_sphere_topologies(bpy.types.Panel):
    bl_idname = &quot;MESH_PT_sphere_topologies&quot;
    bl_label = &quot;Sphere Topologies&quot;
    bl_space_type = &quot;PROPERTIES&quot;
    bl_region_type = &quot;WINDOW&quot;
    bl_context = &quot;data&quot;

    @classmethod
    def poll(self, context):
        # stuff

    def draw(self, context):
        layout = self.layout
        mytool = context.scene.SphereTopology

        layout.prop(mytool, &quot;sphere_resolution&quot;)
        layout.prop(mytool, &quot;sphere_transform&quot;)


classes = (
    MESH_OT_CreateRadialSphere,
    MESH_PT_sphere_topologies,
    MyProperties
)


def register():
    for cls in classes:
        bpy.utils.register_class(cls)
    bpy.types.Scene.SphereTopology = PointerProperty(type=MyProperties)

def unregister():
    for cls in classes:
        bpy.utils.unregister_class(cls)
    del bpy.types.Scene.SphereTopology
Easy. You would have to assign the PointerProperty to bpy.types.Object. Use context.object to get a reference. Demo based on the template from How to create a custom UI?
import bpy

from bpy.props import (StringProperty,
                       BoolProperty,
                       IntProperty,
                       FloatProperty,
                       FloatVectorProperty,
                       EnumProperty,
                       PointerProperty,
                       )
from bpy.types import (Panel,
                       Menu,
                       Operator,
                       PropertyGroup,
                       )


# ------------------------------------------------------------------------
#    Object Properties
# ------------------------------------------------------------------------

class MyProperties(PropertyGroup):

    my_bool: BoolProperty(
        name=&quot;Enable or Disable&quot;,
        description=&quot;A bool property&quot;,
        default = False
        )

    my_int: IntProperty(
        name = &quot;Int Value&quot;,
        description=&quot;A integer property&quot;,
        default = 23,
        min = 10,
        max = 100
        )

    my_float: FloatProperty(
        name = &quot;Float Value&quot;,
        description = &quot;A float property&quot;,
        default = 23.7,
        min = 0.01,
        max = 30.0
        )

# ------------------------------------------------------------------------
#    Panel in Object Mode
# ------------------------------------------------------------------------

class OBJECT_PT_CustomPanel(Panel):
    bl_label = &quot;My Panel&quot;
    bl_idname = &quot;OBJECT_PT_custom_panel&quot;
    bl_space_type = &quot;VIEW_3D&quot;   
    bl_region_type = &quot;UI&quot;
    bl_category = &quot;Tools&quot;
    bl_context = &quot;objectmode&quot;   


    @classmethod
    def poll(self,context):
        return context.object is not None

    def draw(self, context):
        layout = self.layout
        #scene = context.scene
        mytool = context.object.my_tool

        layout.prop(mytool, &quot;my_bool&quot;)
        layout.prop(mytool, &quot;my_int&quot;)
        layout.prop(mytool, &quot;my_float&quot;)
        layout.separator()

# ------------------------------------------------------------------------
#    Registration
# ------------------------------------------------------------------------

classes = (
    MyProperties,
    OBJECT_PT_CustomPanel
)

def register():
    from bpy.utils import register_class
    for cls in classes:
        register_class(cls)

    bpy.types.Object.my_tool = PointerProperty(type=MyProperties)

def unregister():
    from bpy.utils import unregister_class
    for cls in reversed(classes):
        unregister_class(cls)
    del bpy.types.Object.my_tool


if __name__ == &quot;__main__&quot;:
    register()