Skip to content

miventech/ExperienceSystemForUnity

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Miventech Experience System

Modular experience and leveling system for Unity with four configurable scaling modes:

  • Linear
  • Polynomial
  • Exponential
  • Time-based

Features

  • Native C# events for performance and decoupled design
  • Custom editor previews for XP and time-based progression
  • Enemy XP drop calculator included
  • Package-ready structure for Unity Package Manager

Installation

  1. Open Unity Package Manager.
  2. Choose Add package from disk....
  3. Select Assets/Libs/Miventech.ExperienceSystem/package.json.

Usage

  • Add ExperienceLevelSystem to a GameObject to manage player XP and levels.
  • Add ExperienceEnemyDropCalculator to enemy prefabs to calculate XP reward on defeat.
  • Use Miventech.ExperienceSystem.AddXP(amount) to grant XP in Linear/Polynomial/Exponential modes.
  • Subscribe to events:
    • OnLevelUp
    • OnXPChanged
    • OnMaxLevelReached

Examples

1. Example Events

using Miventech.ExperienceSystem;
using UnityEngine;

public class PlayerHUD : MonoBehaviour
{
    [SerializeField] private ExperienceLevelSystem Miventech.ExperienceSystem;

    private void OnEnable()
    {
        Miventech.ExperienceSystem.OnLevelUp       += HandleLevelUp;
        Miventech.ExperienceSystem.OnXPChanged     += HandleXPChanged;
        Miventech.ExperienceSystem.OnMaxLevelReached += HandleMaxLevel;
    }

    private void OnDisable()
    {
        Miventech.ExperienceSystem.OnLevelUp       -= HandleLevelUp;
        Miventech.ExperienceSystem.OnXPChanged     -= HandleXPChanged;
        Miventech.ExperienceSystem.OnMaxLevelReached -= HandleMaxLevel;
    }

    private void HandleLevelUp(int oldLevel, int newLevel)
    {
        Debug.Log($"Level up! {oldLevel}{newLevel}");
        // Update level label, play animation, etc.
    }

    private void HandleXPChanged(float currentXP, float xpToNext)
    {
        float progress = currentXP / xpToNext; // [0, 1]
        Debug.Log($"XP: {currentXP:F0} / {xpToNext:F0}  ({progress:P0})");
        // Update XP bar, etc.
    }

    private void HandleMaxLevel()
    {
        Debug.Log("Max level reached!");
    }
}

2. Example Set XP

using Miventech.ExperienceSystem;
using Miventech.ExperienceSystem.Tools;
using UnityEngine;

public class Enemy : MonoBehaviour
{
    [SerializeField] private ExperienceEnemyDropCalculator xpDrop;
    [SerializeField] private ExperienceLevelSystem playerExperience;

    public void Die()
    {
        float reward = xpDrop.XPDrop;
        playerExperience.AddXP(reward);
        Debug.Log($"Enemy defeated. Granted {reward:F1} XP.");
        Destroy(gameObject);
    }
}

3. Read Level

using Miventech.ExperienceSystem;
using UnityEngine;
using UnityEngine.UI;

public class XPBar : MonoBehaviour
{
    [SerializeField] private ExperienceLevelSystem Miventech.ExperienceSystem;
    [SerializeField] private Slider slider;
    [SerializeField] private Text levelLabel;

    private void Update()
    {
        slider.value   = Miventech.ExperienceSystem.XPProgress;          // [0, 1]
        levelLabel.text = $"Lv. {Miventech.ExperienceSystem.Level}";
    }
}

4. Mode TimeBased – Pause

using Miventech.ExperienceSystem;
using UnityEngine;

public class PauseManager : MonoBehaviour
{
    [SerializeField] private ExperienceLevelSystem Miventech.ExperienceSystem;

    public void OpenMenu()
    {
        Miventech.ExperienceSystem.TimePaused = true;
    }

    public void CloseMenu()
    {
        Miventech.ExperienceSystem.TimePaused = false;
    }
}

5. use Calculator Experience

using Miventech.ExperienceSystem.Tools;
using UnityEngine;

public class EnemyScaler : MonoBehaviour
{
    [SerializeField] private ExperienceEnemyDropCalculator calculator;

    private void Start()
    {
        for (int level = 1; level <= 10; level++)
        {
            float xp = calculator.CalculateXPDrop(level);
            Debug.Log($"Level {level} enemy → {xp:F1} XP");
        }
    }
}

Package details

  • Package name: com.miventech.Miventech.ExperienceSystem
  • Version: 1.0.0
  • Supported Unity: 2020.1 and newer

About

Modular experience and leveling system for Unity with linear, polynomial, exponential, and time-based scaling.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages