Un cliente generativo no oficial de AI Meshy Restful para el motor Unity Game.
Todos los derechos de autor, marcas comerciales, logotipos y activos son propiedad de sus respectivos propietarios.
Este repositorio está disponible para transferir a la organización Meshy si así eligen aceptarlo.
Requiere Unity 2021.3 LTS o superior.
El método de instalación recomendado es a pesar de que Unity Package Manager y OpenUpm.
Package Manager 
OpenUPMhttps://package.openupm.comcom.rest.meshyMy RegistriesMeshyhttps://github.com/RageAgainstThePixel/com.rest.meshy.git#upmNota: ¡Este repositorio tiene dependencias de otros repositorios! Usted es responsable de agregarlos por su cuenta.
Hay 4 formas de proporcionar sus claves API, en orden de precedencia:
Utiliza la MeshyAuthentication cuando inicializa la API como se muestra:
var api = new MeshyClient ( " msy_apikey123 " ) ; O crear un objeto MeshyAuthentication manualmente
var api = new MeshyClient ( new MeshyAuthentication ( " msy_apikey123 " ) ) ; Puede guardar la clave directamente en un objeto scriptable que se encuentra en la carpeta de Assets/Resources .
Puede crear uno nuevo utilizando el menú contextual del panel de proyecto y creando un nuevo objeto Scriptable MeshyConfiguration .

Intenta cargar las teclas API desde un archivo de configuración, de forma predeterminada .meshy
Para crear un archivo de configuración, cree un nuevo archivo de texto llamado .meshy y que contenga la línea:
La entrada de la organización es opcional.
{
"apiKey" : " msy_apikey123 "
} También puede cargar el archivo de configuración directamente con la ruta conocida llamando a métodos estáticos en MeshyAuthentication :
.meshy predeterminada en el directorio especificado: var api = new MeshyClient ( new MeshyAuthentication ( ) . LoadFromDirectory ( " path/to/your/directory " ) ) ;.meshy siempre que se ajuste al formato JSON: var api = new MeshyClient ( new MeshyAuthentication ( ) . LoadFromPath ( " path/to/your/file.json " ) ) ; Utilice las variables de entorno de su sistema especifican una clave y organización API para usar.
MESHY_API_KEY para su clave API. var api = new MeshyClient ( new MeshyAuthentication ( ) . LoadFromEnvironment ( ) ) ;Puede realizar las mismas tareas en el tablero que lo haría en la aplicación web.
Pro-tip: ¡también puede usar la ventana de contexto para acceder rápidamente a las opciones del editor para prefabricados y objetos de escena!
Acceda al tablero a través de Window/Dashboards/Meshy




