Repository files navigation

🎡 Autech Spin Wheel

Unity VersionVersionLicense

A powerful and production-ready Spin Wheel System for Unity. Features weighted reward probability, a daily cooldown system, watch-ad spins, and an event-driven reward system for easy integration with your game's economy.

✨ Core Features

  • Dynamic Reward Configuration: Easily set up 8 distinct rewards from the Inspector, including their name, amount, type (e.g., Coins, Gems), rarity, and probability weight.
  • Weighted Probability Engine: Precisely control the chance of landing on each reward. Higher weights mean higher probability.
  • Event-Driven Rewards: Fires a C# event (OnRewardWon) when a reward is won, allowing you to cleanly integrate it with any currency or inventory system without modifying the wheel's code.
  • Daily Cooldown & Ad Spins: Includes a built-in free daily spin with a persistent 24-hour cooldown timer. Also supports a "watch ad" button to grant an extra spin.
  • Customizable Animation & Audio: Fine-tune the spin duration and animation curve. Assign custom sounds for the spin, standard rewards, and rare rewards to enhance player feedback.
  • Clean Public API: Simple, well-documented public methods (SpinFree(), SpinOnAd(), ResetCooldown()) for easy integration with your UI buttons.
  • Self-Contained State: Automatically saves its own state (cooldown timer and ad watch status) using PlayerPrefs, ensuring persistence across game sessions.
  • Reward Display: Shows a pop-up panel to celebrate the player's winnings, complete with a reward icon and amount.

🎮 How to Use

This guide will walk you through setting up the Spin Wheel in your project.

1. Initial Setup

  1. Find the SpinWheelPanel prefab located in Assets/Spin Wheel/Prefabs/.
  2. Drag and drop it into your scene hierarchy. It should be a child of a Canvas.

2. Inspector Configuration

Select the SpinWheelPanel object in your scene and look at the Spin Wheel component in the Inspector. You will need to configure the following fields:

  • UI References: Assign the required UI components. Most are already pre-assigned in the prefab.
    • Wheel Rect Transform: The RectTransform of the spinning wheel image.
    • Result Text: A TextMeshProUGUI element to display cooldown timers and win messages.
    • Spin Button: The button for the free daily spin.
    • Watch Ad Button: The button to spin after watching an ad.
    • Close Button: The button to close the spin wheel panel.
  • Reward Display Panel: Configure the pop-up that appears after a spin.
    • Reward Display Panel: The parent GameObject of the panel.
    • Reward Amount Text: A TextMeshProUGUI to show the amount won.
    • Reward Image: An Image component to show the icon of the reward (coin or gem).
  • Spinning Settings:
    • Spin Duration: How long the wheel spins in seconds (e.g., 3.0).
  • Rewards:
    • Coin Image, Gem Image: Sprites for your two currency types.
    • Rewards: An array of 8 RewardData elements, corresponding to the 8 segments on the wheel.
  • Probability Settings:
    • Probability Multiplier: A global multiplier to adjust the weight distribution. Keep at 1 for standard behavior.
  • Audio:
    • Audio Source: The AudioSource used to play sounds.
    • Spin Sound: Played when the wheel starts spinning.
    • Reward Sound: Played for common rewards.
    • Rare Reward Sound: A special sound for rewards marked as Rare or higher.
  • Animation:
    • Spin Curve: An AnimationCurve to control the easing of the spin animation (e.g., EaseInOut).

3. Configuring the Rewards Array

The Rewards array has 8 elements, representing the 8 slices of the wheel. The order is important:

  • Element 0: Top segment
  • Element 1: Top-right segment
  • Element 2: Right segment
  • ...and so on, clockwise.

For each element, you must set:

  • Name: The display name of the reward (e.g., "1,000 Coins").
  • Amount: The currency amount to award. double is used to support large numbers.
  • Type: Coins (regular currency) or Gems (premium currency).
  • Weight: The probability weight. Higher values are more common relative to other weights.
  • Rarity: Common, Uncommon, Rare, etc. Rewards marked as Rare or higher will play the rareRewardSound.

4. Integrating with UI Buttons

Connect your UI Button components' OnClick() events to the public methods in the SpinWheel.cs script:

  • Free Spin Button: Connect to SpinWheel.SpinFree().
  • Watch Ad Button: Connect to SpinWheel.SpinOnAd(). Note: You need to implement your ad provider's logic to call this method on ad completion.
  • Test/Reset Button (Optional): If you have a debug menu, connect a button to SpinWheel.ResetCooldown() to reset the 24-hour timer.

The script automatically manages the interactability of these buttons based on the cooldown status.

5. Receiving Rewards via Events

The SpinWheel does not manage player currency directly. Instead, it fires a static C# event, OnRewardWon, when a spin is complete. You must create another script (e.g., a CurrencyManager) to listen for this event and award the currency to the player.

Here is an example of how to subscribe to the event:

// In your CurrencyManager.cs or a similar game management scriptusingUnityEngine;publicclassCurrencyManager:MonoBehaviour{privatevoidOnEnable(){// Subscribe to the event when this object is enabledSpinWheel.OnRewardWon+=HandleReward;}privatevoidOnDisable(){// Unsubscribe to prevent memory leaksSpinWheel.OnRewardWon-=HandleReward;}// This method will be called by the SpinWheel when a reward is wonprivatevoidHandleReward(doubleamount,RewardTypetype){if(type==RewardType.Coins){// Add 'amount' to the player's coin balanceDebug.Log($"Player won {amount} coins!");// yourCoinVariable += amount;}elseif(type==RewardType.Gems){// Add 'amount' to the player's gem balanceDebug.Log($"Player won {amount} gems!");// yourGemVariable += amount;}// Remember to save the player's new currency balance// SavePlayerData();}}

Example: Weighted Probability

To make "5000 Coins" twice as likely to be won as "50 Gems":

  • 5000 Coins Reward: Set Weight to 20.
  • 50 Gems Reward: Set Weight to 10.

The system automatically calculates the percentage chance based on the total weight of all 8 rewards.

🚀 Installation Guide

  1. Download the latest release from the releases page.
  2. In Unity, go to Assets > Import Package > Custom Package... and select the downloaded .unitypackage file.

📄 License

This project is licensed under the MIT License.


⭐ Star this repo if it helped you!

Made with ❤️ by Autech

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 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

