Photo by Shubham Dhage / Unsplash

How to use NFTs in Unity?

Non-fungible tokens (NFTs) seem to have exploded out. From art and music to games, these digital assets are selling like Dutch tulips. In this article, we look closely into NFTs and blockchain integrations with our Unity project. I hope you find a way how you can use it to pull NFT images off from any smart contract and put them into your game.

What is an NFT?

An NFT is a digital asset that represents real-world objects like music, art, in-game items and videos. They are bought and sold online, frequently with cryptocurrency, and they are generally encoded with the same underlying software as many cryptos. “Essentially, NFTs create digital scarcity,” says Arry Yu, chair of the Washington Technology Industry Association Cascadia Blockchain Council and managing director of Yellow Umbrella Ventures.

Many NFTs, at least in these early days, were digital creations that already exist in some form elsewhere, like iconic NBA video clips or versions of digital art. For example, the famous digital artist Mike Winklemann, better known as “Beeple,” composed a composition of 5,000 daily drawings to create perhaps the most famous NFT today, “EVERYDAYS: The First 5000 Days,” which sold for $ 69.3 million.

How Is an NFT Different from Cryptocurrency?

NFT stands for a non-convertible token that is built using the same type of programming as a cryptocurrency like Bitcoin or Ethereum, but that’s where the similarity ends. Physical money and cryptocurrencies are “interchangeable” meaning they can be traded or exchanged for each other. They also have the same value — one dollar is always worth another dollar; one Bitcoin is always equal to another Bitcoin. The interchangeability of Crypto makes it a trusted way to carry out transactions on the blockchain. The NFTs behave a bit differently.

How Does an NFT Work?

NFT, just like cryptos, are based on the existing blockchain, which is a distributed public ledger that records transactions. Specifically, NFTs are typically held on the Ethereum blockchain, although other blockchains support them as well. An NFT is created, or “minted” from digital objects that represent both tangible and intangible items, including:

  • Art
  • GIFs
  • Videos and sports highlights
  • Collectibles
  • Virtual avatars and video game skins
  • Music

Basically, NFTs are like physical collectibles, only digital. So, instead of hanging an oil painting on the wall, the buyer gets a digital file containing some content. The buyer also receives exclusive property rights. An NFT can only have one owner at a time. Unique NFT data makes it easy to verify their ownership and transfer tokens between owners. The owner or creator may also store certain information there. For example, artists can sign their works by including their signature in the NFT metadata.

What Are NFTs Used For?

Blockchain and NFT technology give artists and content creators a unique opportunity to monetize their products. For example, artists no longer need to rely on galleries or auction houses to sell their art. Instead, the artist can sell it directly to the consumer as an NFT, which also allows him to keep more profits. In addition, artists can program license fees so they will receive a percentage of the sale each time their art is sold to a new owner.

Time for first implementation

As we have already discussed what NFT is, we can move on to the initial implementation. Let’s start our adventure with the use of blockchain from https://chainsafe.io where we can get access to gaming sdk of theirs for building unity games with blockchain integrations. Say hello to a new gaming economy, in-game NFTs, connecting assets to marketplaces, and cryptowallet login.

https://gaming.chainsafe.ioc

Let’s download and install their SDK and start our adventure with SDK. The latest version of the tool can be found at: https://github.com/chainsafe/web3.unity If you’ve successfully downloaded the latest version of the SDK, it’s time to move on to integrating it into Unity.

Fresh Unity project with Chainsafe

Following this, we are going to create a new 3d object a quad in our scene which is going to hold the texture of the nft that we will be loading into our game. Important: You don’t need to load int onto a quad. You can load in into anything, beacause all we are going to be doing is replacing the default materials texture with this. Make sure that the camera can see it :)

Now, we are going to click on the quad and we are just going to add a new script which i am just going to tile “BlockChainInteract”. Now, let’s start working on the code. First, we need two data models. The first one will be used to store metadata from the attribute class, the second one will store NFT metadata from the standard json file. Our data model will look like this:

// Used by metadata class for storing attributes
public class Attributes
{
//The type or name of a given trait
public string trait_type;

//The value associated with the trait_type
public string value;
}
// Used for storing NFT metadata from standard NFT json files
public class Metadata
{
//List storing attributes of the NFT
public List<Attributes> attributes { get; set; }

//Description of the NFT
public string description { get; set; }

//An external_url related to the NFT (often a website)
public string external_url { get; set; }

//image stores the NFTs URI for image NFTs
public string image { get; set; }

//Name of the NFT
public string name { get; set; }
}

Metadata and attributes are part of the standard openc nft documentation as well as standard nft documentation. The most important parameter for as is an image one which stores the URI releated to the actual image stored in blockchain. In addition, the attributes will store the traits and values releated to it, but we are not going to use it. Let’s move into the main script.

We start with four varaibles which define the chain which is polygon, because that’s the chain of the contract will be using in this tutorial. The contract will be associated with which is the project on polygon network. Then, using the ERC721.URI function from our SDK, we can download any data from the blockchain from the indicated network. Here is our code look like:

using Newtonsoft.Json;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
//Interacting with blockchain
public class BlockChainInteract : MonoBehaviour
{
//The chain to interact with, using Polygon here
public string chain = "polygon";

//The network to interact with (mainnet, testnet)
public string network = "mainnet";

//Contract to interact with, contract below
public string contract = "0xa5f1ea7df861952863df2e8d1312f7305dabf215";

//Token ID to pull from contract
public string tokenId = "54485";

//Used for storing metadata
Metadata metadata;
private void Start()
{
//Starts async function to get the NFT image
GetNFTImage();
}
async private void GetNFTImage()
{
//Interacts with the Blockchain to find the URI related to that specific token
string URI = await ERC721.URI(chain, network, contract, tokenId);
//Perform webrequest to get JSON file from URI
using (UnityWebRequest webRequest = UnityWebRequest.Get(URI))
{
//Sends webrequest
await webRequest.SendWebRequest();
//Gets text from webrequest
string metadataString = webRequest.downloadHandler.text;
//Converts the metadata string to the Metadata object
metadata = JsonConvert.DeserializeObject<Metadata>(metadataString);
}
//Performs another web request to collect the image related to the NFT
using (UnityWebRequest webRequest = UnityWebRequestTexture.GetTexture(metadata.image))
{
//Sends webrequest
await webRequest.SendWebRequest();
//Gets the image from the web request and stores it as a texture
Texture texture = DownloadHandlerTexture.GetContent(webRequest);
//Sets the objects main render material to the texture
GetComponent<MeshRenderer>().material.mainTexture = texture;
}

}
}

I hope you liked this simple script and you will use the possibilities offered by blockchain in your projects. Remember that you can download the source code is here.

To help us create more free stuff, consider leaving a donation through Patreon where you can vote for the next asset pack and get access to future packs & articles earlier. Sharing knowledge is our passion. Unfortunately, keeping a team of professionals costs a lot that’s why we are constantly taking on new opportunities.

​We’ll be publishing any news on the following outlets:

Thanks for reading!

--

--

--

Free #tutorials, #courses, and guided pathways for mastering game development in #Unity with supportive community who share knowledge about creating own #games.

Love podcasts or audiobooks? Learn on the go with our new app.

Recommended from Medium

VerdeX’s User First Design Philosophy

How to Create a Cryptocurrency Portfolio: Beginner’s Guide

Paribus: Long-Term Value

Decoding the enigma of Bitcoin Mining — Part I : Mechanism

$EWAR IDO and Community Pools are Open on Red Kite! — Let’s Join NOW!

Liquidity Lock Extended

Equilibrium Guide

A brief history of the adoption of the rules of the road

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
University of Games

University of Games

Free #tutorials, #courses, and guided pathways for mastering game development in #Unity with supportive community who share knowledge about creating own #games.

More from Medium

Your first Augmented Reality app with Vuforia and Unity Engine

Get Started Your First Mobile Top Down Shooting Game Development With Unity Visual Scripting Part 9

Animating Sprites in Unity

2D Mobile Game: Player Health System