Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Unity-WebGL-Utilities

Some helpful utilities for Unity WebGL games based on and inspired by the Unity team's blog posts and WebGL essentials asset packages.

Installing

Grab the latest release and import the unitypackage into your project.

WebGLMemoryStats

This is a simple behavior that you can add to a persistent game object. It will periodically log WebGL memory statistics to the browser console to help you tune your WebGL memory size:

Updated CachedXMLHttpRequest

The original version of CachedXMLHttpRequest unfortunately has a few bugs. This package includes an updated drop-in replacement that resolves the following issues:

  • An error dialog is displayed in Firefox private browsing mode
  • When used with Safari and content in an iframe the plugin is non-functional
  • Synchronous XHR requests are used to revalidate resources

The updated version also adds some functionality to give you finer control over the XHR cache:

  • Module.CachedXMLHttpRequestBlacklist can be set to an array of RegExp or string objects to disable caching for matching URLs (useful to prevent caching of API endpoints, etc)
  • Module.CachedXMLHttpRequestRevalidateBlacklist can be set to an array of RegExp or string objects to disable re-validation for matching URLs (helpful if you use explicit versioning on your asset bundles)

For example, the following configuration will never cache files containing .xml, .php, or xhr_nocache, and requests with .unity3d in them will not be re-validated when being loaded:

varModule={TOTAL_MEMORY: 268435456,CachedXMLHttpRequestCacheBlacklist: [/\.xml/,/\.php/,'xhr_nocache'],CachedXMLHttpRequestRevalidateBlacklist: [/\.unity3d/]};

CachedXHRExtensions

This package also provides extensions to the CachedXMLHttpRequest addon which allow you to clear and query for the existence of items in the cache. This can be useful if you pre-fetch your asset bundles on startup to avoid doing so multiple times. The classes used below are in the Kongregate namespace.

Clear the cache:

CachedXHRExtensions.CleanCache();

Query the cache:

IEnumeratorCheckIfAssetExists(){varquery=newCacheEntryQuery("https://whatever.io/file.xml");yieldreturnquery;if(query.IsCached){Debug.Log("Asset exists in cache!");}}

About

Some helpful utilities for Unity WebGL games

Topics

Resources

Stars

95 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Unity-WebGL-Utilities

Some helpful utilities for Unity WebGL games based on and inspired by the Unity team's blog posts and WebGL essentials asset packages.

Installing

Grab the latest release and import the unitypackage into your project.

WebGLMemoryStats

This is a simple behavior that you can add to a persistent game object. It will periodically log WebGL memory statistics to the browser console to help you tune your WebGL memory size:

Updated CachedXMLHttpRequest

The original version of CachedXMLHttpRequest unfortunately has a few bugs. This package includes an updated drop-in replacement that resolves the following issues:

  • An error dialog is displayed in Firefox private browsing mode
  • When used with Safari and content in an iframe the plugin is non-functional
  • Synchronous XHR requests are used to revalidate resources

The updated version also adds some functionality to give you finer control over the XHR cache:

  • Module.CachedXMLHttpRequestBlacklist can be set to an array of RegExp or string objects to disable caching for matching URLs (useful to prevent caching of API endpoints, etc)
  • Module.CachedXMLHttpRequestRevalidateBlacklist can be set to an array of RegExp or string objects to disable re-validation for matching URLs (helpful if you use explicit versioning on your asset bundles)

For example, the following configuration will never cache files containing .xml, .php, or xhr_nocache, and requests with .unity3d in them will not be re-validated when being loaded:

varModule={TOTAL_MEMORY: 268435456,CachedXMLHttpRequestCacheBlacklist: [/\.xml/,/\.php/,'xhr_nocache'],CachedXMLHttpRequestRevalidateBlacklist: [/\.unity3d/]};

CachedXHRExtensions

This package also provides extensions to the CachedXMLHttpRequest addon which allow you to clear and query for the existence of items in the cache. This can be useful if you pre-fetch your asset bundles on startup to avoid doing so multiple times. The classes used below are in the Kongregate namespace.

Clear the cache:

CachedXHRExtensions.CleanCache();

Query the cache:

IEnumeratorCheckIfAssetExists(){varquery=newCacheEntryQuery("https://whatever.io/file.xml");yieldreturnquery;if(query.IsCached){Debug.Log("Asset exists in cache!");}}

About

Some helpful utilities for Unity WebGL games

Topics

Resources

Stars