Repository files navigation

🎡 Autech Spin Wheel

Unity VersionVersionLicense

A powerful and production-ready Spin Wheel System for Unity. Features weighted reward probability, a daily cooldown system, watch-ad spins, and an event-driven reward system for easy integration with your game's economy.

✨ Core Features

  • Dynamic Reward Configuration: Easily set up 8 distinct rewards from the Inspector, including their name, amount, type (e.g., Coins, Gems), rarity, and probability weight.
  • Weighted Probability Engine: Precisely control the chance of landing on each reward. Higher weights mean higher probability.
  • Event-Driven Rewards: Fires a C# event (OnRewardWon) when a reward is won, allowing you to cleanly integrate it with any currency or inventory system without modifying the wheel's code.
  • Daily Cooldown & Ad Spins: Includes a built-in free daily spin with a persistent 24-hour cooldown timer. Also supports a "watch ad" button to grant an extra spin.
  • Customizable Animation & Audio: Fine-tune the spin duration and animation curve. Assign custom sounds for the spin, standard rewards, and rare rewards to enhance player feedback.
  • Clean Public API: Simple, well-documented public methods (SpinFree(), SpinOnAd(), ResetCooldown()) for easy integration with your UI buttons.
  • Self-Contained State: Automatically saves its own state (cooldown timer and ad watch status) using PlayerPrefs, ensuring persistence across game sessions.
  • Reward Display: Shows a pop-up panel to celebrate the player's winnings, complete with a reward icon and amount.

🎮 How to Use

This guide will walk you through setting up the Spin Wheel in your project.

1. Initial Setup

  1. Find the SpinWheelPanel prefab located in Assets/Spin Wheel/Prefabs/.
  2. Drag and drop it into your scene hierarchy. It should be a child of a Canvas.

2. Inspector Configuration

Select the SpinWheelPanel object in your scene and look at the Spin Wheel component in the Inspector. You will need to configure the following fields:

  • UI References: Assign the required UI components. Most are already pre-assigned in the prefab.
    • Wheel Rect Transform: The RectTransform of the spinning wheel image.
    • Result Text: A TextMeshProUGUI element to display cooldown timers and win messages.
    • Spin Button: The button for the free daily spin.
    • Watch Ad Button: The button to spin after watching an ad.
    • Close Button: The button to close the spin wheel panel.
  • Reward Display Panel: Configure the pop-up that appears after a spin.
    • Reward Display Panel: The parent GameObject of the panel.
    • Reward Amount Text: A TextMeshProUGUI to show the amount won.
    • Reward Image: An Image component to show the icon of the reward (coin or gem).
  • Spinning Settings:
    • Spin Duration: How long the wheel spins in seconds (e.g., 3.0).
  • Rewards:
    • Coin Image, Gem Image: Sprites for your two currency types.
    • Rewards: An array of 8 RewardData elements, corresponding to the 8 segments on the wheel.
  • Probability Settings:
    • Probability Multiplier: A global multiplier to adjust the weight distribution. Keep at 1 for standard behavior.
  • Audio:
    • Audio Source: The AudioSource used to play sounds.
    • Spin Sound: Played when the wheel starts spinning.
    • Reward Sound: Played for common rewards.
    • Rare Reward Sound: A special sound for rewards marked as Rare or higher.
  • Animation:
    • Spin Curve: An AnimationCurve to control the easing of the spin animation (e.g., EaseInOut).

3. Configuring the Rewards Array

The Rewards array has 8 elements, representing the 8 slices of the wheel. The order is important:

  • Element 0: Top segment
  • Element 1: Top-right segment
  • Element 2: Right segment
  • ...and so on, clockwise.

For each element, you must set:

  • Name: The display name of the reward (e.g., "1,000 Coins").
  • Amount: The currency amount to award. double is used to support large numbers.
  • Type: Coins (regular currency) or Gems (premium currency).
  • Weight: The probability weight. Higher values are more common relative to other weights.
  • Rarity: Common, Uncommon, Rare, etc. Rewards marked as Rare or higher will play the rareRewardSound.

4. Integrating with UI Buttons

Connect your UI Button components' OnClick() events to the public methods in the SpinWheel.cs script:

  • Free Spin Button: Connect to SpinWheel.SpinFree().
  • Watch Ad Button: Connect to SpinWheel.SpinOnAd(). Note: You need to implement your ad provider's logic to call this method on ad completion.
  • Test/Reset Button (Optional): If you have a debug menu, connect a button to SpinWheel.ResetCooldown() to reset the 24-hour timer.

The script automatically manages the interactability of these buttons based on the cooldown status.

5. Receiving Rewards via Events

The SpinWheel does not manage player currency directly. Instead, it fires a static C# event, OnRewardWon, when a spin is complete. You must create another script (e.g., a CurrencyManager) to listen for this event and award the currency to the player.

Here is an example of how to subscribe to the event:

// In your CurrencyManager.cs or a similar game management scriptusingUnityEngine;publicclassCurrencyManager:MonoBehaviour{privatevoidOnEnable(){// Subscribe to the event when this object is enabledSpinWheel.OnRewardWon+=HandleReward;}privatevoidOnDisable(){// Unsubscribe to prevent memory leaksSpinWheel.OnRewardWon-=HandleReward;}// This method will be called by the SpinWheel when a reward is wonprivatevoidHandleReward(doubleamount,RewardTypetype){if(type==RewardType.Coins){// Add 'amount' to the player's coin balanceDebug.Log($"Player won {amount} coins!");// yourCoinVariable += amount;}elseif(type==RewardType.Gems){// Add 'amount' to the player's gem balanceDebug.Log($"Player won {amount} gems!");// yourGemVariable += amount;}// Remember to save the player's new currency balance// SavePlayerData();}}

Example: Weighted Probability

To make "5000 Coins" twice as likely to be won as "50 Gems":

  • 5000 Coins Reward: Set Weight to 20.
  • 50 Gems Reward: Set Weight to 10.

The system automatically calculates the percentage chance based on the total weight of all 8 rewards.

🚀 Installation Guide

  1. Download the latest release from the releases page.
  2. In Unity, go to Assets > Import Package > Custom Package... and select the downloaded .unitypackage file.

📄 License

This project is licensed under the MIT License.


⭐ Star this repo if it helped you!

Made with ❤️ by Autech

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 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

