WEB3DEV

Cover image for Crie Loot Boxes de NFT no Jogo com Unity
Rafael Ojeda
Rafael Ojeda

Posted on

Crie Loot Boxes de NFT no Jogo com Unity

Crie Loot Boxes de NFT no Jogo com Unity

Image description

Neste guia, mostraremos como usar o contrato Pack para permitir que os usuários abram NFTs selecionados aleatoriamente como ativos dentro do jogo. No final, você irá:

  • Implantar uma Edição; uma coleção de NFTs representando seus itens dentro do jogo.
  • Implantar o contrato Pack; uma coleção de NFTs de loot Boxes ( Caixas de Recompensa ) ERC1155.
  • Agrupar os NFTs de itens dentro do jogo nas boxes/loot crates.
  • Selecionar aleatoriamente um NFT para ser entregue ao usuário quando ele abrir uma box!

Aqui está uma prévia do que estaremos construindo:

Image description

💡 Os ativos que usamos neste guia são criados por Gabriel Aguiar Prod.

Você pode usar seus próprios ativos, ou comprar estes ativos por US$ 10.

Vamos começar!

Criando NFTs dentro do jogo

Primeiro, precisamos criar os NFTs que nossos jogadores podem receber quando eles abrem suas loot boxes! Vamos usar o contrato de Edição para conseguir isso.

Para começar, vá para a página de Contratos em seu Painel de Controle da web 3.0 e clique em "Implantar novo contrato" (Deploy new contract):

Image description

Você será levado para nossa página de Exploração - onde você pode navegar pelos contratos inteligentes construídos pelos principais protocolos da web3 e implantá-los em apenas alguns cliques!

Nota: Você também pode usar a CLI ( Interface de Linha de Comando ) da web3 para criar um ambiente de contrato inteligente executando o comando abaixo a partir de seu terminal:

npx thirdweb create contract

Isto o levará através de um fluxo de passos simples de seguir para que você possa criar seu contrato. Saiba mais sobre isso em nosso guia CLI.

Em caso contrário, vamos voltar para Explorar:

Image description

Aqui, selecione seu contrato inteligente preferido. Para este guia, vamos utilizar o contrato de Edição para criar nossa coleção NFT:

Image description

Preencha os metadados de seu contrato inteligente, assim:

Image description

Quando você estiver pronto, clique no botão Deploy Now para implantar seu contrato! Recomendamos o uso de uma rede de teste antes de implantar na rede principal.

Image description

Legal! Nosso contrato de edição será enviado para a blockchain! 🎉

Cunhagem de NFTs

Vá até a aba NFTs e clique no botão + Mint para criar seus itens dentro do jogo.

Image description

Ao cunhar seus NFTs, considere a raridade que você deseja que cada item tenha.

Por exemplo, eu criei dois NFTs em minha coleção:

1 . Gema Vermelha: Um item comum, com 400 itens disponíveis.
2 . Gema Púrpura: Um item raro, com 100 itens disponíveis.

Image description

Supondo que agrupamos todos os NFTs e lançamos 1 NFT por pacote, haverá 80% de chance de abrir uma gema vermelha, e 20% de chance de abrir uma gema púrpura com 500 loot boxes disponíveis.

💡 Cada pacote NFT pode conter mais de um token; pode armazenar também os tokens ERC721, ERC1155, e ERC20! Estamos apenas simplificando as coisas aqui.

Agora que nossos NFTs estão cunhados, é hora de juntá-los em algum pacote de NFTs!

Criando Loot Box NFTs

O contratoPack permite o agrupamento de tokenss ERC20, ERC721 e ERC1155 em novos ** NFTs ERC1155** que atuam como loot boxes aleatórios.

Os pacotes em si também são NFTs ERC1155, com um recurso adicional que permite "abri-los". Quando eles são abertos, o usuário recebe token(s) selecionado(s) aleatoriamente daqueles agrupados nos pacotes.

💡 Veja o Documento de Projeto de Pacotes para saber mais sobre os pacotes.

Implantar o Contrato de Pacote

Vá para a página Pack no painel de instrumentos e clique em Deploy Now.

Image description

Preencha assim os metadados para seu contrato inteligente:

Image description

Clique em Deploy Now, assegurando que você selecione a mesma rede que seu contrato de Edição.

Image description

Agrupamento de itens em pacotes

Para cunhar nosso pacote de NFTs, precisamos usar o SDK ( Kit de Desenvolvimento de Software ) para agrupar nosso item NFTs em pacotes NFTs recém-criados!

Para começar, clone nosso repositório de modelos, executando o seguinte comando:

npx thirdweb@latest create --template pack-creation-script

Isto lhe dará um roteiro e instruções sobre como agrupar seus NFTs em pacotes! Cobriremos rapidamente os elementos-chave deste guia.

Em primeiro lugar, configuramos nossos endereços de contrato inteligentes, rede e chave privada.

const EDITION_ADDRESS = "<your-edition-smart-contract-address>";
const PACK_ADDRESS = "<your-pack-smart-contract-address>";
const network: ChainOrRpc = "optimism-goerli";
const PRIVATE_KEY = process.env.PRIVATE_KEY!;
const lootBoxImageFileName = "lootbox.png";
Enter fullscreen mode Exit fullscreen mode

Usamos estes valores para instanciar o SDK em nome de nossa carteira, e depois nos conectamos à edição e embalamos contratos inteligentes:

