Forum begins after the advertisement:
[Before part 15] Adding total experience earn
Home › Forums › Video Game Tutorial Series › Creating a Rogue-like Shoot-em Up in Unity › [Before part 15] Adding total experience earn
- This topic has 1 reply, 2 voices, and was last updated 3 weeks, 5 days ago by Terence.
-
AuthorPosts
-
November 15, 2024 at 12:05 am #16335::
I made this for you, code lovers <3 (only in pause screen for moment, but easy to adapte for in game screen)
3 possibles ways with comment, earn only by gems, only by levels, or gems + level
Step 1
Step 2
Change the name in inspector and change it names for whatever you want
Step 3
Minor change in the code:
In game Manager.cs
<code> [Header("Current Stat Displays")] public Text currentExperienceTotal; // <= Add public Text currentHealthDisplay; </code>
In CharacterScriptableObject.cs
<code> [SerializeField] float experienceTotal; public float ExperienceTotal { get => experienceTotal; private set => experienceTotal = value; } </code>
In PlayerStats.cs
<code> CharacterScriptableObject characterData; // Current Stats float currentExperienceTotal; <= Add this line float currentHealth; float currentRecovery; float currentMoveSpeed; float currentMight; float currentProjectileSpeed; float currentMagnet; </code>
<code> public float CurrentExperienceTotal{ get { return currentExperienceTotal; } set{ // Check if the value has changed if(currentExperienceTotal != value){ currentExperienceTotal = value; // Update the real time value of the stat if(GameManager.instance != null){ GameManager.instance.currentExperienceTotal.text = "Experience Total: " + currentExperienceTotal; } // Add any additional logic here that needs to be executed when values change } } } </code>
Add this lines in Awake() and Start ()
<code> void Awake(){ characterData = CharacterSelector.GetData(); CharacterSelector.instance.DestroySingleton(); inventory = GetComponent<InventoryManager>(); // Assign the variables CurrentExperienceTotal = characterData.ExperienceTotal; // <= Add CurrentHealth = characterData.MaxHealth; CurrentRecovery = characterData.Recovery; CurrentMoveSpeed = characterData.MoveSpeed; CurrentMight = characterData.Might; CurrentProjectileSpeed = characterData.ProjectileSpeed; CurrentMagnet = characterData.Magnet; // Spawn the starting weapon SpawnWeapon(characterData.StartingWeapon); SpawnWeapon(secondWeaponTest); SpawnPassiveItem(firstPassiveItemTest); SpawnPassiveItem(secondPassiveItemTest); } void Start(){ // Initialize the experience cap as the first experience cap increase experienceCap = levelRanges[0].experienceCapIncrease; // Set the current Stats display GameManager.instance.currentExperienceTotal.text = "Experience Total: " + currentExperienceTotal; // <= Add GameManager.instance.currentHealthDisplay.text = "Health: " + currentHealth; GameManager.instance.currentRecoveryDisplay.text = "Recovery: " + currentRecovery; GameManager.instance.currentMoveSpeedDisplay.text = "Move Speed: " + currentMoveSpeed; GameManager.instance.currentMightDisplay.text = "Might: " + currentMight; GameManager.instance.currentProjectileSpeedDisplay.text = "Projectile Speed: " + currentProjectileSpeed; GameManager.instance.currentMagnetDisplay.text = "Magnet: " + currentMagnet; // Set the current chosen Character data GameManager.instance.AssignChosenCharacterUI(characterData); } </code>
Here is an introduction to earn money by gems With the exact following code, xp is only based on levels Comments can help to chose the method, need other code if you want separe gems and levels
public void IncreaseExperience(int amount){ // Adds gem experience if activated // Activate this line to only count gems in CurrentExperienceTotal // CurrentExperienceTotal += amount; experience += amount; LevelUpChecker(); }
void LevelUpChecker(){ int experienceLvl = 0; // Used to calculate experience gained by level, if activated // Loop to handle multiple level-ups if experience exceeds the cap multiple times while(experience >= experienceCap){ level++; // Adds level-based XP to CurrentExperienceTotal, if desired // Activate this line if CurrentExperienceTotal should only increase by level // CurrentExperienceTotal += level * 10; experienceLvl += level * 10; // Increments experienceLvl with level-based bonus experience -= experienceCap; int experienceCapIncrease = 0; foreach(LevelRange range in levelRanges){ if(level >= range.startLevel && level <= range.endLevel){ experienceCapIncrease = range.experienceCapIncrease; break; } } experienceCap += experienceCapIncrease; } // Updates CurrentExperienceTotal if you want it to increase with both gems and level // Activate this line to combine XP from gems and level // If you want only gem XP, you can comment out this line CurrentExperienceTotal = experienceLvl + experience; }
To Enable or Disable XP Sources:
- XP only with gems: Activate the line CurrentExperienceTotal += amount; in IncreaseExperience, and comment out CurrentExperienceTotal = experienceLvl + experience; in LevelUpChecker.
- Combined XP from gems and level: Leave CurrentExperienceTotal = experienceLvl + experience; active in LevelUpChecker, and add CurrentExperienceTotal += amount; in IncreaseExperience.
has upvoted this post. November 15, 2024 at 10:31 pm #16358 -
AuthorPosts
- You must be logged in to reply to this topic.
Advertisement below: