Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
0fe030d
started unity restructure for wallet separation
andygruening Nov 13, 2025
d2ee92e
Merge 0fe030df802e5dc8b3000ec0cd7591773bb2d1f1 into 516bfb458aac0630f…
andygruening Nov 13, 2025
472f20d
chore(i18n): update translations [en]
github-actions[bot] Nov 13, 2025
51e54ce
started unreal wallet separation
andygruening Nov 13, 2025
3616e87
further unity/unreal restructure
andygruening Nov 13, 2025
ac6e611
Merge 3616e874e914e6287838d8f98c899b99249834ac into 516bfb458aac0630f…
andygruening Nov 13, 2025
f07b2f2
chore(i18n): update translations [en]
github-actions[bot] Nov 13, 2025
67dcc0d
more unity/unreal restructure
andygruening Nov 17, 2025
a996d58
Merge 67dcc0d958b12dab4571953a022b78b887800966 into 516bfb458aac0630f…
andygruening Nov 17, 2025
1409c0e
chore(i18n): update translations [en]
github-actions[bot] Nov 17, 2025
74c4e44
added new unity/unreal boilerplate images
andygruening Nov 18, 2025
f6b3593
Merge remote-tracking branch 'origin/game-sdks/wallet-separation' int…
andygruening Nov 18, 2025
0100a16
latest unity/unreal updates
andygruening Nov 20, 2025
b0a79cb
Merge 0100a164abc741c6b87128749ebe4074a16c8b5f into 2c234ed324afcbaf6…
andygruening Nov 20, 2025
fdd7685
chore(i18n): update translations [en]
github-actions[bot] Nov 20, 2025
a1f4fa4
added unreal warning for different wallet class names between v2/v3
andygruening Nov 20, 2025
6bfa5f8
Merge remote-tracking branch 'origin/game-sdks/wallet-separation' int…
andygruening Nov 20, 2025
0025a2f
new unreal ecosystem blockchain interaction structure
andygruening Nov 20, 2025
6335242
removed "Universal" as a section in Unitys bootstrap docs
andygruening Nov 20, 2025
b4a3a6d
fixed broken links
andygruening Nov 20, 2025
e4df598
Merge b4a3a6dc57da4d2a9706f6b6de0789ca7fe1a553 into 2c234ed324afcbaf6…
andygruening Nov 20, 2025
3be6eec
chore(i18n): update translations [en]
github-actions[bot] Nov 20, 2025
3be5661
fixed broken links
andygruening Nov 20, 2025
dd92cf4
Merge remote-tracking branch 'origin/game-sdks/wallet-separation' int…
andygruening Nov 20, 2025
89c4cc2
Merge dd92cf4c47d819d09c960384aa0be5a0491d2212 into 2c234ed324afcbaf6…
andygruening Nov 20, 2025
9503331
chore(i18n): update translations [en]
github-actions[bot] Nov 20, 2025
ef9c993
fixed broken links
andygruening Nov 20, 2025
3bc51cc
Merge remote-tracking branch 'origin/game-sdks/wallet-separation' int…
andygruening Nov 20, 2025
692995a
Merge 3bc51ccf8fa57f9dd056a1297d4fed67d9d2b137 into 2c234ed324afcbaf6…
andygruening Nov 20, 2025
8d8c365
chore(i18n): update translations [en]
github-actions[bot] Nov 20, 2025
fc51b12
fixed broken links
andygruening Nov 20, 2025
9eb6f6c
Merge remote-tracking branch 'origin/game-sdks/wallet-separation' int…
andygruening Nov 20, 2025
c212424
Merge 9eb6f6c9999b9dc92ed7ffa3d8551f5b5df62a9c into 2c234ed324afcbaf6…
andygruening Nov 20, 2025
ea790fb
chore(i18n): update translations [en]
github-actions[bot] Nov 20, 2025
49e2fab
fixed broken links
andygruening Nov 20, 2025
3620995
Merge remote-tracking branch 'origin/game-sdks/wallet-separation' int…
andygruening Nov 20, 2025
cf104d5
Merge 36209951db0e4afabc41659f6fa540c590f14808 into 2c234ed324afcbaf6…
andygruening Nov 20, 2025
362fce8
chore(i18n): update translations [en]
github-actions[bot] Nov 20, 2025
2f8f10f
Merge branch 'master' into game-sdks/wallet-separation
andygruening Dec 4, 2025
1b90eaf
Auto-update guide cards metadata [skip ci]
github-actions[bot] Dec 4, 2025
ef2a14d
fixed session recovery from previous master merge
andygruening Dec 4, 2025
a8c0808
Merge remote-tracking branch 'origin/game-sdks/wallet-separation' int…
andygruening Dec 4, 2025
715735d
Merge a8c08083ca4caa448e884a5a9b17343e68d9f38c into 211c9d81d069f9c19…
andygruening Dec 4, 2025
9c3a94a
chore(i18n): update translations [en]
github-actions[bot] Dec 4, 2025
0de916e
added info for unity embedded wallet boilerplates
andygruening Dec 4, 2025
47cc1d4
added unreal migration docs
andygruening Dec 11, 2025
084cd80
Merge 47cc1d4a0b9e1ae4053450d4e3d5c44d9d8bbe98 into fa862c46c2d92a744…
andygruening Dec 11, 2025
b624775
chore(i18n): update translations [en]
github-actions[bot] Dec 11, 2025
b9ebe18
Merge branch 'master' into game-sdks/wallet-separation
andygruening Dec 11, 2025
8de392d
latest unreal fixes
andygruening Dec 11, 2025
2e29f17
Merge 8de392db5078d41b98e0228c0d189694f1d18682 into 27c6443ca41571c63…
andygruening Dec 11, 2025
73cb0aa
chore(i18n): update translations [en]
github-actions[bot] Dec 11, 2025
38763c0
some changes to re-run the failed test
andygruening Dec 11, 2025
771179d
fixed broken unreal migration link
andygruening Dec 11, 2025
f3004f9
Merge 771179dbfc5da94813bb6814e87b9a795b3613c6 into 27c6443ca41571c63…
andygruening Dec 11, 2025
88d1cfb
chore(i18n): update translations [en]
github-actions[bot] Dec 11, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
161 changes: 87 additions & 74 deletions docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -444,60 +444,52 @@
"group": "Unity",
"pages": [
"sdk/unity/overview",
"sdk/unity/quickstart",
"sdk/unity/installation",
"sdk/unity/setup",
"sdk/unity/bootstrap_game",
"sdk/unity/bootstrap",
{
"group": "Ecosystem Wallet",
"pages": [
"sdk/unity/ecosystem-wallet/setup",
"sdk/unity/ecosystem-wallet/authentication",
"sdk/unity/ecosystem-wallet/manage-sessions",
"sdk/unity/ecosystem-wallet/permissions",
"sdk/unity/ecosystem-wallet/blockchain"
]
},
{
"group": "Onboard",
"group": "Wallets",
"pages": [
{
"group": "Authentication",
"group": "Ecosystem Wallet",
"pages": [
"sdk/unity/onboard/authentication/intro",
"sdk/unity/onboard/authentication/email",
"sdk/unity/onboard/authentication/oidc",
"sdk/unity/onboard/authentication/playfab",
"sdk/unity/onboard/authentication/guest",
"sdk/unity/onboard/authentication/federated-accounts"
"sdk/unity/wallets/ecosystem-wallet/setup",
"sdk/unity/wallets/ecosystem-wallet/authentication",
"sdk/unity/wallets/ecosystem-wallet/manage-sessions",
"sdk/unity/wallets/ecosystem-wallet/permissions",
"sdk/unity/wallets/ecosystem-wallet/blockchain-interactions"
]
},
"sdk/unity/onboard/recovering-sessions",
"sdk/unity/onboard/session-management",
"sdk/unity/onboard/connecting-external-wallets"
]
},
{
"group": "Power",
"pages": [
"sdk/unity/power/read-from-blockchain",
"sdk/unity/power/write-to-blockchain",
"sdk/unity/power/sign-messages",
"sdk/unity/power/deploy-contracts",
"sdk/unity/power/contract-events",
{
"group": "Advanced Blockchain Interactions",
"group": "Embedded Wallet",
"pages": [
"sdk/unity/power/advanced/introduction",
"sdk/unity/power/advanced/wallets",
"sdk/unity/power/advanced/clients",
"sdk/unity/power/advanced/transfers",
"sdk/unity/power/advanced/contracts",
"sdk/unity/power/advanced/tokens"
"sdk/unity/wallets/embedded-wallet/setup",
{
"group": "Authentication",
"pages": [
"sdk/unity/wallets/embedded-wallet/onboard/authentication/intro",
"sdk/unity/wallets/embedded-wallet/onboard/authentication/email",
"sdk/unity/wallets/embedded-wallet/onboard/authentication/oidc",
"sdk/unity/wallets/embedded-wallet/onboard/authentication/playfab",
"sdk/unity/wallets/embedded-wallet/onboard/authentication/guest",
"sdk/unity/wallets/embedded-wallet/onboard/authentication/federated-accounts"
]
},
"sdk/unity/wallets/embedded-wallet/session-management",
"sdk/unity/wallets/embedded-wallet/recovering-sessions",
"sdk/unity/wallets/embedded-wallet/connecting-external-wallets",
"sdk/unity/wallets/embedded-wallet/blockchain-interactions",
"sdk/unity/wallets/embedded-wallet/sign-messages"
]
}
]
},
{
"group": "Indexer",
"pages": [
"sdk/unity/indexer/read-from-blockchain",
"sdk/unity/indexer/contract-events"
]
},
{
"group": "Monetization",
"pages": [
Expand Down Expand Up @@ -532,51 +524,70 @@
"sdk/unity/monetization/onboard-user-funds"
]
},
"sdk/unity/sidekick",
"sdk/unity/v2-to-v3-upgrade-guide"
{
"group": "Advanced",
"pages": [
"sdk/unity/advanced/recovering-sessions",
"sdk/unity/advanced/deploy-contracts",
"sdk/unity/advanced/introduction",
"sdk/unity/advanced/wallets",
"sdk/unity/advanced/clients",
"sdk/unity/advanced/transfers",
"sdk/unity/advanced/contracts",
"sdk/unity/advanced/tokens"
]
}
]
},
{
"group": "Unreal",
"pages": [
"sdk/unreal/overview",
"sdk/unreal/installation",
"sdk/unreal/getting_started",
"sdk/unreal/bootstrap_game",
"sdk/unreal/migration",
"sdk/unreal/bootstrap",
{
"group": "Guides",
"group": "Wallets",
"pages": [
"sdk/unreal/guides/social-signin-guide",
"sdk/unreal/guides/epic-auth-guide",
"sdk/unreal/guides/marketplace-guide",
"sdk/unreal/guides/swaps-guide"
]
},
{
"group": "Ecosystem Wallet",
"pages": [
"sdk/unreal/ecosystem-wallet/setup",
"sdk/unreal/ecosystem-wallet/authentication",
"sdk/unreal/ecosystem-wallet/permissions",
"sdk/unreal/ecosystem-wallet/manage-sessions",
"sdk/unreal/ecosystem-wallet/blockchain"
]
},
{
"group": "Onboarding",
"pages": [
"sdk/unreal/onboarding/authentication",
"sdk/unreal/onboarding/manage_sessions",
"sdk/unreal/onboarding/wallet_linking"
{
"group": "Ecosystem Wallet",
"pages": [
"sdk/unreal/wallets/ecosystem-wallet/setup",
"sdk/unreal/wallets/ecosystem-wallet/authentication",
"sdk/unreal/wallets/ecosystem-wallet/permissions",
"sdk/unreal/wallets/ecosystem-wallet/manage-sessions",
"sdk/unreal/wallets/ecosystem-wallet/blockchain-interactions"
]
},
{
"group": "Embedded Wallet",
"pages": [
"sdk/unreal/wallets/embedded-wallet/setup",
"sdk/unreal/wallets/embedded-wallet/blockchain-interactions",
{
"group": "Guides",
"pages": [
"sdk/unreal/wallets/embedded-wallet/guides/social-signin-guide",
"sdk/unreal/wallets/embedded-wallet/guides/epic-auth-guide",
"sdk/unreal/wallets/embedded-wallet/guides/marketplace-guide",
"sdk/unreal/wallets/embedded-wallet/guides/swaps-guide"
]
},
{
"group": "Onboarding",
"pages": [
"sdk/unreal/wallets/embedded-wallet/onboarding/authentication",
"sdk/unreal/wallets/embedded-wallet/onboarding/manage_sessions",
"sdk/unreal/wallets/embedded-wallet/onboarding/wallet_linking"
]
}
]
}
]
},
{
"group": "Power",
"group": "Indexer",
"pages": [
"sdk/unreal/power/write-to-blockchain",
"sdk/unreal/power/read-from-blockchain",
"sdk/unreal/power/smart-contracts"
"sdk/unreal/indexer/read-from-blockchain"
]
},
{
Expand All @@ -591,9 +602,11 @@
{
"group": "Advanced",
"pages": [
"sdk/unreal/advanced/smart-contracts",
"sdk/unreal/advanced/utilities",
"sdk/unreal/advanced/advanced",
"sdk/unreal/advanced/platforms"
"sdk/unreal/advanced/platforms",
"sdk/unreal/advanced/migration"
]
}
]
Expand Down
48 changes: 48 additions & 0 deletions es/guides/building-transaction-heavy-games-with-unity.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
---
title: Creando juegos con muchas transacciones en Unity
description: Algunos juegos guardan el estado del juego con frecuencia. Cuando se trabaja con blockchain, esto puede ser costoso y generar mucha latencia. Esta guía aborda cómo superar estas limitaciones sin afectar la experiencia del usuario final ni incrementar innecesariamente sus gastos operativos.
sidebarTitle: Creando juegos con muchas transacciones en Unity
---

## Introducción
A diferencia de otras bases de datos, cada escritura en una blockchain (transacción) tiene un costo en forma de [comisiones de gas](https://ethereum.org/en/developers/docs/gas/). Al crear juegos blockchain/web3, es importante considerar estas comisiones. Aunque [el patrocinio de gas de Sequence](/solutions/builder/gas-sponsorship) simplifica gran parte de la complejidad para sus usuarios finales, como desarrollador de juegos aún debe tener en cuenta algunos aspectos relacionados con las comisiones de gas.

<Tip>
Al crear su juego, debe considerar la **_frecuencia_** con la que envía transacciones a la blockchain para mantener los costos de ejecución al mínimo.
</Tip>

Una complejidad adicional de trabajar con blockchain, que no existe en todos los sistemas de almacenamiento de datos, es que escribir en la base de datos blockchain (es decir, hacer una transacción) es una operación asíncrona y no instantánea que requiere conexión de red.

<Warning>
Las transacciones pueden fallar por varias razones: sin internet, fondos insuficientes, etc.
</Warning>

Primero, debe considerar qué propiedades tokenizables (por ejemplo, objetos, potenciadores, desbloqueos, etc.) deberían tokenizarse en la blockchain.

Luego, piense en los "tipos" de transacciones que su juego realizará. Probablemente pueda agrupar las transacciones en diferentes categorías. Por ejemplo, algunas de estas categorías pueden incluir: recogidas (como recolectar monedas), creación, intercambio, venta, compra, etc.

Una vez que haya categorizado cada una de sus transacciones, considere las expectativas de sus usuarios finales sobre esas transacciones, así como sus propias expectativas como desarrollador. ¿Cuánta demora es aceptable desde la perspectiva del usuario para que una transacción se procese? ¿Puede asumir que una transacción tendrá éxito para dar retroalimentación instantánea al usuario y, si es así, puede recuperarse en caso de que una transacción falle sin afectar negativamente al jugador o a su negocio?

El autor de esta guía suele clasificar las transacciones como de alto valor o bajo valor.

**Las transacciones de alto valor** normalmente requieren confirmación antes de brindar retroalimentación al usuario final. Las transacciones pueden fallar por varias razones (sin internet, gas insuficiente, supuestos inválidos, etc.). Si asumimos que una transacción de alto valor será exitosa y damos retroalimentación inmediata al usuario, pero luego la transacción falla, no podremos recuperarnos sin afectar negativamente al usuario o a nuestro negocio. Considere, por ejemplo, una tienda dentro del juego. Si la transacción de "comprar espada" de un usuario falla, tendríamos que revocar la espada de su cuenta (afectando la experiencia del jugador) o perder el ingreso de la venta (afectando el resultado financiero). Por suerte, la mayoría de las transacciones de alto valor coinciden con actividades donde los usuarios ya están acostumbrados a esperar un poco en juegos tradicionales (no blockchain), como tiendas, creación de objetos, mejoras, etc.

**Las transacciones de bajo valor** pueden, y a menudo deberían, brindar retroalimentación inmediata al usuario. No es necesario esperar la confirmación de la transacción antes de mostrar la retroalimentación en el juego. Si la transacción falla, normalmente podemos recuperarnos fácilmente sin afectar la experiencia del jugador ni el negocio. Los jugadores suelen estar acostumbrados a recibir retroalimentación instantánea para estas acciones en juegos tradicionales. Por ejemplo: cuando un usuario recoge una moneda en un juego de plataformas (o similar), espera ver reflejada la moneda recolectada en la interfaz de inmediato. Es poco probable que el jugador recuerde el total exacto de monedas en la siguiente sesión y/o es poco probable que esto afecte al desarrollador si almacena localmente las monedas recolectadas y reenvía la transacción cuando se resuelvan los problemas de red (o similar).

Por último, debe considerar con qué frecuencia su juego realiza transacciones. En algunos juegos, el usuario realiza muchas acciones que afectan el estado del juego en poco tiempo. Imagine enviar una transacción a la blockchain cada vez que Mario recoge una moneda... Los costos se volverían rápidamente prohibitivos, ¡agrupa esas transacciones de bajo valor!

## ¿Cómo implementar esto con Unity?
Primero, querrá construir un caché local de lo que el usuario tiene en la blockchain. Esto es bastante sencillo: simplemente [lea desde la blockchain](/sdk/unity/indexer/read-from-blockchain) y almacene localmente los balances de tokens del usuario en el formato que le resulte más conveniente. Si está adaptando un juego o prototipo existente que usaba un sistema de almacenamiento local (como PlayerPrefs) o un sistema de almacenamiento remoto (como un [RDBMS](https://en.wikipedia.org/wiki/List_of_relational_database_management_systems)), probablemente ya tenga implementado un caché local y solo necesite crear un adaptador.

Luego, probablemente querrá aprovechar el `TransactionQueuer` y sus herederos que ofrece el Unity SDK. Los `TransactionQueuer` son altamente configurables y están diseñados para facilitar el desarrollo de juegos donde los jugadores realizan muchas acciones que modifican el estado. Por ejemplo, si su juego implica recolectar muchas monedas (o similares) como transacciones de bajo valor, probablemente le convenga usar el `PermissionedMinterTransactionQueuer` (asumiendo que su función de `mint` tiene permisos, que es lo predeterminado, y está minteando desde un servidor) o el `SequenceWalletTransactionQueuer` (si cualquiera puede mintear). Con estos, puede simplemente poner en cola varias transacciones; estas transacciones se combinarán automáticamente si es posible (por ejemplo, en vez de tener 'mint(amount: 5, tokenId: 11)' y 'mint(amount: 3, tokenId: 11)', se combinarían en 'mint(amount: 8, tokenId: 11)'). Luego, puede hacer que sus transacciones se envíen cada x segundos o cuando se realice una llamada a función, pero no antes de cada y segundos (esto se puede modificar para transacciones de alto valor), etc. Para obtener más información sobre cómo trabajar con el `TransactionQueuer`, consulte [este documento](/sdk/unity/wallets/embedded-wallet/blockchain-interactions#transaction-queuers).

Por último, debe verificar si sus transacciones fallan y manejar los errores de manera adecuada.

```csharp
if (transactionReturn is FailedTransactionReturn) {
// Handle the failed transaction
}
```

## Ejemplo
Para ver un ejemplo de estos conceptos en acción en nuestro Unity SDK, consulte nuestra [Guía de Jelly Forest](/guides/jelly-forest-unity-guide#5-mint-in-game-tokens-to-the-players-inventory) y [código de ejemplo](https://github.com/0xsequence/sequence-unity-demo/tree/master/Scripts).
Loading