// Instancie o SDK com a nossa chave privada na rede
const sdk = ThirdwebSDK.fromPrivateKey(PRIVATE_KEY, network);
const storage = new ThirdwebStorage();
// Conecte-se aos contratos de edição e pacote
const edition = await sdk.getContract(EDITION_ADDRESS, "edition");
const pack = await sdk.getContract(PACK_ADDRESS, "pack");
Enter fullscreen mode Exit fullscreen mode

Uma vez conectado, concedemos ao pacote do contrato inteligente a aprovação para agregar nossos NFTs a partir do contrato de edição:

// Defina a aprovação do contrato de pacote para transferir nossos NFTs de edição (itens)
await edition.setApprovalForAll(PACK_ADDRESS, true);
Enter fullscreen mode Exit fullscreen mode

Em seguida, chamamos a função create em nosso contrato de pacote e especificamos como queremos agrupar nossos tokens em pacotes:

// Aguarde enquanto o pacote é criado
await pack.create({
packMetadata: {
name: "Loot Box",
description: "Abra isso para revelar um item no jogo!",
image: await storage.upload(
readFileSync(${__dirname}/${lootBoxImageFileName})
),
attributes: {
artista: "@GabrielAguiarProd",
},
},
erc1155Rewards: [
// Agrupe 400 NFTs Red Gem:
{
contractAddress: EDITION_ADDRESS,
tokenId: 0,
quantityPerReward: 1,
totalRewards: 400,
},
// Agrupe 100 NFTs Red Gem:
{
contractAddress: EDITION_ADDRESS,
tokenId: 1,
quantityPerReward: 1,
totalRewards: 100,
},
],
// Especificamos 1 recompensa por pacote, e há um total de 400+100 recompensas, então teremos 500 pacotes criados.
recompensasPorPacote: 1,
});
Enter fullscreen mode Exit fullscreen mode

Finalmente, executamos o roteiro e criamos nossos pacotes executando o seguinte comando a partir de nosso terminal:

npx ts-node src/index.ts

Voilá! 🎉 Agora podemos ver no painel de bordo que nossos pacotes foram criados:

Image description

Abrindo os pacotes

Podemos abrir pacotes diretamente da aba Explorer usando a função openPack:

Image description

Mas vamos integrar este contrato na Unidade agora para torná-lo mais interessante!

Recomendamos seguir o guia abaixo para estabelecer-se com nosso Unity SDK antes de continuar:

https://blog.thirdweb.com/guides/get-started-with-thirdwebs-unity-sdk/

Primeiro, importamos Thirdweb em nosso roteiro para que possamos instanciar o SDK:

// Importe a biblioteca Thirdweb
using Thirdweb;
// ... outros imports
public class LootBox : MonoBehaviour
{
private ThirdwebSDK sdk;
csharp
Copy code
void Start() { // Instancie um novo SDK do Thirdweb, conectando à rede "optimism-goerli" sdk = new ThirdwebSDK("optimism-goerli"); animator = GetComponent<Animator>(); }
}
Enter fullscreen mode Exit fullscreen mode

Agora nosso valor sdk é instanciado quando o jogo começa.

Vamos querer que os usuários conectem suas carteiras e mudem para a rede correta sempre que tentarem abrir um pacote. Vamos criar uma função simples para executar e aguardar os dois:

async Task<string> EnsureCorrectWalletState()
{
    string address = await sdk.wallet.Connect();
    await sdk.wallet.SwitchNetwork(420);
    return address;
}
Enter fullscreen mode Exit fullscreen mode

Vamos nos conectar ao nosso contrato pack para que possamos abrir os pacotes:

async Task<Pack> GetPackContract()
{
    await EnsureCorrectWalletState();
    return sdk
        .GetContract("0xd8Bd34726814855fB9cFF58fe5372558e3B411Cb")
        .pack;
}
Enter fullscreen mode Exit fullscreen mode

Finalmente, chame a função Open para abrir um pacote a partir da carteira conectada!

async Task<ERC1155Reward> OpenPack()
{
// Verifique se o usuário está conectado e na rede correta
await EnsureCorrectWalletState();
// Conecte-se ao contrato do pacote
Pack packContract = await GetPackContract();
// Abra 1 quantidade do pacote com ID 0
var result = await packContract.Open("0", "1");
// Retorne o NFT que abrimos do pacote!
return result.erc1155Rewards[0];
}
Enter fullscreen mode Exit fullscreen mode

Quando o usuário clica, nós chamamos a função OpenPack e iniciamos a animação:

se (Input.GetMouseButtonDown(0))
{
var openedPack = await OpenPack();
// ... Inicie agora a animação de abertura do pacote!
}
Enter fullscreen mode Exit fullscreen mode

Finalizando

Pronto! 🎉 Nossos pacotes estão prontos para serem abertos!

Neste guia, realizamos com sucesso:

1 . Criamos NFTs de itens de jogos
2 . Agrupamos eles em um conjunto de loot boxes de NFT
3 . Abrimos esses loot boxes de NFTs dentro de um jogo Unity em C#!

Se você tiver alguma dúvida, acesse nosso servidor do Discord para falar diretamente com nossa equipe.

Este artigo foi escrito por Jarrod Watts e traduzido para o português por Rafael Ojeda

Você pode ler o artigo original em inglês [aqui]Você pode ler o artigo original em inglês aqui

Top comments (0)