Repository files navigation

🎡 Autech Spin Wheel

Unity VersionVersionLicense

A powerful and production-ready Spin Wheel System for Unity. Features weighted reward probability, a daily cooldown system, watch-ad spins, and an event-driven reward system for easy integration with your game's economy.

✨ Core Features

  • Dynamic Reward Configuration: Easily set up 8 distinct rewards from the Inspector, including their name, amount, type (e.g., Coins, Gems), rarity, and probability weight.
  • Weighted Probability Engine: Precisely control the chance of landing on each reward. Higher weights mean higher probability.
  • Event-Driven Rewards: Fires a C# event (OnRewardWon) when a reward is won, allowing you to cleanly integrate it with any currency or inventory system without modifying the wheel's code.
  • Daily Cooldown & Ad Spins: Includes a built-in free daily spin with a persistent 24-hour cooldown timer. Also supports a "watch ad" button to grant an extra spin.
  • Customizable Animation & Audio: Fine-tune the spin duration and animation curve. Assign custom sounds for the spin, standard rewards, and rare rewards to enhance player feedback.
  • Clean Public API: Simple, well-documented public methods (SpinFree(), SpinOnAd(), ResetCooldown()) for easy integration with your UI buttons.
  • Self-Contained State: Automatically saves its own state (cooldown timer and ad watch status) using PlayerPrefs, ensuring persistence across game sessions.
  • Reward Display: Shows a pop-up panel to celebrate the player's winnings, complete with a reward icon and amount.

🎮 How to Use

This guide will walk you through setting up the Spin Wheel in your project.

1. Initial Setup

  1. Find the SpinWheelPanel prefab located in Assets/Spin Wheel/Prefabs/.
  2. Drag and drop it into your scene hierarchy. It should be a child of a Canvas.

2. Inspector Configuration

Select the SpinWheelPanel object in your scene and look at the Spin Wheel component in the Inspector. You will need to configure the following fields:

  • UI References: Assign the required UI components. Most are already pre-assigned in the prefab.
    • Wheel Rect Transform: The RectTransform of the spinning wheel image.
    • Result Text: A TextMeshProUGUI element to display cooldown timers and win messages.
    • Spin Button: The button for the free daily spin.
    • Watch Ad Button: The button to spin after watching an ad.
    • Close Button: The button to close the spin wheel panel.
  • Reward Display Panel: Configure the pop-up that appears after a spin.
    • Reward Display Panel: The parent GameObject of the panel.
    • Reward Amount Text: A TextMeshProUGUI to show the amount won.
    • Reward Image: An Image component to show the icon of the reward (coin or gem).
  • Spinning Settings:
    • Spin Duration: How long the wheel spins in seconds (e.g., 3.0).
  • Rewards:
    • Coin Image, Gem Image: Sprites for your two currency types.
    • Rewards: An array of 8 RewardData elements, corresponding to the 8 segments on the wheel.
  • Probability Settings:
    • Probability Multiplier: A global multiplier to adjust the weight distribution. Keep at 1 for standard behavior.
  • Audio:
    • Audio Source: The AudioSource used to play sounds.
    • Spin Sound: Played when the wheel starts spinning.
    • Reward Sound: Played for common rewards.
    • Rare Reward Sound: A special sound for rewards marked as Rare or higher.
  • Animation:
    • Spin Curve: An AnimationCurve to control the easing of the spin animation (e.g., EaseInOut).

3. Configuring the Rewards Array

The Rewards array has 8 elements, representing the 8 slices of the wheel. The order is important:

  • Element 0: Top segment
  • Element 1: Top-right segment
  • Element 2: Right segment
  • ...and so on, clockwise.

For each element, you must set:

  • Name: The display name of the reward (e.g., "1,000 Coins").
  • Amount: The currency amount to award. double is used to support large numbers.
  • Type: Coins (regular currency) or Gems (premium currency).
  • Weight: The probability weight. Higher values are more common relative to other weights.
  • Rarity: Common, Uncommon, Rare, etc. Rewards marked as Rare or higher will play the rareRewardSound.

4. Integrating with UI Buttons

Connect your UI Button components' OnClick() events to the public methods in the SpinWheel.cs script:

  • Free Spin Button: Connect to SpinWheel.SpinFree().
  • Watch Ad Button: Connect to SpinWheel.SpinOnAd(). Note: You need to implement your ad provider's logic to call this method on ad completion.
  • Test/Reset Button (Optional): If you have a debug menu, connect a button to SpinWheel.ResetCooldown() to reset the 24-hour timer.

The script automatically manages the interactability of these buttons based on the cooldown status.

5. Receiving Rewards via Events

The SpinWheel does not manage player currency directly. Instead, it fires a static C# event, OnRewardWon, when a spin is complete. You must create another script (e.g., a CurrencyManager) to listen for this event and award the currency to the player.

Here is an example of how to subscribe to the event:

// In your CurrencyManager.cs or a similar game management scriptusingUnityEngine;publicclassCurrencyManager:MonoBehaviour{privatevoidOnEnable(){// Subscribe to the event when this object is enabledSpinWheel.OnRewardWon+=HandleReward;}privatevoidOnDisable(){// Unsubscribe to prevent memory leaksSpinWheel.OnRewardWon-=HandleReward;}// This method will be called by the SpinWheel when a reward is wonprivatevoidHandleReward(doubleamount,RewardTypetype){if(type==RewardType.Coins){// Add 'amount' to the player's coin balanceDebug.Log($"Player won {amount} coins!");// yourCoinVariable += amount;}elseif(type==RewardType.Gems){// Add 'amount' to the player's gem balanceDebug.Log($"Player won {amount} gems!");// yourGemVariable += amount;}// Remember to save the player's new currency balance// SavePlayerData();}}

Example: Weighted Probability

To make "5000 Coins" twice as likely to be won as "50 Gems":

  • 5000 Coins Reward: Set Weight to 20.
  • 50 Gems Reward: Set Weight to 10.

The system automatically calculates the percentage chance based on the total weight of all 8 rewards.

🚀 Installation Guide

  1. Download the latest release from the releases page.
  2. In Unity, go to Assets > Import Package > Custom Package... and select the downloaded .unitypackage file.

📄 License

This project is licensed under the MIT License.


⭐ Star this repo if it helped you!

Made with ❤️ by Autech

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 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