Genere rápidamente texturas de alta calidad para sus modelos 3D existentes utilizando indicaciones de texto y arte conceptual.
var api = new MeshyClient ( ) ;
var textToTextureTasks = await api . TextToTextureEndpoint . ListTasksAsync ( 1 , 12 , SortOrder . Descending ) ;
foreach ( var meshyTask in textToTextureTasks )
{
Debug . Log ( $" { meshyTask . Id } | created_at: { meshyTask . CreatedAt } " ) ;
} Crea un nuevo texto para la tarea de textura e informa progresar hasta que se complete la tarea.
Pase en una prefabricación o escena GameObject para ser reutilizados:
var api = new MeshyClient ( ) ;
var sphere = GameObject . CreatePrimitive ( PrimitiveType . Sphere ) ;
var request = new TextToTextureRequest ( sphere , " Basketball " , " game assets " , enableOriginalUV : false , resolution : Resolutions . X1024 , artStyle : ArtStyles . Realistic ) ;
var taskResult = await MeshyClient . TextToTextureEndpoint . CreateTextToTextureTaskAsync ( request , new Progress < TaskProgress > ( progress => Debug . Log ( $" [ { progress . Id } ] { progress . Status } : { progress . PrecedingTasks ?? progress . Progress } " ) ) ) ;
Assert . IsNotNull ( taskResult ) ;
Debug . Log ( $" { taskResult . Id } | created_at: { taskResult . FinishedAt } | expires_at: { taskResult . ExpiresAt } " ) ; Si necesita más control sobre el proceso de exportación de GLB, también puede aprobar en su propio objeto GLTFast.Export.GameObjectExport :
var api = new MeshyClient ( ) ;
var sphere = GameObject . CreatePrimitive ( PrimitiveType . Sphere ) ;
var exportSettings = new ExportSettings
{
Format = GltfFormat . Binary ,
FileConflictResolution = FileConflictResolution . Overwrite ,
ComponentMask = ~ ( ComponentType . Camera | ComponentType . Animation | ComponentType . Light ) ,
} ;
var gameObjectExportSettings = new GameObjectExportSettings
{
OnlyActiveInHierarchy = false ,
DisabledComponents = true ,
} ;
var glbExport = new GameObjectExport ( exportSettings , gameObjectExportSettings ) ;
glbExport . AddScene ( new [ ] { sphere } ) ;
var request = new TextToTextureRequest ( glbExport , " Planet " , " game asset, space, vibrant, highly detailed " , enableOriginalUV : false , resolution : Resolutions . X1024 , artStyle : ArtStyles . Realistic ) ;
var taskResult = await MeshyClient . TextToTextureEndpoint . CreateTextToTextureTaskAsync ( request , new Progress < TaskProgress > ( progress => Debug . Log ( $" [ { progress . Id } ] { progress . Status } : { progress . PrecedingTasks ?? progress . Progress } " ) ) ) ;
Assert . IsNotNull ( taskResult ) ;
Debug . Log ( $" { taskResult . Id } | created_at: { taskResult . FinishedAt } | expires_at: { taskResult . ExpiresAt } " ) ;También puede usar una URL pública:
var api = new MeshyClient ( ) ;
var modelUrl = " https://github.com/KhronosGroup/UnityGLTF/raw/master/UnityGLTF/Assets/StreamingAssets/Lantern/glTF-Binary/Lantern.glb "
var request = new TextToTextureRequest ( modelUrl , " Lantern " , " game assets " , resolution : Resolutions . X1024 , artStyle : ArtStyles . Realistic ) ;
var taskResult = await api . TextToTextureEndpoint . CreateTextToTextureTaskAsync ( request , new Progress < TaskProgress > ( progress => Debug . Log ( $" [ { progress . Id } ] { progress . Status } : { progress . PrecedingTasks ?? progress . Progress } " ) ) ) ;
Debug . Log ( $" { taskResult . Id } | created_at: { taskResult . FinishedAt } | expires_at: { taskResult . ExpiresAt } " ) ;Genere rápidamente modelos 3D impresionantes utilizando indicaciones de texto.
var api = new MeshyClient ( ) ;
var textTo3DTasks = await MeshyClient . TextTo3DEndpoint . ListTasksAsync ( 1 , 12 , SortOrder . Descending ) ;
foreach ( var meshyTask in textTo3DTasks )
{
Debug . Log ( $" { meshyTask . Id } | created_at: { meshyTask . CreatedAt } " ) ;
} var request = new TextTo3DRequest ( " a treasure chest " , " realistic, wooden, carved, highest quality " , resolution : Resolutions . X1024 , artStyle : ArtStyles . Realistic ) ;
var taskResult = await MeshyClient . TextTo3DEndpoint . CreateTextTo3DTaskAsync ( request , new Progress < TaskProgress > ( progress => Debug . Log ( $" [ { progress . Id } ] { progress . Status } : { progress . PrecedingTasks ?? progress . Progress } " ) ) ) ;
Debug . Log ( $" { taskResult . Id } | created_at: { taskResult . FinishedAt } | expires_at: { taskResult . ExpiresAt } " ) ;Transforme rápidamente sus imágenes 2D en impresionantes modelos 3D y dale vida a tus imágenes.
️ Actualmente no funciona con la versión API actual.
var api = new MeshyClient ( ) ;
var imageTo3dTasks = await api . ImageTo3DEndpoint . ListTasksAsync ( 1 , 12 , SortOrder . Descending ) ;
foreach ( var meshyTask in imageTo3dTasks )
{
Debug . Log ( $" { meshyTask . Id } | created_at: { meshyTask . CreatedAt } " ) ;
} var api = new MeshyClient ( ) ;
var imageUrl = " https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Assets/main/Models/Fox/screenshot/screenshot-x150.jpg " ;
var request = new ImageTo3DRequest ( imageUrl ) ;
var taskResult = await api . ImageTo3DEndpoint . CreateImageTo3DTaskAsync ( request , new Progress < TaskProgress > ( progress => Debug . Log ( $" [ { progress . Id } ] { progress . Status } : { progress . PrecedingTasks ?? progress . Progress } " ) ) ) ;
Assert . IsNotNull ( taskResult ) ;
Debug . Log ( $" { taskResult . Id } | created_at: { taskResult . FinishedAt } | expires_at: { taskResult . ExpiresAt } " ) ;