Här kommer nästa lektion, där vi fortsätter att utveckla spelet genom att implementera ett system för att återuppta spelet från där spelaren senast slutade, vidareutveckla power-up-systemet och lägga till mer komplexa spelfunktioner. Vi kommer också att arbeta med att balansera svårighetsgrad och skapa fler nivåer.
För att spelare ska kunna fortsätta spela där de senast slutade, behöver vi spara spelarens position, hälsa och aktuella nivå. Detta gör vi genom att spara datan till PlayerPrefs, som lagrar information lokalt på användarens dator.
public void SavePlayerProgress()
{
PlayerPrefs.SetFloat("PlayerPosX", transform.position.x);
PlayerPrefs.SetFloat("PlayerPosY", transform.position.y);
PlayerPrefs.SetInt("PlayerHealth", currentHealth); // Spara hälsa
PlayerPrefs.Save();
Debug.Log("Spelarens framsteg har sparats.");
}
public void LoadPlayerProgress()
{
if (PlayerPrefs.HasKey("PlayerPosX"))
{
float x = PlayerPrefs.GetFloat("PlayerPosX");
float y = PlayerPrefs.GetFloat("PlayerPosY");
transform.position = new Vector2(x, y);
currentHealth = PlayerPrefs.GetInt("PlayerHealth", maxHealth); // Ladda hälsa, eller sätt till max om inget är sparat
Debug.Log("Spelarens framsteg har laddats.");
}
}
SavePlayerProgress() när spelaren når en specifik punkt (t.ex. när de klarar en nivå).LoadPlayerProgress() i Start()-metoden i spelarens skript när spelet startar.public void SaveLevelProgress(int currentLevel)
{
PlayerPrefs.SetInt("CurrentLevel", currentLevel);
PlayerPrefs.Save();
Debug.Log("Nivå " + currentLevel + " har sparats.");
}
public int LoadLevelProgress()
{
return PlayerPrefs.GetInt("CurrentLevel", 1); // Ladda aktuell nivå, eller starta på nivå 1 om inget är sparat
}
SaveLevelProgress() när spelaren klarar en nivå, och LoadLevelProgress() när spelet startar för att återgå till rätt nivå.Nu ska vi skapa mer komplexa power-ups, som till exempel kombinationer av power-ups eller power-ups som har mer avancerad logik, t.ex. att påverka andra fiender eller hela spelvärlden.
PowerUp.cs för att skapa en power-up som kombinerar två eller fler effekter. Exempelvis kan vi skapa en power-up som både ökar spelarens hastighet och styrka:void ApplyPowerUp(PlayerController player)
{
switch (powerUpType)
{
case PowerUpType.Health:
player.IncreaseHealth(20);
break;
case PowerUpType.SpeedAndStrength:
StartCoroutine(player.IncreaseSpeed(powerUpDuration));
StartCoroutine(player.IncreaseStrength(powerUpDuration));
break;
}
}
public void SlowDownEnemies(float duration)
{
Enemy[] enemies = FindObjectsOfType<Enemy>();
foreach (Enemy enemy in enemies)
{
enemy.speed /= 2; // Halvera fiendernas hastighet
}
StartCoroutine(ResetEnemySpeedAfterDuration(duration, enemies));
}
IEnumerator ResetEnemySpeedAfterDuration(float duration, Enemy[] enemies)
{
yield return new WaitForSeconds(duration);
foreach (Enemy enemy in enemies)
{
enemy.speed *= 2; // Återställ hastigheten
}
}
public void ChangeWorldGravity(float newGravity, float duration)
{
Physics2D.gravity = new Vector2(0, newGravity); // Ändra gravitationen i spelvärlden
StartCoroutine(ResetGravityAfterDuration(duration));
}
IEnumerator ResetGravityAfterDuration(float duration)
{
yield return new WaitForSeconds(duration);
Physics2D.gravity = new Vector2(0, -9.81f); // Återställ standardgravitationen
}
Att balansera spelet är viktigt för att hålla det utmanande men rättvist. Vi ska nu gå igenom några sätt att balansera svårighetsgraden och designa nivåer som passar spelets progression.
public void AdjustDifficulty(int currentLevel)
{
// Öka fiendernas hälsa och skada med varje nivå
foreach (Enemy enemy in FindObjectsOfType<Enemy>())
{
enemy.maxHealth += currentLevel * 10; // Öka hälsan baserat på nivå
enemy.damage += currentLevel * 5; // Öka skadan
}
}
Skapa nivåer med olika teman:
Lägg till unika hinder:
Skapa en progression av power-ups:
Justera mängden resurser:
I nästa lektion kommer vi att:
Spelet börjar nu få mer djup och komplexitet, och vi
kommer att fortsätta att arbeta mot en mer polerad och sammanhängande upplevelse!