Repository files navigation

🎡 Autech Spin Wheel

Unity VersionVersionLicense

A powerful and production-ready Spin Wheel System for Unity. Features weighted reward probability, a daily cooldown system, watch-ad spins, and an event-driven reward system for easy integration with your game's economy.

✨ Core Features

  • Dynamic Reward Configuration: Easily set up 8 distinct rewards from the Inspector, including their name, amount, type (e.g., Coins, Gems), rarity, and probability weight.
  • Weighted Probability Engine: Precisely control the chance of landing on each reward. Higher weights mean higher probability.
  • Event-Driven Rewards: Fires a C# event (OnRewardWon) when a reward is won, allowing you to cleanly integrate it with any currency or inventory system without modifying the wheel's code.
  • Daily Cooldown & Ad Spins: Includes a built-in free daily spin with a persistent 24-hour cooldown timer. Also supports a "watch ad" button to grant an extra spin.
  • Customizable Animation & Audio: Fine-tune the spin duration and animation curve. Assign custom sounds for the spin, standard rewards, and rare rewards to enhance player feedback.
  • Clean Public API: Simple, well-documented public methods (SpinFree(), SpinOnAd(), ResetCooldown()) for easy integration with your UI buttons.
  • Self-Contained State: Automatically saves its own state (cooldown timer and ad watch status) using PlayerPrefs, ensuring persistence across game sessions.
  • Reward Display: Shows a pop-up panel to celebrate the player's winnings, complete with a reward icon and amount.

🎮 How to Use

This guide will walk you through setting up the Spin Wheel in your project.

1. Initial Setup

  1. Find the SpinWheelPanel prefab located in Assets/Spin Wheel/Prefabs/.
  2. Drag and drop it into your scene hierarchy. It should be a child of a Canvas.

2. Inspector Configuration

Select the SpinWheelPanel object in your scene and look at the Spin Wheel component in the Inspector. You will need to configure the following fields:

  • UI References: Assign the required UI components. Most are already pre-assigned in the prefab.
    • Wheel Rect Transform: The RectTransform of the spinning wheel image.
    • Result Text: A TextMeshProUGUI element to display cooldown timers and win messages.
    • Spin Button: The button for the free daily spin.
    • Watch Ad Button: The button to spin after watching an ad.
    • Close Button: The button to close the spin wheel panel.
  • Reward Display Panel: Configure the pop-up that appears after a spin.
    • Reward Display Panel: The parent GameObject of the panel.
    • Reward Amount Text: A TextMeshProUGUI to show the amount won.
    • Reward Image: An Image component to show the icon of the reward (coin or gem).
  • Spinning Settings:
    • Spin Duration: How long the wheel spins in seconds (e.g., 3.0).
  • Rewards:
    • Coin Image, Gem Image: Sprites for your two currency types.
    • Rewards: An array of 8 RewardData elements, corresponding to the 8 segments on the wheel.
  • Probability Settings:
    • Probability Multiplier: A global multiplier to adjust the weight distribution. Keep at 1 for standard behavior.
  • Audio:
    • Audio Source: The AudioSource used to play sounds.
    • Spin Sound: Played when the wheel starts spinning.
    • Reward Sound: Played for common rewards.
    • Rare Reward Sound: A special sound for rewards marked as Rare or higher.
  • Animation:
    • Spin Curve: An AnimationCurve to control the easing of the spin animation (e.g., EaseInOut).

3. Configuring the Rewards Array

The Rewards array has 8 elements, representing the 8 slices of the wheel. The order is important:

  • Element 0: Top segment
  • Element 1: Top-right segment
  • Element 2: Right segment
  • ...and so on, clockwise.

For each element, you must set:

  • Name: The display name of the reward (e.g., "1,000 Coins").
  • Amount: The currency amount to award. double is used to support large numbers.
  • Type: Coins (regular currency) or Gems (premium currency).
  • Weight: The probability weight. Higher values are more common relative to other weights.
  • Rarity: Common, Uncommon, Rare, etc. Rewards marked as Rare or higher will play the rareRewardSound.

4. Integrating with UI Buttons

Connect your UI Button components' OnClick() events to the public methods in the SpinWheel.cs script:

  • Free Spin Button: Connect to SpinWheel.SpinFree().
  • Watch Ad Button: Connect to SpinWheel.SpinOnAd(). Note: You need to implement your ad provider's logic to call this method on ad completion.
  • Test/Reset Button (Optional): If you have a debug menu, connect a button to SpinWheel.ResetCooldown() to reset the 24-hour timer.

The script automatically manages the interactability of these buttons based on the cooldown status.

5. Receiving Rewards via Events

The SpinWheel does not manage player currency directly. Instead, it fires a static C# event, OnRewardWon, when a spin is complete. You must create another script (e.g., a CurrencyManager) to listen for this event and award the currency to the player.

Here is an example of how to subscribe to the event:

// In your CurrencyManager.cs or a similar game management scriptusingUnityEngine;publicclassCurrencyManager:MonoBehaviour{privatevoidOnEnable(){// Subscribe to the event when this object is enabledSpinWheel.OnRewardWon+=HandleReward;}privatevoidOnDisable(){// Unsubscribe to prevent memory leaksSpinWheel.OnRewardWon-=HandleReward;}// This method will be called by the SpinWheel when a reward is wonprivatevoidHandleReward(doubleamount,RewardTypetype){if(type==RewardType.Coins){// Add 'amount' to the player's coin balanceDebug.Log($"Player won {amount} coins!");// yourCoinVariable += amount;}elseif(type==RewardType.Gems){// Add 'amount' to the player's gem balanceDebug.Log($"Player won {amount} gems!");// yourGemVariable += amount;}// Remember to save the player's new currency balance// SavePlayerData();}}

Example: Weighted Probability

To make "5000 Coins" twice as likely to be won as "50 Gems":

  • 5000 Coins Reward: Set Weight to 20.
  • 50 Gems Reward: Set Weight to 10.

The system automatically calculates the percentage chance based on the total weight of all 8 rewards.

🚀 Installation Guide

  1. Download the latest release from the releases page.
  2. In Unity, go to Assets > Import Package > Custom Package... and select the downloaded .unitypackage file.

📄 License

This project is licensed under the MIT License.


⭐ Star this repo if it helped you!

Made with ❤️ by Autech

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 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