95 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Unity-WebGL-Utilities

Some helpful utilities for Unity WebGL games based on and inspired by the Unity team's blog posts and WebGL essentials asset packages.

Installing

Grab the latest release and import the unitypackage into your project.

WebGLMemoryStats

This is a simple behavior that you can add to a persistent game object. It will periodically log WebGL memory statistics to the browser console to help you tune your WebGL memory size:

Updated CachedXMLHttpRequest

The original version of CachedXMLHttpRequest unfortunately has a few bugs. This package includes an updated drop-in replacement that resolves the following issues:

  • An error dialog is displayed in Firefox private browsing mode
  • When used with Safari and content in an iframe the plugin is non-functional
  • Synchronous XHR requests are used to revalidate resources

The updated version also adds some functionality to give you finer control over the XHR cache:

  • Module.CachedXMLHttpRequestBlacklist can be set to an array of RegExp or string objects to disable caching for matching URLs (useful to prevent caching of API endpoints, etc)
  • Module.CachedXMLHttpRequestRevalidateBlacklist can be set to an array of RegExp or string objects to disable re-validation for matching URLs (helpful if you use explicit versioning on your asset bundles)

For example, the following configuration will never cache files containing .xml, .php, or xhr_nocache, and requests with .unity3d in them will not be re-validated when being loaded:

varModule={TOTAL_MEMORY: 268435456,CachedXMLHttpRequestCacheBlacklist: [/\.xml/,/\.php/,'xhr_nocache'],CachedXMLHttpRequestRevalidateBlacklist: [/\.unity3d/]};

CachedXHRExtensions

This package also provides extensions to the CachedXMLHttpRequest addon which allow you to clear and query for the existence of items in the cache. This can be useful if you pre-fetch your asset bundles on startup to avoid doing so multiple times. The classes used below are in the Kongregate namespace.

Clear the cache:

CachedXHRExtensions.CleanCache();

Query the cache:

IEnumeratorCheckIfAssetExists(){varquery=newCacheEntryQuery("https://whatever.io/file.xml");yieldreturnquery;if(query.IsCached){Debug.Log("Asset exists in cache!");}}

About

Some helpful utilities for Unity WebGL games

Topics

Resources

Stars

95 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Unity-WebGL-Utilities

Some helpful utilities for Unity WebGL games based on and inspired by the Unity team's blog posts and WebGL essentials asset packages.

Installing

Grab the latest release and import the unitypackage into your project.

WebGLMemoryStats

This is a simple behavior that you can add to a persistent game object. It will periodically log WebGL memory statistics to the browser console to help you tune your WebGL memory size:

Updated CachedXMLHttpRequest

The original version of CachedXMLHttpRequest unfortunately has a few bugs. This package includes an updated drop-in replacement that resolves the following issues:

  • An error dialog is displayed in Firefox private browsing mode
  • When used with Safari and content in an iframe the plugin is non-functional
  • Synchronous XHR requests are used to revalidate resources

The updated version also adds some functionality to give you finer control over the XHR cache:

  • Module.CachedXMLHttpRequestBlacklist can be set to an array of RegExp or string objects to disable caching for matching URLs (useful to prevent caching of API endpoints, etc)
  • Module.CachedXMLHttpRequestRevalidateBlacklist can be set to an array of RegExp or string objects to disable re-validation for matching URLs (helpful if you use explicit versioning on your asset bundles)

For example, the following configuration will never cache files containing .xml, .php, or xhr_nocache, and requests with .unity3d in them will not be re-validated when being loaded:

varModule={TOTAL_MEMORY: 268435456,CachedXMLHttpRequestCacheBlacklist: [/\.xml/,/\.php/,'xhr_nocache'],CachedXMLHttpRequestRevalidateBlacklist: [/\.unity3d/]};

CachedXHRExtensions

This package also provides extensions to the CachedXMLHttpRequest addon which allow you to clear and query for the existence of items in the cache. This can be useful if you pre-fetch your asset bundles on startup to avoid doing so multiple times. The classes used below are in the Kongregate namespace.

Clear the cache:

CachedXHRExtensions.CleanCache();

Query the cache:

IEnumeratorCheckIfAssetExists(){varquery=newCacheEntryQuery("https://whatever.io/file.xml");yieldreturnquery;if(query.IsCached){Debug.Log("Asset exists in cache!");}}

About

Some helpful utilities for Unity WebGL games

Topics

Resources

Stars

