Polygonal Mind
  • Home
  • Metaverse Builder
  • CryptoAvatars
  • MegaCube
  • Blog
  • Decentraland
  • Projects
  • Assets

Blog

Guía para modificar el Plugin de Decentraland para Unity

5/14/2020

0 Comments

 
English
Por qué necesito modificar el Plugin de Unity?
Usar el SDK de Decentraland para poner entidades "manualmente" en el código de typescript puede ser un proceso lento y tedioso, especialmente si tienes que colocar muchos de ellos y tienes que comprobar que estén todos en el sitio correcto.

Por eso necesitas herramientas que ayuden a construir una escena, como el Decentraland builder o el Unity to DCL export plugin. Aun así, hay ciertos límites sobre lo que puedes hacer con ellos.

En esta guía vamos a ver cómo hacer modificaciones al Unity plugin para DCL para expandir el número de cosas que puedes exportar al código de Decentraland desde el editor de Unity.
​
Antes de empezar con la guía deberías tener un mínimo de conocimientos del SDK de Decentraland, cómo exportar una escena desde Unity para DCL y algo de programación (usaremos typescript y C#).
Decentraland Documentation
https://docs.decentraland.org/development-guide/coding-scenes/
https://docs.decentraland.org/blockchain-integration/display-a-certified-nft/
El Objetivo

Vamos a enseñar un ejemplo de cómo modificar el plugin para hacerle exportar a typescript información necesaria para colocar NFTs en una escena.
Tomando esto como base, deberías ser capaz de hacer tus propias modificaciones que se adapten a las necesidades de tu proyecto.
Recursos

  • Unity 2018.3.6f1
  • Visual Studio (recomendado para usar junto a Unity)
  • Decentraland SDK
  • Unity to DCL export plugin
  • Decentraland para principiantes
Modificaciones en el plugin de Unity de Decentraland
Preparar el proyecto de Typescript

Antes de nada, vamos a programar nuestro propio componente y a dejarlo listo para usar en el proyecto de Typescript.
https://docs.decentraland.org/development-guide/entities-components/#custom-components
No es necesario hacer un componente propio para poner un NFTShape (que ya es un componente de por sí), pero para esta guía lo haremos igualmente, además será últil para usarlo como base para tus propios componentes más complejos.
Antes de empezar a escribir el código en tu archivo game.ts, ten en cuenta que el plugin de Unity sobreescribe el archivo entero y todo tu código se perderá. Por ello debemos trabajar en un archivo separado.
​
Crea un nuevo archivo en src/imports/components/NFT.ts con el siguiente código:
//Crea un componente NFTShape con la información dada
export function createNFTComponent(entity: IEntity, smartContract: string, tokenId: string){
entity.addComponent(
new NFTShape('ethereum://'+smartContract+'/'+tokenId,Color3.Blue())
)
}
//Añade un componente NFTdata a la entidad, crea un componente NFTcon la información dada
@Component('NFTdata')
export class NFTdata{
entity: IEntity //entidad del NFT
smartContract: string //Smart contract del NFT
tokenId: string //Token ID del NFT
constructor(entity: IEntity, smartContract: string, tokenId: string){
this.entity = entity
this.smartContract = smartContract
this.tokenId = tokenId
createNFTComponent(entity, smartContract, tokenId)
}
}
Crea otro script en src/imports/index.ts con:
export { NFTdata, createNFTComponent } from "./components/NFT"
Ahora tenemos nuestro código listo para cuando el plugin exporte el game.ts
Haz un script de Unity que contenga la información a exportar

Crea un script vacío en Unity y ábrelo con Visual Studio (o tu editor de código favorito).
Unity crear un nuevo script de C#
En este ejemplo, solo necesitamos guardar la información del NFT, pero siéntente libre de añadir lo que necesitas para tu propio proyecto.
public class nft_script : MonoBehaviour
{
public string smartContract;
public string tokenId;
}
Añade este script a la entidad de la escena que quieras que tenga el componente del NFT y rellena la información.
​
Address: 0x06012c8cf97BEaD5deAe237070F9587f8E7A266d
Token id:
​558536
Información del NFT en el inspector de Unity
Ahora tenemos la información guardada en nuestra entidad, el último paso que falta es traducir estos datos a nuestro proyecto en typsecript.
Modificando el plugin de Unity en C#

Modificar el plugin puede parecer una tarea muy complicada, pero ten en cuenta que solo necesitamos añadir nuestras pequeñas piezas de código para expandir sus funcionalidades; muy sencillo de hacer si sabes dónde hacerlo.
​
Abre SceneTraverser.cs en la carpeta del plugin de Decentraland: Assets/Decentraland/SceneTraverser.cs

Encuentra la función public static ResourceRecorder TraverseAllScene y añade el siguiente código después del comentario //====== Start Traversing ======
//====== Start Traversing ======
if (exportStr != null)
{
exportStr.AppendLine("import { NFTdata } from \"./imports/index\"\n\n");
}
Esto importará nuestra clase NFTdata al inicio de game.ts
​
Después encuentra la función public static void RecursivelyTraverseTransform y después de exportStr.AppendFormat(NewEntityWithName, entityName, tra.name); añade:
nft_script nftObject = (tra.gameObject.GetComponent("nft_script") as nft_script);
if (nftObject)
{
exportStr.AppendFormat(SetNFT, entityName, nftObject.smartContract, nftObject.tokenId);
}
Último paso,
​encuentra dónde están declaradas las strings de exportación y añade la string del SetNFT al final.
SceneTraverser code
private const string SetNFT = "{0}.addComponent(new NFTdata({0}, \"{1}\", \"{2}\")) \n";
Este código comprobará si la entidad exportada tiene un nft_script y le añadirá el componente NFT data a la entidad dentro de nuestro archivo game.ts.
​
Con todo esto terminado, tu escena está lista para ser exportada a un proyecto de typescript y tu game.ts resultante debería parecerse a esto:
import { NFTdata } from "./imports/index"

var entity1372n = new Entity("NFTentity")
entity1372n.addComponent(new NFTdata(entity1372n, "0x06012c8cf97BEaD5deAe237070F9587f8E7A266d", "558536"))
engine.addEntity(entity1372n)
entity1372n.addComponent(new Transform({ position: new Vector3(6, 1.5, 6) }))
entity1372n.getComponent(Transform).rotation.set(0, 0, 0, 1)
entity1372n.getComponent(Transform).scale.set(1, 1, 1)
Consejos finales

Puedes acceder desde cualquier parte en el proyecto a cualquier array de entidades con tus componentes personalizados, y esto puede ser útil para controlar dónde y cómo algunos componentes o comportamientos empiezan.
engine.getEntitiesWithComponent(NFTdata)
No necesitas hacer nuevos componentes muy complejos si no lo necesitas, por ejemplo puedes exportar desde Unity solamente la información para añadirle a una entidad en un array y aplicarle un comportamiento personalizado.

Antes de empezar a hacer tus propios compontentes, echa un vistazo al sdk de Decentraland y a la librería de utilidades de Decentraland, puede que ya tengan hecho lo que estás buscando.
​
Referencia a la API de ECS:
https://github.com/decentraland/ecs-reference
decentraland-ecs-utils:
https://github.com/decentraland/decentraland-ecs-utils
npm install decentraland-ecs-utils
Conclusión

Si has entendido los pasos de ésta guía, estás list@ para hacer tus propios componentes para Decentraland y poder utilizarlos en el Editor de Unity, y será de gran ayuda para llenar tus escenas con gameplay e interacciones. Espero que te haga el proceso de desarrollo para Decentraland un poquito más fácil.

Picture
Alex Picazo
PROGRAMADOR
Videogame programmer, love developing cool stuff. Always searching for new interesting stories.
LinkedIn
0 Comments



Leave a Reply.

    Categories

    All
    Blender
    CryptoAvatars
    Decentraland
    Decentraland En Español
    Maya
    Metaverse
    Mixamo
    Morphite
    Substance Painter
    The Sandbox
    Totally Reliable Delivery Service
    Unity 3D
    Updates
    Vrchat

    Archives

    March 2022
    July 2021
    June 2021
    May 2021
    April 2021
    March 2021
    February 2021
    January 2021
    December 2020
    October 2020
    August 2020
    July 2020
    June 2020
    May 2020
    April 2020
    March 2020
    February 2020
    December 2019
    October 2019
    September 2019
    August 2019
    June 2019
    May 2019
    February 2019
    January 2019
    December 2018
    November 2018
    October 2018
    September 2016

    Picture
Home
Projects
Assets

Picture
Crypto
Friendly
Picture

Subscribe to get some 💚 in your inbox once in a while.

Follow us and your visit will never be forgotten!
Picture
Picture
Picture

 © 2015-2022 POLYGONAL MIND LTD. ALL RIGHTS RESERVED.
  • Home
  • Metaverse Builder
  • CryptoAvatars
  • MegaCube
  • Blog
  • Decentraland
  • Projects
  • Assets