Repository files navigation

🎡 Autech Spin Wheel

Unity VersionVersionLicense

A powerful and production-ready Spin Wheel System for Unity. Features weighted reward probability, a daily cooldown system, watch-ad spins, and an event-driven reward system for easy integration with your game's economy.

✨ Core Features

  • Dynamic Reward Configuration: Easily set up 8 distinct rewards from the Inspector, including their name, amount, type (e.g., Coins, Gems), rarity, and probability weight.
  • Weighted Probability Engine: Precisely control the chance of landing on each reward. Higher weights mean higher probability.
  • Event-Driven Rewards: Fires a C# event (OnRewardWon) when a reward is won, allowing you to cleanly integrate it with any currency or inventory system without modifying the wheel's code.
  • Daily Cooldown & Ad Spins: Includes a built-in free daily spin with a persistent 24-hour cooldown timer. Also supports a "watch ad" button to grant an extra spin.
  • Customizable Animation & Audio: Fine-tune the spin duration and animation curve. Assign custom sounds for the spin, standard rewards, and rare rewards to enhance player feedback.
  • Clean Public API: Simple, well-documented public methods (SpinFree(), SpinOnAd(), ResetCooldown()) for easy integration with your UI buttons.
  • Self-Contained State: Automatically saves its own state (cooldown timer and ad watch status) using PlayerPrefs, ensuring persistence across game sessions.
  • Reward Display: Shows a pop-up panel to celebrate the player's winnings, complete with a reward icon and amount.

🎮 How to Use

This guide will walk you through setting up the Spin Wheel in your project.

1. Initial Setup

  1. Find the SpinWheelPanel prefab located in Assets/Spin Wheel/Prefabs/.
  2. Drag and drop it into your scene hierarchy. It should be a child of a Canvas.

2. Inspector Configuration

Select the SpinWheelPanel object in your scene and look at the Spin Wheel component in the Inspector. You will need to configure the following fields:

  • UI References: Assign the required UI components. Most are already pre-assigned in the prefab.
    • Wheel Rect Transform: The RectTransform of the spinning wheel image.
    • Result Text: A TextMeshProUGUI element to display cooldown timers and win messages.
    • Spin Button: The button for the free daily spin.
    • Watch Ad Button: The button to spin after watching an ad.
    • Close Button: The button to close the spin wheel panel.
  • Reward Display Panel: Configure the pop-up that appears after a spin.
    • Reward Display Panel: The parent GameObject of the panel.
    • Reward Amount Text: A TextMeshProUGUI to show the amount won.
    • Reward Image: An Image component to show the icon of the reward (coin or gem).
  • Spinning Settings:
    • Spin Duration: How long the wheel spins in seconds (e.g., 3.0).
  • Rewards:
    • Coin Image, Gem Image: Sprites for your two currency types.
    • Rewards: An array of 8 RewardData elements, corresponding to the 8 segments on the wheel.
  • Probability Settings:
    • Probability Multiplier: A global multiplier to adjust the weight distribution. Keep at 1 for standard behavior.
  • Audio:
    • Audio Source: The AudioSource used to play sounds.
    • Spin Sound: Played when the wheel starts spinning.
    • Reward Sound: Played for common rewards.
    • Rare Reward Sound: A special sound for rewards marked as Rare or higher.
  • Animation:
    • Spin Curve: An AnimationCurve to control the easing of the spin animation (e.g., EaseInOut).

3. Configuring the Rewards Array

The Rewards array has 8 elements, representing the 8 slices of the wheel. The order is important:

  • Element 0: Top segment
  • Element 1: Top-right segment
  • Element 2: Right segment
  • ...and so on, clockwise.

For each element, you must set:

  • Name: The display name of the reward (e.g., "1,000 Coins").
  • Amount: The currency amount to award. double is used to support large numbers.
  • Type: Coins (regular currency) or Gems (premium currency).
  • Weight: The probability weight. Higher values are more common relative to other weights.
  • Rarity: Common, Uncommon, Rare, etc. Rewards marked as Rare or higher will play the rareRewardSound.

4. Integrating with UI Buttons

Connect your UI Button components' OnClick() events to the public methods in the SpinWheel.cs script:

  • Free Spin Button: Connect to SpinWheel.SpinFree().
  • Watch Ad Button: Connect to SpinWheel.SpinOnAd(). Note: You need to implement your ad provider's logic to call this method on ad completion.
  • Test/Reset Button (Optional): If you have a debug menu, connect a button to SpinWheel.ResetCooldown() to reset the 24-hour timer.

The script automatically manages the interactability of these buttons based on the cooldown status.

5. Receiving Rewards via Events

The SpinWheel does not manage player currency directly. Instead, it fires a static C# event, OnRewardWon, when a spin is complete. You must create another script (e.g., a CurrencyManager) to listen for this event and award the currency to the player.

Here is an example of how to subscribe to the event:

// In your CurrencyManager.cs or a similar game management scriptusingUnityEngine;publicclassCurrencyManager:MonoBehaviour{privatevoidOnEnable(){// Subscribe to the event when this object is enabledSpinWheel.OnRewardWon+=HandleReward;}privatevoidOnDisable(){// Unsubscribe to prevent memory leaksSpinWheel.OnRewardWon-=HandleReward;}// This method will be called by the SpinWheel when a reward is wonprivatevoidHandleReward(doubleamount,RewardTypetype){if(type==RewardType.Coins){// Add 'amount' to the player's coin balanceDebug.Log($"Player won {amount} coins!");// yourCoinVariable += amount;}elseif(type==RewardType.Gems){// Add 'amount' to the player's gem balanceDebug.Log($"Player won {amount} gems!");// yourGemVariable += amount;}// Remember to save the player's new currency balance// SavePlayerData();}}

Example: Weighted Probability

To make "5000 Coins" twice as likely to be won as "50 Gems":

  • 5000 Coins Reward: Set Weight to 20.
  • 50 Gems Reward: Set Weight to 10.

The system automatically calculates the percentage chance based on the total weight of all 8 rewards.

🚀 Installation Guide

  1. Download the latest release from the releases page.
  2. In Unity, go to Assets > Import Package > Custom Package... and select the downloaded .unitypackage file.

📄 License

This project is licensed under the MIT License.


⭐ Star this repo if it helped you!

Made with ❤️ by Autech

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 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