95 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Unity-WebGL-Utilities

Some helpful utilities for Unity WebGL games based on and inspired by the Unity team's blog posts and WebGL essentials asset packages.

Installing

Grab the latest release and import the unitypackage into your project.

WebGLMemoryStats

This is a simple behavior that you can add to a persistent game object. It will periodically log WebGL memory statistics to the browser console to help you tune your WebGL memory size:

Updated CachedXMLHttpRequest

The original version of CachedXMLHttpRequest unfortunately has a few bugs. This package includes an updated drop-in replacement that resolves the following issues:

  • An error dialog is displayed in Firefox private browsing mode
  • When used with Safari and content in an iframe the plugin is non-functional
  • Synchronous XHR requests are used to revalidate resources

The updated version also adds some functionality to give you finer control over the XHR cache:

  • Module.CachedXMLHttpRequestBlacklist can be set to an array of RegExp or string objects to disable caching for matching URLs (useful to prevent caching of API endpoints, etc)
  • Module.CachedXMLHttpRequestRevalidateBlacklist can be set to an array of RegExp or string objects to disable re-validation for matching URLs (helpful if you use explicit versioning on your asset bundles)

For example, the following configuration will never cache files containing .xml, .php, or xhr_nocache, and requests with .unity3d in them will not be re-validated when being loaded:

varModule={TOTAL_MEMORY: 268435456,CachedXMLHttpRequestCacheBlacklist: [/\.xml/,/\.php/,'xhr_nocache'],CachedXMLHttpRequestRevalidateBlacklist: [/\.unity3d/]};

CachedXHRExtensions

This package also provides extensions to the CachedXMLHttpRequest addon which allow you to clear and query for the existence of items in the cache. This can be useful if you pre-fetch your asset bundles on startup to avoid doing so multiple times. The classes used below are in the Kongregate namespace.

Clear the cache:

CachedXHRExtensions.CleanCache();

Query the cache:

IEnumeratorCheckIfAssetExists(){varquery=newCacheEntryQuery("https://whatever.io/file.xml");yieldreturnquery;if(query.IsCached){Debug.Log("Asset exists in cache!");}}

About

Some helpful utilities for Unity WebGL games

Topics

Resources

Stars

95 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Unity-WebGL-Utilities

Some helpful utilities for Unity WebGL games based on and inspired by the Unity team's blog posts and WebGL essentials asset packages.

Installing

Grab the latest release and import the unitypackage into your project.

WebGLMemoryStats

This is a simple behavior that you can add to a persistent game object. It will periodically log WebGL memory statistics to the browser console to help you tune your WebGL memory size:

Updated CachedXMLHttpRequest

The original version of CachedXMLHttpRequest unfortunately has a few bugs. This package includes an updated drop-in replacement that resolves the following issues:

  • An error dialog is displayed in Firefox private browsing mode
  • When used with Safari and content in an iframe the plugin is non-functional
  • Synchronous XHR requests are used to revalidate resources

The updated version also adds some functionality to give you finer control over the XHR cache:

  • Module.CachedXMLHttpRequestBlacklist can be set to an array of RegExp or string objects to disable caching for matching URLs (useful to prevent caching of API endpoints, etc)
  • Module.CachedXMLHttpRequestRevalidateBlacklist can be set to an array of RegExp or string objects to disable re-validation for matching URLs (helpful if you use explicit versioning on your asset bundles)

For example, the following configuration will never cache files containing .xml, .php, or xhr_nocache, and requests with .unity3d in them will not be re-validated when being loaded:

varModule={TOTAL_MEMORY: 268435456,CachedXMLHttpRequestCacheBlacklist: [/\.xml/,/\.php/,'xhr_nocache'],CachedXMLHttpRequestRevalidateBlacklist: [/\.unity3d/]};

CachedXHRExtensions

This package also provides extensions to the CachedXMLHttpRequest addon which allow you to clear and query for the existence of items in the cache. This can be useful if you pre-fetch your asset bundles on startup to avoid doing so multiple times. The classes used below are in the Kongregate namespace.

Clear the cache:

CachedXHRExtensions.CleanCache();

Query the cache:

IEnumeratorCheckIfAssetExists(){varquery=newCacheEntryQuery("https://whatever.io/file.xml");yieldreturnquery;if(query.IsCached){Debug.Log("Asset exists in cache!");}}

About

Some helpful utilities for Unity WebGL games

Topics

Resources

Stars

