
Ahoj! Pokud jste vývojář her a chcete vytvořit hru hostovanou na blockchainu internetových počítačů, máte štěstí.
Vytvořil jsem jednoduchý projekt Unity, který demonstruje integraci peněženky a získávání NFT - jen pro vás, takže nyní můžete začít pracovat na opravdu "zábavných" částech hry, aniž byste se museli starat o to, jak volat prohlížeč Javascript z Unity C#.
Ukázku této integrace peněženky si můžete prohlédnout na:
ti5gm-bqaaa-aaaai-ab7oa-cai.raw.ic0.app
Kód projektu se nachází na adrese:
github.com/tommygames/ic-unity-template

Poznámka: Tento projekt integruje modul npm s názvem respond-unity-webgl, který umožňuje Unity C# komunikovat s prohlížečem Javascript pro integraci Plug Wallet, pokud nepotřebujete integraci peněženky nebo interoperabilitu Javascriptu, neřiďte se tímto průvodcem, protože existují jednodušší způsoby k nasazení jednoduchých her Unity do integrovaných obvodů.
Pokud chcete vidět, jak jsem nastavil projekt od nuly, přejděte do části Vytvoření projektu IC Unity od nuly, pokud chcete pouze stáhnout a nasadit projekt Unity, přejděte do části Deploying IC Unity Project; Chcete-li vidět, jak kód funguje, přečtěte si níže část „Jak to funguje“.
jak to funguje
Integrace Plug Wallet vyžaduje 2 funkce, aby fungovala:
Unity C# odesílá události do JavaScriptu prohlížeče
Prohlížeč Javascript odesílá události do Unity
Pro oba používáme modul npm s názvem respond-unity-webgl, jehož dokumentaci naleznete zde:
npmjs.com/package/react-unity-webgl
Pro první funkci používáme plugin .jslib v Unity k psaní pseudo-Javascriptu (často nazývaného UnityScript), více o něm čtěte zde:
docs.unity3d.com/Manual/webgl-interactingwithbrowserscripting.html
Pokud máte nainstalovaný modul reakce-unity-webgl, mohou tyto zásuvné moduly .jslib odesílat události do Javascriptu prohlížeče React voláním dispatchReactUnityEvent("EventName"), které můžete vidět implementované v souboru PlugUtils.jslib projektu Unity.
Chcete-li volat tyto funkce, musíte je importovat do C#, příklad toho lze vidět ve třídě PlugUtilsInternal v souboru PlugUtils.cs.
Druhou funkci nazýváme unityContext.send("GameObjectName", "FunctionName", jsonData) z javascriptového kódu React, její implementaci můžete vidět ve třídě PlugUtils.js naší aplikace React.
To zavolá zadanou funkci na zadaném GameObject, pro můj příklad mám GameObject nazvaný ReactApi v MainScene a skript obsahuje funkci nazvanou HandleCallback.
Protože chci mít zpětná volání, kdykoli Unity mluví s Javascriptem prohlížeče, ukládám slovník zpětných volání spojených s jejím indexem v souboru ReactApi.cs, takže jakákoli komunikace mezi Unity a React musí procházet přes soubor ReactApi a zpětné volání bude spustí se při vrácení dat JSON.
Po vrácení dat JSON používám Json.NET k deserializaci dat do objektu, který je definován v souboru WalletDataTypes.cs.
Pokud se data JSON úspěšně deserializují, zobrazí je uživatelskému rozhraní a tak vše funguje.
Nasadit projekt IC Unity
1. Stáhněte si soubory projektu z:
github.com/tommygames/ic-unity-template
2. Ujistěte se, že máte nainstalovanou sadu Dfinity Container Smart Contract SDK (v tomto projektu používám verzi 0.9.3):
smartcontracts.org/docs/developers-guide/install-upgrade-remove.html
3. cd do složky v projektu ic_unity_template Unity (který obsahuje projekt dfx).
4. Spusťte npm install a ujistěte se, že jsou všechny moduly uzlů správně nainstalovány, možná budete muset postupovat podle konkrétních pokynů, abyste zajistili správnou instalaci modulu uzlu dab-js, pokyny naleznete zde:
docs.dab.ooo/nft-list/getting-started
5. Spusťte dfx start --background ve složce ic_unity_template, chcete-li spustit místní prostředí IC na pozadí, a spusťte dfx deploy k nasazení kontejneru IC do prostředí místního IC Po dokončení nasazení vám sdělí adresu URL, kde máte přístup k projektu.
6. Chcete-li projekt nasadit do veřejné blockchainové sítě mainnetu, musíte zadat cd do složky ic_unity_template a spustit dfx deploy --network=ic. Po nasazení vám sdělí ID kontejneru kontejneru ic_unity_template_assets, ke kterému máte přístup. přístupem k projektu na následující adrese URL:
https://.raw.ic0.app
POZNÁMKA: Je důležité zahrnout do adresy URL klíčové slovo „raw“, protože soubory Unity jsou velmi velké a lze je poskytovat pouze pomocí tohoto klíčového slova.
Pokud provedete změny ve svém projektu Unity a přestavíte jej, nezapomeňte pojmenovat sestavení unity_build.
Jakmile je sestavení dokončeno, přetáhněte složky Build, TemplateData a StreamingAssets (pokud existují) do složky src/ic_unity_template_assets/assets (soubor index.html můžete ignorovat) a můžete je znovu nasadit do kontejneru.
Děkuji, že jste dočetli až sem, takto lze nasadit ukázkový projekt Unity s integrací response-unity-webgl pro volání mezi Javascriptem a C#, doufám, že se vám čtení líbilo a přeji vám hodně štěstí ve vašem dobrodružství s vývojem her, neváhejte Sledujte mě na Twitteru (@tommyinvests), kde jsem hlavním vývojářem hry Plethora.