Repository files navigation

🎡 Autech Spin Wheel

Unity VersionVersionLicense

A powerful and production-ready Spin Wheel System for Unity. Features weighted reward probability, a daily cooldown system, watch-ad spins, and an event-driven reward system for easy integration with your game's economy.

✨ Core Features

  • Dynamic Reward Configuration: Easily set up 8 distinct rewards from the Inspector, including their name, amount, type (e.g., Coins, Gems), rarity, and probability weight.
  • Weighted Probability Engine: Precisely control the chance of landing on each reward. Higher weights mean higher probability.
  • Event-Driven Rewards: Fires a C# event (OnRewardWon) when a reward is won, allowing you to cleanly integrate it with any currency or inventory system without modifying the wheel's code.
  • Daily Cooldown & Ad Spins: Includes a built-in free daily spin with a persistent 24-hour cooldown timer. Also supports a "watch ad" button to grant an extra spin.
  • Customizable Animation & Audio: Fine-tune the spin duration and animation curve. Assign custom sounds for the spin, standard rewards, and rare rewards to enhance player feedback.
  • Clean Public API: Simple, well-documented public methods (SpinFree(), SpinOnAd(), ResetCooldown()) for easy integration with your UI buttons.
  • Self-Contained State: Automatically saves its own state (cooldown timer and ad watch status) using PlayerPrefs, ensuring persistence across game sessions.
  • Reward Display: Shows a pop-up panel to celebrate the player's winnings, complete with a reward icon and amount.

🎮 How to Use

This guide will walk you through setting up the Spin Wheel in your project.

1. Initial Setup

  1. Find the SpinWheelPanel prefab located in Assets/Spin Wheel/Prefabs/.
  2. Drag and drop it into your scene hierarchy. It should be a child of a Canvas.

2. Inspector Configuration

Select the SpinWheelPanel object in your scene and look at the Spin Wheel component in the Inspector. You will need to configure the following fields:

  • UI References: Assign the required UI components. Most are already pre-assigned in the prefab.
    • Wheel Rect Transform: The RectTransform of the spinning wheel image.
    • Result Text: A TextMeshProUGUI element to display cooldown timers and win messages.
    • Spin Button: The button for the free daily spin.
    • Watch Ad Button: The button to spin after watching an ad.
    • Close Button: The button to close the spin wheel panel.
  • Reward Display Panel: Configure the pop-up that appears after a spin.
    • Reward Display Panel: The parent GameObject of the panel.
    • Reward Amount Text: A TextMeshProUGUI to show the amount won.
    • Reward Image: An Image component to show the icon of the reward (coin or gem).
  • Spinning Settings:
    • Spin Duration: How long the wheel spins in seconds (e.g., 3.0).
  • Rewards:
    • Coin Image, Gem Image: Sprites for your two currency types.
    • Rewards: An array of 8 RewardData elements, corresponding to the 8 segments on the wheel.
  • Probability Settings:
    • Probability Multiplier: A global multiplier to adjust the weight distribution. Keep at 1 for standard behavior.
  • Audio:
    • Audio Source: The AudioSource used to play sounds.
    • Spin Sound: Played when the wheel starts spinning.
    • Reward Sound: Played for common rewards.
    • Rare Reward Sound: A special sound for rewards marked as Rare or higher.
  • Animation:
    • Spin Curve: An AnimationCurve to control the easing of the spin animation (e.g., EaseInOut).

3. Configuring the Rewards Array

The Rewards array has 8 elements, representing the 8 slices of the wheel. The order is important:

  • Element 0: Top segment
  • Element 1: Top-right segment
  • Element 2: Right segment
  • ...and so on, clockwise.

For each element, you must set:

  • Name: The display name of the reward (e.g., "1,000 Coins").
  • Amount: The currency amount to award. double is used to support large numbers.
  • Type: Coins (regular currency) or Gems (premium currency).
  • Weight: The probability weight. Higher values are more common relative to other weights.
  • Rarity: Common, Uncommon, Rare, etc. Rewards marked as Rare or higher will play the rareRewardSound.

4. Integrating with UI Buttons

Connect your UI Button components' OnClick() events to the public methods in the SpinWheel.cs script:

  • Free Spin Button: Connect to SpinWheel.SpinFree().
  • Watch Ad Button: Connect to SpinWheel.SpinOnAd(). Note: You need to implement your ad provider's logic to call this method on ad completion.
  • Test/Reset Button (Optional): If you have a debug menu, connect a button to SpinWheel.ResetCooldown() to reset the 24-hour timer.

The script automatically manages the interactability of these buttons based on the cooldown status.

5. Receiving Rewards via Events

The SpinWheel does not manage player currency directly. Instead, it fires a static C# event, OnRewardWon, when a spin is complete. You must create another script (e.g., a CurrencyManager) to listen for this event and award the currency to the player.

Here is an example of how to subscribe to the event:

// In your CurrencyManager.cs or a similar game management scriptusingUnityEngine;publicclassCurrencyManager:MonoBehaviour{privatevoidOnEnable(){// Subscribe to the event when this object is enabledSpinWheel.OnRewardWon+=HandleReward;}privatevoidOnDisable(){// Unsubscribe to prevent memory leaksSpinWheel.OnRewardWon-=HandleReward;}// This method will be called by the SpinWheel when a reward is wonprivatevoidHandleReward(doubleamount,RewardTypetype){if(type==RewardType.Coins){// Add 'amount' to the player's coin balanceDebug.Log($"Player won {amount} coins!");// yourCoinVariable += amount;}elseif(type==RewardType.Gems){// Add 'amount' to the player's gem balanceDebug.Log($"Player won {amount} gems!");// yourGemVariable += amount;}// Remember to save the player's new currency balance// SavePlayerData();}}

Example: Weighted Probability

To make "5000 Coins" twice as likely to be won as "50 Gems":

  • 5000 Coins Reward: Set Weight to 20.
  • 50 Gems Reward: Set Weight to 10.

The system automatically calculates the percentage chance based on the total weight of all 8 rewards.

🚀 Installation Guide

  1. Download the latest release from the releases page.
  2. In Unity, go to Assets > Import Package > Custom Package... and select the downloaded .unitypackage file.

📄 License

This project is licensed under the MIT License.


⭐ Star this repo if it helped you!

Made with ❤️ by Autech

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 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