95 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Unity-WebGL-Utilities

Some helpful utilities for Unity WebGL games based on and inspired by the Unity team's blog posts and WebGL essentials asset packages.

Installing

Grab the latest release and import the unitypackage into your project.

WebGLMemoryStats

This is a simple behavior that you can add to a persistent game object. It will periodically log WebGL memory statistics to the browser console to help you tune your WebGL memory size:

Updated CachedXMLHttpRequest

The original version of CachedXMLHttpRequest unfortunately has a few bugs. This package includes an updated drop-in replacement that resolves the following issues:

  • An error dialog is displayed in Firefox private browsing mode
  • When used with Safari and content in an iframe the plugin is non-functional
  • Synchronous XHR requests are used to revalidate resources

The updated version also adds some functionality to give you finer control over the XHR cache:

  • Module.CachedXMLHttpRequestBlacklist can be set to an array of RegExp or string objects to disable caching for matching URLs (useful to prevent caching of API endpoints, etc)
  • Module.CachedXMLHttpRequestRevalidateBlacklist can be set to an array of RegExp or string objects to disable re-validation for matching URLs (helpful if you use explicit versioning on your asset bundles)

For example, the following configuration will never cache files containing .xml, .php, or xhr_nocache, and requests with .unity3d in them will not be re-validated when being loaded:

varModule={TOTAL_MEMORY: 268435456,CachedXMLHttpRequestCacheBlacklist: [/\.xml/,/\.php/,'xhr_nocache'],CachedXMLHttpRequestRevalidateBlacklist: [/\.unity3d/]};

CachedXHRExtensions

This package also provides extensions to the CachedXMLHttpRequest addon which allow you to clear and query for the existence of items in the cache. This can be useful if you pre-fetch your asset bundles on startup to avoid doing so multiple times. The classes used below are in the Kongregate namespace.

Clear the cache:

CachedXHRExtensions.CleanCache();

Query the cache:

IEnumeratorCheckIfAssetExists(){varquery=newCacheEntryQuery("https://whatever.io/file.xml");yieldreturnquery;if(query.IsCached){Debug.Log("Asset exists in cache!");}}

About

Some helpful utilities for Unity WebGL games

Topics

Resources

Stars

95 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Unity-WebGL-Utilities

Some helpful utilities for Unity WebGL games based on and inspired by the Unity team's blog posts and WebGL essentials asset packages.

Installing

Grab the latest release and import the unitypackage into your project.

WebGLMemoryStats

This is a simple behavior that you can add to a persistent game object. It will periodically log WebGL memory statistics to the browser console to help you tune your WebGL memory size:

Updated CachedXMLHttpRequest

The original version of CachedXMLHttpRequest unfortunately has a few bugs. This package includes an updated drop-in replacement that resolves the following issues:

  • An error dialog is displayed in Firefox private browsing mode
  • When used with Safari and content in an iframe the plugin is non-functional
  • Synchronous XHR requests are used to revalidate resources

The updated version also adds some functionality to give you finer control over the XHR cache:

  • Module.CachedXMLHttpRequestBlacklist can be set to an array of RegExp or string objects to disable caching for matching URLs (useful to prevent caching of API endpoints, etc)
  • Module.CachedXMLHttpRequestRevalidateBlacklist can be set to an array of RegExp or string objects to disable re-validation for matching URLs (helpful if you use explicit versioning on your asset bundles)

For example, the following configuration will never cache files containing .xml, .php, or xhr_nocache, and requests with .unity3d in them will not be re-validated when being loaded:

varModule={TOTAL_MEMORY: 268435456,CachedXMLHttpRequestCacheBlacklist: [/\.xml/,/\.php/,'xhr_nocache'],CachedXMLHttpRequestRevalidateBlacklist: [/\.unity3d/]};

CachedXHRExtensions

This package also provides extensions to the CachedXMLHttpRequest addon which allow you to clear and query for the existence of items in the cache. This can be useful if you pre-fetch your asset bundles on startup to avoid doing so multiple times. The classes used below are in the Kongregate namespace.

Clear the cache:

CachedXHRExtensions.CleanCache();

Query the cache:

IEnumeratorCheckIfAssetExists(){varquery=newCacheEntryQuery("https://whatever.io/file.xml");yieldreturnquery;if(query.IsCached){Debug.Log("Asset exists in cache!");}}

About

Some helpful utilities for Unity WebGL games

Topics

Resources

Stars

95 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages