-
1 Archivos adjunto(s)
Replacemesh python BGE
Buenas, este atributo forma parte de todos los objetos de la escena, nos sirve para reemplazar la Maya del objeto por la de otro objeto, dando igual que esté en la misma capa o en una capa inactiva.
API:
ReplaceMesh(mesh, useDisplayMesh = True, usePhysicsMesh = False).
Mesh: el nombre de la Maya qué va a sustituir a la del objeto. (Ojo, el nombre de la Maya no del objeto)
useDisplayMesh: cambiar la apariencia de la Maya (True) o no la cambia(False). Esto es opcional, si no ponemos nada es True.
usePhysicsMesh: Se supone que debería de sustituir las físicas del objeto al que vamos a reemplazar, por las físicas del objeto que lo remplaza, pero no funciona.
Lo he probado en la versión 2.75 y 2.76, ni siquiera en el actuador Edit Object funciona.
Entonces si tengo un cubo y lo quiero reemplazar por una esfera y el nombre de la malla de la esfera es Paquito, tendría que poner:
cubo, replaceMesh(Paquito).
-- IMÁGENES ADJUNTAS --
https://foro3d.com/attachment.php?attachmentid=215132
-
El método ReplaceMesh en Blender Game Engine (BGE) está obsoleto y ya no funciona en versiones modernas de Blender. BGE fue descontinuado después de Blender 2.79. Para proyectos actuales que requieren lógica en tiempo real, debes migrar a herramientas más modernas.
La solución actual es utilizar Blender con el motor de renderizado Eevee y el sistema de lógica visual de nodos llamado Geometry Nodes para manipular mallas en tiempo de ejecución, o bien usar la API de Python de Blender en modo de edición. Sin embargo, para un reemplazo de malla dinámico similar a un motor de juego, se recomienda usar un motor de juego actual.
Para proyectos interactivos o de juego, debes exportar tus activos a un motor como Godot, Unity o Unreal Engine. En estos motores, el reemplazo de una malla en tiempo de ejecución es una funcionalidad estándar y sencilla de programar.
Si necesitas realizar esta acción dentro de Blender con fines de automatización o scripting (no en tiempo de ejecución como en un juego), puedes usar el siguiente enfoque con la API de Python de Blender. Este script asigna los datos de malla de un objeto a otro.
Primero, asegúrate de que ambos objetos existan en el archivo de Blender. El siguiente código toma el nombre de un objeto fuente y un objeto destino, y reemplaza la malla del destino por la del fuente.
import bpy
def replace_mesh_data(target_obj_name, source_obj_name):
# Obtener los objetos por nombre
target_obj = bpy.data.objects.get(target_obj_name)
source_obj = bpy.data.objects.get(source_obj_name)
if not target_obj or not source_obj:
print("Error: Uno o ambos objetos no encontrados.")
return
if target_obj.type != 'MESH' or source_obj.type != 'MESH':
print("Error: Ambos objetos deben ser de tipo malla.")
return
# Reemplazar los datos de malla
target_obj.data = source_obj.data
Ejemplo de uso: reemplazar la malla del objeto llamado 'Cubo' por la del objeto llamado 'Esfera'
replace_mesh_data('Cubo', 'Esfera')
Para ejecutarlo, ábrelo en el Editor de Textos de Blender y ejecuta el script. Esto cambiará la geometría del objeto destino. Ten en cuenta que esto afecta a todos los objetos que compartan esa misma data de malla.
Si tu objetivo es desarrollar un juego, aprender Godot con GDScript o C# es la opción más recomendable y con mejor futuro. En Godot, podrías cambiar la malla de un nodo MeshInstance3D en código de manera trivial con una línea como $MeshInstance3D.mesh = new_mesh_resource.