Repository files navigation

🎡 Autech Spin Wheel

Unity VersionVersionLicense

A powerful and production-ready Spin Wheel System for Unity. Features weighted reward probability, a daily cooldown system, watch-ad spins, and an event-driven reward system for easy integration with your game's economy.

✨ Core Features

  • Dynamic Reward Configuration: Easily set up 8 distinct rewards from the Inspector, including their name, amount, type (e.g., Coins, Gems), rarity, and probability weight.
  • Weighted Probability Engine: Precisely control the chance of landing on each reward. Higher weights mean higher probability.
  • Event-Driven Rewards: Fires a C# event (OnRewardWon) when a reward is won, allowing you to cleanly integrate it with any currency or inventory system without modifying the wheel's code.
  • Daily Cooldown & Ad Spins: Includes a built-in free daily spin with a persistent 24-hour cooldown timer. Also supports a "watch ad" button to grant an extra spin.
  • Customizable Animation & Audio: Fine-tune the spin duration and animation curve. Assign custom sounds for the spin, standard rewards, and rare rewards to enhance player feedback.
  • Clean Public API: Simple, well-documented public methods (SpinFree(), SpinOnAd(), ResetCooldown()) for easy integration with your UI buttons.
  • Self-Contained State: Automatically saves its own state (cooldown timer and ad watch status) using PlayerPrefs, ensuring persistence across game sessions.
  • Reward Display: Shows a pop-up panel to celebrate the player's winnings, complete with a reward icon and amount.

🎮 How to Use

This guide will walk you through setting up the Spin Wheel in your project.

1. Initial Setup

  1. Find the SpinWheelPanel prefab located in Assets/Spin Wheel/Prefabs/.
  2. Drag and drop it into your scene hierarchy. It should be a child of a Canvas.

2. Inspector Configuration

Select the SpinWheelPanel object in your scene and look at the Spin Wheel component in the Inspector. You will need to configure the following fields:

  • UI References: Assign the required UI components. Most are already pre-assigned in the prefab.
    • Wheel Rect Transform: The RectTransform of the spinning wheel image.
    • Result Text: A TextMeshProUGUI element to display cooldown timers and win messages.
    • Spin Button: The button for the free daily spin.
    • Watch Ad Button: The button to spin after watching an ad.
    • Close Button: The button to close the spin wheel panel.
  • Reward Display Panel: Configure the pop-up that appears after a spin.
    • Reward Display Panel: The parent GameObject of the panel.
    • Reward Amount Text: A TextMeshProUGUI to show the amount won.
    • Reward Image: An Image component to show the icon of the reward (coin or gem).
  • Spinning Settings:
    • Spin Duration: How long the wheel spins in seconds (e.g., 3.0).
  • Rewards:
    • Coin Image, Gem Image: Sprites for your two currency types.
    • Rewards: An array of 8 RewardData elements, corresponding to the 8 segments on the wheel.
  • Probability Settings:
    • Probability Multiplier: A global multiplier to adjust the weight distribution. Keep at 1 for standard behavior.
  • Audio:
    • Audio Source: The AudioSource used to play sounds.
    • Spin Sound: Played when the wheel starts spinning.
    • Reward Sound: Played for common rewards.
    • Rare Reward Sound: A special sound for rewards marked as Rare or higher.
  • Animation:
    • Spin Curve: An AnimationCurve to control the easing of the spin animation (e.g., EaseInOut).

3. Configuring the Rewards Array

The Rewards array has 8 elements, representing the 8 slices of the wheel. The order is important:

  • Element 0: Top segment
  • Element 1: Top-right segment
  • Element 2: Right segment
  • ...and so on, clockwise.

For each element, you must set:

  • Name: The display name of the reward (e.g., "1,000 Coins").
  • Amount: The currency amount to award. double is used to support large numbers.
  • Type: Coins (regular currency) or Gems (premium currency).
  • Weight: The probability weight. Higher values are more common relative to other weights.
  • Rarity: Common, Uncommon, Rare, etc. Rewards marked as Rare or higher will play the rareRewardSound.

4. Integrating with UI Buttons

Connect your UI Button components' OnClick() events to the public methods in the SpinWheel.cs script:

  • Free Spin Button: Connect to SpinWheel.SpinFree().
  • Watch Ad Button: Connect to SpinWheel.SpinOnAd(). Note: You need to implement your ad provider's logic to call this method on ad completion.
  • Test/Reset Button (Optional): If you have a debug menu, connect a button to SpinWheel.ResetCooldown() to reset the 24-hour timer.

The script automatically manages the interactability of these buttons based on the cooldown status.

5. Receiving Rewards via Events

The SpinWheel does not manage player currency directly. Instead, it fires a static C# event, OnRewardWon, when a spin is complete. You must create another script (e.g., a CurrencyManager) to listen for this event and award the currency to the player.

Here is an example of how to subscribe to the event:

// In your CurrencyManager.cs or a similar game management scriptusingUnityEngine;publicclassCurrencyManager:MonoBehaviour{privatevoidOnEnable(){// Subscribe to the event when this object is enabledSpinWheel.OnRewardWon+=HandleReward;}privatevoidOnDisable(){// Unsubscribe to prevent memory leaksSpinWheel.OnRewardWon-=HandleReward;}// This method will be called by the SpinWheel when a reward is wonprivatevoidHandleReward(doubleamount,RewardTypetype){if(type==RewardType.Coins){// Add 'amount' to the player's coin balanceDebug.Log($"Player won {amount} coins!");// yourCoinVariable += amount;}elseif(type==RewardType.Gems){// Add 'amount' to the player's gem balanceDebug.Log($"Player won {amount} gems!");// yourGemVariable += amount;}// Remember to save the player's new currency balance// SavePlayerData();}}

Example: Weighted Probability

To make "5000 Coins" twice as likely to be won as "50 Gems":

  • 5000 Coins Reward: Set Weight to 20.
  • 50 Gems Reward: Set Weight to 10.

The system automatically calculates the percentage chance based on the total weight of all 8 rewards.

🚀 Installation Guide

  1. Download the latest release from the releases page.
  2. In Unity, go to Assets > Import Package > Custom Package... and select the downloaded .unitypackage file.

📄 License

This project is licensed under the MIT License.


⭐ Star this repo if it helped you!

Made with ❤️ by Autech

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 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

