import bpy
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete(use_global=False)
def create_block(name, loc, scale):
bpy.ops.mesh.primitive_cube_add(size=1.0, location=loc)
obj = bpy.context.active_object
obj.name = name
obj.scale = scale
bpy.ops.object.transform_apply(scale=True)
return obj
parts = []
parts.append(create_block("Torso", (0.0, 0.0, 4.0), (0.9, 0.5, 1.4)))
parts.append(create_block("Head", (0.0, 0.0, 5.2), (0.45, 0.45, 0.5)))
parts.append(create_block("Arm_Upper_L", (0.9, 0.0, 4.5), (0.7, 0.25, 0.25)))
parts.append(create_block("Arm_Lower_L", (1.7, 0.0, 4.5), (0.6, 0.2, 0.2)))
parts.append(create_block("Hand_L", (2.2, 0.0, 4.5), (0.25, 0.15, 0.15)))
parts.append(create_block("Arm_Upper_R", (-0.9, 0.0, 4.5), (0.7, 0.25, 0.25)))
parts.append(create_block("Arm_Lower_R", (-1.7, 0.0, 4.5), (0.6, 0.2, 0.2)))
parts.append(create_block("Hand_R", (-2.2, 0.0, 4.5), (0.25, 0.15, 0.15)))
parts.append(create_block("Leg_Upper_L", (0.45, 0.0, 2.3), (0.35, 0.35, 0.9)))
parts.append(create_block("Leg_Lower_L", (0.45, 0.0, 1.0), (0.3, 0.3, 0.9)))
parts.append(create_block("Foot_L", (0.45, -0.2, 0.2), (0.32, 0.5, 0.2)))
parts.append(create_block("Leg_Upper_R", (-0.45, 0.0, 2.3), (0.35, 0.35, 0.9)))
parts.append(create_block("Leg_Lower_R", (-0.45, 0.0, 1.0), (0.3, 0.3, 0.9)))
parts.append(create_block("Foot_R", (-0.45, -0.2, 0.2), (0.32, 0.5, 0.2)))
bpy.ops.object.select_all(action='DESELECT')
for p in parts:
p.select_set(True)
bpy.context.view_layer.objects.active = parts[0]
bpy.ops.object.join()
char_obj = bpy.context.active_object
char_obj.name = "Персонаж"
mat = bpy.data.materials.new(name="Character_Mat")
mat.use_nodes = True
bsdf = mat.node_tree.nodes.get("Principled BSDF")
if bsdf:
bsdf.inputs['Base Color'].default_value = (0.8, 0.65, 0.55, 1.0)
bsdf.inputs['Roughness'].default_value = 0.6
char_obj.data.materials.append(mat)
bpy.ops.object.select_all(action='DESELECT')