.jslib
Crea un archivo llamado, por ejemplo, OpenLink.jslib
en la carpeta Assets/Plugins/WebGL
de tu proyecto Unity. Dentro coloca este código:
js
mergeInto(LibraryManager.library, { OpenExternalLink: function (urlPtr) { var url = UTF8ToString(urlPtr); var newWindow = window.open(url, '_blank'); if (newWindow) { newWindow.focus(); } else { console.log("No se pudo abrir la ventana. ¿Bloqueada por el navegador?"); } } });
Este script abrirá la URL en una nueva pestaña. En navegadores móviles (y wallets embebidas como Phantom), los navegadores pueden bloquear window.open()
si no se llama directamente desde un gesto del usuario (por ejemplo, un clic en botón).
Crea un script en C# (por ejemplo, ExternalLink.cs
) y colócalo en Assets/Scripts/
:
csharp
usingSystem.Runtime.InteropServices; using UnityEngine; public class ExternalLink : MonoBehaviour { [DllImport("__Internal")] private static extern void OpenExternalLink(string url); public void OpenTwitter() { #if UNITY_WEBGL && !UNITY_EDITOR OpenExternalLink("https://twitter.com/TU_USUARIO"); #else Application.OpenURL("https://twitter.com/TU_USUARIO"); #endif } public void OpenTelegram() { #if UNITY_WEBGL && !UNITY_EDITOR OpenExternalLink("https://t.me/TU_CANAL"); #else Application.OpenURL("https://t.me/TU_CANAL"); #endif } }
Crea un botón en tu escena Unity.
Agrega el script ExternalLink.cs
a un GameObject en la escena (por ejemplo, un objeto vacío llamado LinkManager
).
En el botón, en el panel OnClick(), arrastra el GameObject que tiene el script y selecciona ExternalLink -> OpenTwitter()
o OpenTelegram()
según el botón.
Debe ejecutarse como respuesta directa a una interacción del usuario (click/tap). Si el método se llama por código sin interacción directa, window.open
será bloqueado.
Algunas wallets móviles (como Phantom) abren DApps en un navegador webview personalizado. En esos casos, puede que el enlace no se abra en una nueva pestaña, sino que redirija la misma vista. En ese caso no hay una solución universal, pero se puede intentar forzar _system
con window.open(url, '_system')
, aunque no es estándar.