Repository files navigation

🎡 Autech Spin Wheel

Unity VersionVersionLicense

A powerful and production-ready Spin Wheel System for Unity. Features weighted reward probability, a daily cooldown system, watch-ad spins, and an event-driven reward system for easy integration with your game's economy.

✨ Core Features

  • Dynamic Reward Configuration: Easily set up 8 distinct rewards from the Inspector, including their name, amount, type (e.g., Coins, Gems), rarity, and probability weight.
  • Weighted Probability Engine: Precisely control the chance of landing on each reward. Higher weights mean higher probability.
  • Event-Driven Rewards: Fires a C# event (OnRewardWon) when a reward is won, allowing you to cleanly integrate it with any currency or inventory system without modifying the wheel's code.
  • Daily Cooldown & Ad Spins: Includes a built-in free daily spin with a persistent 24-hour cooldown timer. Also supports a "watch ad" button to grant an extra spin.
  • Customizable Animation & Audio: Fine-tune the spin duration and animation curve. Assign custom sounds for the spin, standard rewards, and rare rewards to enhance player feedback.
  • Clean Public API: Simple, well-documented public methods (SpinFree(), SpinOnAd(), ResetCooldown()) for easy integration with your UI buttons.
  • Self-Contained State: Automatically saves its own state (cooldown timer and ad watch status) using PlayerPrefs, ensuring persistence across game sessions.
  • Reward Display: Shows a pop-up panel to celebrate the player's winnings, complete with a reward icon and amount.

🎮 How to Use

This guide will walk you through setting up the Spin Wheel in your project.

1. Initial Setup

  1. Find the SpinWheelPanel prefab located in Assets/Spin Wheel/Prefabs/.
  2. Drag and drop it into your scene hierarchy. It should be a child of a Canvas.

2. Inspector Configuration

Select the SpinWheelPanel object in your scene and look at the Spin Wheel component in the Inspector. You will need to configure the following fields:

  • UI References: Assign the required UI components. Most are already pre-assigned in the prefab.
    • Wheel Rect Transform: The RectTransform of the spinning wheel image.
    • Result Text: A TextMeshProUGUI element to display cooldown timers and win messages.
    • Spin Button: The button for the free daily spin.
    • Watch Ad Button: The button to spin after watching an ad.
    • Close Button: The button to close the spin wheel panel.
  • Reward Display Panel: Configure the pop-up that appears after a spin.
    • Reward Display Panel: The parent GameObject of the panel.
    • Reward Amount Text: A TextMeshProUGUI to show the amount won.
    • Reward Image: An Image component to show the icon of the reward (coin or gem).
  • Spinning Settings:
    • Spin Duration: How long the wheel spins in seconds (e.g., 3.0).
  • Rewards:
    • Coin Image, Gem Image: Sprites for your two currency types.
    • Rewards: An array of 8 RewardData elements, corresponding to the 8 segments on the wheel.
  • Probability Settings:
    • Probability Multiplier: A global multiplier to adjust the weight distribution. Keep at 1 for standard behavior.
  • Audio:
    • Audio Source: The AudioSource used to play sounds.
    • Spin Sound: Played when the wheel starts spinning.
    • Reward Sound: Played for common rewards.
    • Rare Reward Sound: A special sound for rewards marked as Rare or higher.
  • Animation:
    • Spin Curve: An AnimationCurve to control the easing of the spin animation (e.g., EaseInOut).

3. Configuring the Rewards Array

The Rewards array has 8 elements, representing the 8 slices of the wheel. The order is important:

  • Element 0: Top segment
  • Element 1: Top-right segment
  • Element 2: Right segment
  • ...and so on, clockwise.

For each element, you must set:

  • Name: The display name of the reward (e.g., "1,000 Coins").
  • Amount: The currency amount to award. double is used to support large numbers.
  • Type: Coins (regular currency) or Gems (premium currency).
  • Weight: The probability weight. Higher values are more common relative to other weights.
  • Rarity: Common, Uncommon, Rare, etc. Rewards marked as Rare or higher will play the rareRewardSound.

4. Integrating with UI Buttons

Connect your UI Button components' OnClick() events to the public methods in the SpinWheel.cs script:

  • Free Spin Button: Connect to SpinWheel.SpinFree().
  • Watch Ad Button: Connect to SpinWheel.SpinOnAd(). Note: You need to implement your ad provider's logic to call this method on ad completion.
  • Test/Reset Button (Optional): If you have a debug menu, connect a button to SpinWheel.ResetCooldown() to reset the 24-hour timer.

The script automatically manages the interactability of these buttons based on the cooldown status.

5. Receiving Rewards via Events

The SpinWheel does not manage player currency directly. Instead, it fires a static C# event, OnRewardWon, when a spin is complete. You must create another script (e.g., a CurrencyManager) to listen for this event and award the currency to the player.

Here is an example of how to subscribe to the event:

// In your CurrencyManager.cs or a similar game management scriptusingUnityEngine;publicclassCurrencyManager:MonoBehaviour{privatevoidOnEnable(){// Subscribe to the event when this object is enabledSpinWheel.OnRewardWon+=HandleReward;}privatevoidOnDisable(){// Unsubscribe to prevent memory leaksSpinWheel.OnRewardWon-=HandleReward;}// This method will be called by the SpinWheel when a reward is wonprivatevoidHandleReward(doubleamount,RewardTypetype){if(type==RewardType.Coins){// Add 'amount' to the player's coin balanceDebug.Log($"Player won {amount} coins!");// yourCoinVariable += amount;}elseif(type==RewardType.Gems){// Add 'amount' to the player's gem balanceDebug.Log($"Player won {amount} gems!");// yourGemVariable += amount;}// Remember to save the player's new currency balance// SavePlayerData();}}

Example: Weighted Probability

To make "5000 Coins" twice as likely to be won as "50 Gems":

  • 5000 Coins Reward: Set Weight to 20.
  • 50 Gems Reward: Set Weight to 10.

The system automatically calculates the percentage chance based on the total weight of all 8 rewards.

🚀 Installation Guide

  1. Download the latest release from the releases page.
  2. In Unity, go to Assets > Import Package > Custom Package... and select the downloaded .unitypackage file.

📄 License

This project is licensed under the MIT License.


⭐ Star this repo if it helped you!

Made with ❤️ by Autech

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages