Как создать игру BEEG Production на блокчейне с помощью Unity
2025-07-14
Создание блокчейн-основанногоигра, похожая на BEEGс Unity - это захватывающий способ погрузиться в GameFi, объединяя игры с децентрализованными финансами. Этот гид проведет вас через создание игры на блокчейне, вдохновленной демо-версией игры "Камень, ножницы, бумага", с использованием SDK web3.unity от ChainSafe и Проверяемой Случайной Функции (VRF) от Chainlink для обеспечения честности.
Мы адаптируем процесс для игры в стиле BEEG, поддерживаемой монетой BEEG, сохраняя его прозрачным и увлекательным. Давайте погрузимся в это!
Хотите торговать криптовалютой, пока читаете наши последние новости? Перейдите по адресуБитру Эи исследуйте свои возможности сегодня!
Что вам нужно, чтобы начать
Перед тем, как вы начнете, убедитесь, что у вас есть:
Юнити: Установите последнюю версию Юнити для полной совместимости.
MetaMask Wallet: Настройка MetaMask для блокчейн-транзакций с монетой BEEG.Тестовая сеть AVAX: Получите тестовые AVAX на тестовой сети Avalanche Fuji для тестирования.
web3.unity SDK: Следуйте документации ChainSafe, чтобы скачать SDK, создать проект на их панели управления и добавить ваш ID проекта в настройки сети Unity.
С этими инструментами вы готовы создать BEEG-игру на блокчейне!
Настройка вашего проекта Unity
Импорт игровых ресурсов
Выберите или создайте изображения для основных элементов вашей игры, таких какПроект BEEGперсонажей или предметов. Поместите их в папку "Images" в Unity и преобразуйте в 2D спрайты.
Создайте игровой холст
Добавьте Canvas в вашу сцену Unity.
Вставьте компоненты изображения для каждого элемента игры (например, три варианта, вдохновленные BEEG).
Добавьте компонент кнопки к каждому изображению, чтобы сделать их интерактивными.
Включите элемент текста в верхней части холста для отображения результатов игры.
Создайте GameManager
Добавьте пустой GameObject с именем "GameManager" в верхней части вашей иерархии.
Прикрепите скрипт менеджера для обработки игровой логики и взаимодействий с блокчейном BEEG coin.
```csharp
Класс Менеджер
используя System.Collections;
используя System.Collections.Generic;
используя UnityEngine;
используя UnityEngine.UI;
используя TMPro;
общественный класс Manager : MonoBehaviour
{
// Элемент текста для отображения результата игры.
общественный TMP_Text Result;
// Изображение для визуального отображения выбора противника.
общественное изображение OpChoice;
// Массив для хранения выборов: Камень, Ножницы, Бумага.
общественная строка[] Choices;
// Спрайты для Камня, Ножниц и Бумаги для визуального представления выборов.
общественный спрайт Rock, Paper, Scissors;
// Вызывается, когда игрок нажимает кнопку, соответствующую его выбору.
общественная пустота Play(строка myChoice)
{
// Установите выбор противника так, чтобы он всегда побеждал выбор пользователя.
строка opponentChoice = GetWinningChoice(myChoice);
// Обновите спрайт выбора противника и текст результата.
UpdateOpponentChoice(opponentChoice);
UpdateResult(myChoice, opponentChoice);
}
// Возвращает выбор, который победит выбор пользователя.
частная строка GetWinningChoice(строка myChoice)
{
переключатель (myChoice)
{
случай "Rock":
возврат "Paper"; // Бумага побеждает Камень
случай "Paper":
возврат "Scissors"; // Ножницы побеждают Бумагу
случай "Scissors":
возврат "Rock"; // Камень побеждает Ножницы
по умолчанию:
возврат "Rock"; // Выбор по умолчанию
}
}
// Обновляет отображаемый выбор противника.
частная пустота UpdateOpponentChoice(строка choice)
{
переключатель (choice)
{
случай "Rock":
OpChoice.sprite = Rock;
перерыв;
случай "Paper":
OpChoice.sprite = Paper;
перерыв;
случай "Scissors":
OpChoice.sprite = Scissors;
перерыв;
}
}
// Обновляет результат, чтобы всегда отображать "Вы проиграли!"
частная пустота UpdateResult(строка myChoice, строка opponentChoice)
{
Result.text = "Вы проиграли!";
}
}
```
В Инспекторе перетащите вашэлементы игры(изображения, кнопки) в соответствующие поля в скрипте GameManager.
Для функции OnClick каждой кнопки свяжите GameManager и назначьте действия (например, "Играть" с выбором, таким как "Вариант 1", "Вариант 2" и т.д.).
Сборка для WebGL
Перейдите в Настройки сборки, переключитесь на WebGL и создайте свою игру. У вас будет базовая игра, но без мер справедливости результаты могут быть предсказуемыми, что приведет к потере доверия у игроков.
Обеспечение справедливости с помощью Chainlink VRF
Чтобы сделать вашу игру BEEG надежной, используйте Chainlink VRF для защищенных от подделки случайных результатов, что обеспечит доверие игроков к игре.BEEG монета.
Установите Chainlink VRF
Посетите панель управления Chainlink и создайте подписку для финансирования вызовов VRF.
Добавьте 0,1 AVAX к вашей подписке.
Обратите внимание на ваш идентификатор подписки для развертывания смарт-контракта.
Развернуть смарт-контракт
Перейдите в Remix, чтобы развернуть ваш контракт.
Используйте скрипт для запроса случайного числа (0–2) у Chainlink VRF для выбора соперника.
```solidity
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;
import {VRFConsumerBaseV2Plus} from "@chainlink/contracts@1.2.0/src/v0.8/vrf/dev/VRFConsumerBaseV2Plus.sol";
import {VRFV2PlusClient} from "@chainlink/contracts@1.2.0/src/v0.8/vrf/dev/libraries/VRFV2PlusClient.sol";
contract SimpleRandomNumber is VRFConsumerBaseV2Plus {
event RequestSent(uint256 requestId);
event RandomNumberGenerated(uint256 requestId, uint256 randomNumber);
struct RequestStatus {
bool fulfilled; // Выполнен ли запрос
uint256 randomResult; // Случайное число от 0 до 2
}
mapping(uint256 => RequestStatus) public s_requests; // Сопоставление requestId со статусом запроса
uint256 public s_subscriptionId;
uint256 public lastRequestId;
bytes32 public keyHash =
0xc799bd1e3bd4d1a41cd4968997a4e03dfd2a3c7c04b695881138580163f42887;
uint32 public callbackGasLimit = 100000;
uint16 public requestConfirmations = 3;
uint32 public numWords = 1; // Запрос одного случайного числа
/**
* ЗАШИФРОВАНО ДЛЯ FUJI AVALANCHE
* КООРДИНАТОР: 0x5C210eF41CD1a72de73bF76eC39637bB0d3d7BEE
*/
constructor(
uint256 subscriptionId
) VRFConsumerBaseV2Plus(0x5C210eF41CD1a72de73bF76eC39637bB0d3d7BEE) {
s_subscriptionId = subscriptionId;
}
/**
* @notice Запросить случайное число, используя ETH Sepolia в качестве оплаты.
*/
function requestRandomNumber() external returns (uint256 requestId) {
// Всегда используйте ETH Sepolia для оплаты
requestId = s_vrfCoordinator.requestRandomWords(
VRFV2PlusClient.RandomWordsRequest({
keyHash: keyHash,
subId: s_subscriptionId,
requestConfirmations: requestConfirmations,
callbackGasLimit: callbackGasLimit,
numWords: numWords,
extraArgs: VRFV2PlusClient._argsToBytes(
VRFV2PlusClient.ExtraArgsV1({
nativePayment: true // Всегда используйте нативный токен (ETH Sepolia)
})
)
})
);
s_requests[requestId] = RequestStatus({
fulfilled: false,
randomResult: 0 // Инициализация 0 до выполнения
});
lastRequestId = requestId;
emit RequestSent(requestId);
return requestId;
}
/**
* @notice Функция обратного вызова, вызываемая Chainlink VRF для выполнения запроса случайного числа.
* @param _requestId Идентификатор запроса на случайность
* @param _randomWords Массив сгенерированных случайных слов
*/
function fulfillRandomWords(
uint256 _requestId,
uint256[] calldata _randomWords
) internal override {
require(s_requests[_requestId].fulfilled == false, "Запрос уже выполнен");
// Вычисляем случайное число от 0 до 2
uint256 randomResult = _randomWords[0] % 3;
// Обновляем статус запроса
s_requests[_requestId].fulfilled = true;
s_requests[_requestId].randomResult = randomResult;
emit RandomNumberGenerated(_requestId, randomResult);
}
/**
* @notice Получить статус и результат последнего запроса случайного числа.
* @param _requestId Идентификатор запроса на случайность
*/
function getRandomNumber(
uint256 _requestId
) external view returns (bool fulfilled, uint256 randomNumber) {
RequestStatus memory request = s_requests[_requestId];
require(request.fulfilled, "Запрос еще не выполнен");
return (request.fulfilled, request.randomResult);
}
}
```
Скомпилируйте код, выберите Injected Provider (MetaMask), введите ваш ID подписки и разверните.
Скопируйте адрес контракта из Remix и добавьте его как потребителя в панели управления Chainlink.
Тест, запрашивая случайное число. Aуспешная транзакцияозначает, что VRF готово!
Стоит ли все еще анализировать BEEG? Рассматривая его продукты
Интеграция VRF в Unity
Обновите свой скрипт менеджера, чтобы использовать VRF:
Добавьте необходимые пространства имен для интеграции блокчейна.
```russian
используя ChainSafe.Gaming.UnityPackage;
используя ChainSafe.Gaming.UnityPackage.Connection;
используя ChainSafe.Gaming.Web3;
используя ChainSafe.Gaming.Evm.Contracts.Custom;
используя System.Numerics;
```
Замените локальную генерацию случайных чисел на вызовы VRF.
```csharp
[SerializeField] private string ContractAddress;
private vrf _vrf;
private bool _randomNumberReady = false;
private BigInteger _randomNumber;
private void Awake()
{
Web3Unity.Web3Initialized += Web3UnityOnWeb3Initialized;
}
private async void Web3UnityOnWeb3Initialized((Web3 web3, bool isLightWeight) obj)
{
// Инициализация контракта VRF.
_vrf = await obj.web3.ContractBuilder.Build(ContractAddress);
// Подписка на событие генерации случайного числа.
_vrf.OnRandomNumberGenerated += OnRandomNumberGenerated;
}
private void OnDestroy()
{
Web3Unity.Web3Initialized -= Web3UnityOnWeb3Initialized;
// Отписка от события.
if (_vrf != null)
{
_vrf.OnRandomNumberGenerated -= OnRandomNumberGenerated;
}
}
```
Вставьте адрес вашего контракта в компонент адреса контракта Unity.
Добавьте адаптер службы событий к объекту Web3Unity и включите принудительное опрашивание событий для ответов VRF.
Теперь выборы игроков запускают запросы VRF, обеспечивая справедливые результаты для игрового процесса на основе монеты BEEG.
Соединение кошельков игроков
Кошельки позволяют игрокам безопасно взаимодействовать с монетой BEEG на блокчейне.
Настройка интеграции кошелька
Выберите объект Web3Unity в иерархии Unity.
В Инспекторе перейдите в Обработчик соединений и добавьте MetaMask в качестве провайдера.
Удалите ненужные компоненты, такие как SDKCallSamples и Scroller.
Тест взаимодействия с кошельком
Запустите игру и подключите ваш кошелек MetaMask к BEEG coin.
Выберите вариант и подтвердите транзакцию.
Проверьте консоль разработчика браузера, чтобы подтвердить запрос VRF.
Подождите 20–30 секунд, чтобы транзакция обработалась, и посмотрите выбор соперника.
Для прозрачности вы можете:
Отображать детали транзакции в игре.
Ссылка на контракт на блокчейне, таком как Snowtraceдля игроковдля подтверждения транзакций BEEG coin.
Читать также:Как преследовать свои большие торговые мечты: Полное руководство
Почему блокчейн управляет BEEG
Использование блокчейна, как показано в примере "Камень, Ножницы, Бумага", гарантирует, что ваша игра BEEG будет честной и прозрачной. Chainlink VRF и записи в блокчейне создают доверие, позволяя игрокам уверенно использовать монету BEEG в конкурентной или экономической игре, что является основной особенностью GameFi.
Заключение
Создание игры BEEG на блокчейне с использованием Unity — это отличный способ исследовать GameFi с помощью монеты BEEG. Настроив Unity, интегрировав Chainlink VRF и подключив кошельки, вы создаете честную, увлекательную игру на блокчейне. Демонстрация "Камень, Ножницы, Бумага" показывает, как обеспечить доверие, что вы можете адаптировать для уникального стиля BEEG. Начните экспериментировать с веб3.unity SDK и воплотите в жизнь свою игру, основанную на монете BEEG!
FAQ
Как добавить Chainlink VRF в свою игру на Unity?
Создайте подписку на Chainlink, разверните свой смарт-контракт через Remix с логикой VRF, а затем вставьте адрес контракта в Unity и включите опрос событий.
Чтобы подключить MetaMask в Unity, вам понадобятся следующие вещи: 1. **Unity**: Убедитесь, что у вас установлена последняя версия Unity. 2. **WebGL сборка**: Чтобы интегрировать MetaMask, вам нужно создать проект в Unity с поддержкой WebGL. 3. **JavaScript библиотека**: Вам нужно будет использовать JavaScript библиотеку для взаимодействия с MetaMask, например, Web3.js или Ethers.js. 4. **Ethereum узел**: Убедитесь, что у вас есть доступ к Ethereum узлу (например, Infura или Alchemy), чтобы взаимодействовать с сетью Ethereum. 5. **HTML и JavaScript код**: Вам потребуется написать HTML и JavaScript код, который будет работать с вашим Unity проектом и MetaMask для управления кошельком и транзакциями. Следуйте этим шагам и настройте интеграцию MetaMask в вашем Unity проекте.
Добавьте MetaMask в обработчик соединений объекта Web3Unity, удалите неиспользуемые компоненты и протестируйте ссылку на кошелек в игровом режиме.
Как мне задействовать случайность для выбора противника?
Замените локальный генератор случайных чисел (RNG) в вашем менеджер-скрипте на запрос к VRF из вашего развернутого контракта — результаты возвращаются в цепочку для полной прозрачности.
Можно ли мне протестировать взаимодействие с монетой BEEG без трат реальных AVAX?
Да! Используйте тестовую сеть Avalanche Fuji, получите тестовые AVAX и финансируйте вашу подписку на Chainlink VRF для тестирования без газа.
Чтобы проверить, работает ли VRF в вашей сборке Unity, выполните следующие шаги: 1. Убедитесь, что у вас установлены все необходимые пакеты и плагины для работы с VRF, и что они правильно настроены в вашем проекте. 2. Откройте вашу сборку в Unity и запустите игру в режиме предварительного просмотра или на целевом устройстве. 3. Проверьте вывод в консоли на наличие ошибок или предупреждений, которые могут указывать на проблемы с VRF. 4. Используйте отладочные инструменты, чтобы проверить, правильно ли работают функции VRF. Например, вы можете добавить логи для проверки состояния VRF и его взаимодействия с другими компонентами вашего проекта. 5. Если у вас есть доступ к устройству, используемому для тестирования, проверьте, правильно ли отображается информация о VRF на экране. 6. Наконец, протестируйте все функции, зависящие от VRF, чтобы убедиться, что они работают должным образом. Следуя этим шагам, вы сможете убедиться, что VRF работает в вашей сборке Unity.
Подключите MetaMask, выберите опцию, затем проверьте консоль разработчика или Snowtrace для просмотра журналов транзакций VRF и подтвержденных ходов противника.
Официальный сайт Bitrue:
Зарегистрироваться: https://www.bitrue.com/user/register
Отказ от ответственности: Мнения, высказанные в статье, являются исключительной собственностью автора и не отражают мнения этой платформы. Эта платформа и её аффилированные лица отказываются от какой-либо ответственности за точность или уместность предоставленной информации. Она предназначена только для информационных целей и не является финансовым или инвестиционным советом.
Disclaimer: De inhoud van dit artikel vormt geen financieel of investeringsadvies.