Vytvořte projekt IC Unity od začátku
1. Vytvořte nový projekt Unity.
2. Stáhněte a nainstalujte sadu SDK Dfinity container smart contract:
smartcontracts.org/docs/developers-guide/install-upgrade-remove.html
3. dfx je hlavní nástroj příkazového řádku pro spouštění nových projektů Dfinity Automaticky naplní projekt kódem šablony.
smartcontracts.org/docs/developers-guide/cli-reference.html
4. Otevřete příkazový řádek a cd do složky projektu Unity, poté spusťte dfx new project-name-goes-here a vytvořte nový projekt šablony s názvem „project-name-goes-here“, který bude v souboru vašeho projektu Unity Ve složce vytvořte nový projekt dfx.
Poznámka: Projekty dfx nemusíte vytvářet ve složce projektu Unity, můžete je také umístit do samostatné složky.
5. Dále musíte upravit šablonu dfx projektu, aby byla kompatibilní s webovým rámcem React.
6. Použijeme framework React jako obal pro projekt Unity, aby bylo možné posílat zprávy mezi kódem javascriptu React a Unity C#, což umožňuje integraci peněženky a také vám poskytuje možnost integrovat webové komponenty (v Reactu) do budoucnost Flexibilita pro překrytí vaší hry, pokud si to přejete.
7. Postupoval jsem podle tohoto průvodce Dfinity, aby byl můj projekt kompatibilní s Reactem:
smartcontracts.org/docs/developers-guide/tutorials/custom-frontend.html
Poznámka: Nemusíte postupovat podle všech kroků v příručce, stačí následující:
Ve složce projektu spusťte npm install --save reagovat reagovat-dom
Spusťte npm install --save-dev typescript ts-loader ve složce projektu
Otevřete webpack.config.js a nad sekci pluginů přidejte následující kód:

Vytvořte nový soubor s názvem tsconfig.json v kořenovém adresáři vašeho projektu a vložte do něj následující kód:

8. Jakmile je projekt dfx nastaven tak, aby byl kompatibilní s Reactem, musíte vytvořit soubor projektu React. Spustil jsem výchozí projekt React pomocí nástroje příkazového řádku „Create React App“.
reactjs.org/docs/create-a-new-react-app.html
9. Jakmile je projekt React vytvořen, zkopírujte index.html, index.js, index.css, App.js, App.css a jakékoli další relevantní soubory ve složce scr projektu React do souboru srcdfxsrc/project_name_assets/src složka projektu, tam jsou všechny vaše soukromé soubory, také si všimnete, že vedle složky aktiv je složka src, kam směřují všechny vaše veřejné soubory, včetně souborů sestavení Unity.
10. Jakmile zkopírujete soubory React do svého projektu dfx, musíte se ujistit, že jsou pro váš projekt nainstalovány následující moduly npm.
11. Modul reakce-unity-webgl je velmi důležitý, protože nám umožňuje posílat události mezi React a Unity, tyto události umožní Unity interagovat s Javascriptem prohlížeče a připojit se k Plug Wallet, jeho dokumentaci najdete zde:
npmjs.com/package/react-unity-webgl
Můžete jej nainstalovat spuštěním následujícího příkazu ve složce projektu dfx:

Po instalaci upravte svůj soubor App.js podle pokynů v dokumentaci k reakci-unity-webgl Základní implementace App.js vypadá takto:

12. Modul dab-js je knihovna vytvořená společností Psychedelic, aby nám pomohla dotazovat se na jejich databázi NFT, což nám umožní získat všechny NFT aktuálně v peněžence Plug uživatele.
Poznámka: Proces instalace tohoto modulu npm je trochu komplikovaný, před stažením modulu je třeba vytvořit přístupový token Github a přihlásit se, postupujte podle pokynů zde:
docs.dab.ooo/nft-list/getting-started
13. Nakonec se musíte ujistit, že vaše moduly @dfinity/agent, @dfinity/principal a @dfinity/candidnpm používají verzi 0.9.3 nebo nižší, protože modul dab-js aktuálně podporuje pouze tyto kvůli kódování hlavního ID změní verzi nebo nižší, můžete spustit následující příkaz, abyste zajistili tuto verzi:

14. Nyní musíte vytvořit svůj projekt Unity, otevřít Unity a jít do File->Build Settings a přepnout na platformu WebGL.
15. Poté přejděte na Úpravy->Nastavení projektu a nastavte „Formát komprese“ na Zakázáno IC kontejnery aktuálně nepodporují kompresní formáty Gzip nebo Brotli.
16. Nakonec se vraťte do nastavení sestavení a klikněte na tlačítko „Sestavit“ Zadaný název sestavení také změní předponu souboru sestavení, říkejme naší „BestGame“. Jakmile je sestavení dokončeno, přidejte sestavu. TemplateData a StreamingAssets (pokud existují) do složky src/project_name_assets/assets dfx ve vašem projektu (soubor index.html můžete ignorovat), pak se musíte vrátit ke kroku 11 a upravit App.js, abyste získali správná cesta k souboru sestavení, pokud je název našeho sestavení „BestGame“, náš soubor App.js bude vypadat takto:

17. Po dokončení tohoto kroku jste připraveni nahrát svou hru do IC, cd do složky projektu dfx a spustit dfx start --background, který spustí místní prostředí IC na pozadí, a poté spustit nasazení dfx, které přinese vaše Hry IC Unity se nasazují do místního prostředí IC a po nasazení vám sdělí adresu URL, přes kterou můžete ke své hře přistupovat.
18. Pro nasazení vaší IC hry do mainnetové veřejné blockchainové sítě musíte cd do složky projektu dfx a spustit dfx deploy --network=ic Po nasazení vám sdělí ID kontejneru project_name_assets ke hře se dostanete na:
https://.raw.ic0.app
POZNÁMKA: Je důležité zahrnout do adresy URL klíčové slovo „raw“, protože soubory Unity jsou velmi velké a lze je poskytovat pouze pomocí tohoto klíčového slova.
Děkuji, že jste dočetli až sem, takto můžete vytvořit projekt Unity s integrací reagovat-unity-webgl a nasadit jej do kontejneru pro volání mezi Javascriptem a C#, doufám, že se vám čtení líbilo a přeji vám to nejlepší ve vaší hře vývojová dobrodružství Hodně štěstí a neváhejte mě kontaktovat na Twitteru (@tommyinvests), jsem hlavní vývojář hry Plethora.

Obsah IC, na kterém vám záleží
Technologický pokrok |. Informace o projektu |

Sbírejte a sledujte kanál IC Binance
Zůstaňte v obraze s nejnovějšími informacemi
