In periode 2 van schooljaar 2024 – 2025 kregen we een slideshow en kon je kiezen welke game je moest namaken. Ik had toen Ultrakill gekozen en gingen we samenwerken met Game-Artists. Het groepje bestond uit 3 Game-Developers en 3 Game-Artists. We deden er ongeveer 10 weken over om het spel na te maken.

Health en stamina systeem
public class PlayerHealth : MonoBehaviour
{
[Header("Health Settings")]
[SerializeField] private float maxHealth = 100f;
private float currentHealth;
[Header("UI")]
public Slider healthBar;
public GameObject deathScreen;
void Start()
{
//Geeft de speler max health als je begint met het spel.
currentHealth = maxHealth;
if (healthBar != null)
{
healthBar.maxValue = maxHealth;
healthBar.value = currentHealth;
}
if (deathScreen != null)
{
deathScreen.SetActive(false);
}
}
void Update()
{
//Geeft 10 damage als je op Q drukt.
if (Input.GetKeyDown(KeyCode.Q))
{
TakeDamage(10f);
}
//Geeft de speler 10 health terug als je op E drukt.
if (Input.GetKeyDown(KeyCode.E))
{
Heal(10f);
}
//Restart de game als je dood gaat en een death screen krijgt.
if (deathScreen.activeSelf && Input.GetKeyDown(KeyCode.R))
{
RestartGame();
}
}
public void TakeDamage(float damage)
{
//Zorgt ervoor dat als je damage krijgt dat het van de healthbar af gaat.
currentHealth -= damage;
currentHealth = Mathf.Clamp(currentHealth, 0, maxHealth);
if (healthBar != null)
{
healthBar.value = currentHealth;
}
//Als de speler minder dan 0 health heeft gaat de speler dood.
if (currentHealth <= 0)
{
Die();
}
}
public void Heal(float amount)
{
//Zorgt ervoor dat als je healed dat je health bij je healthbar krijgt.
currentHealth += amount;
currentHealth = Mathf.Clamp(currentHealth, 0, maxHealth);
if (healthBar != null)
{
healthBar.value = currentHealth;
}
}
private void Die()
{
//Zorgt ervoor dat als je dood bent dat het de deathScreen activeert en de tijd van de spel op stop zet.
Debug.Log("Player is dead!");
if (deathScreen != null)
{
deathScreen.SetActive(true);
}
Time.timeScale = 0f;
}
public void RestartGame()
{
//Zorgt ervoor dat als je de spel restart dat de tijd weer doorgaat en dat de scene wordt terug geladen.
Time.timeScale = 1f;
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
}Health script
public class PlayerDash : MonoBehaviour
{
[Header("Movement Settings")]
public float moveSpeed = 5f;
public float dashSpeed = 20f;
public float dashDuration = 0.2f;
public float dashCooldown = 1f;
private CharacterController controller;
private Vector3 moveDirection;
private bool isDashing = false;
private float dashTime;
private float lastDashTime;
[Header("Camera Settings")]
public Transform cameraTransform;
public float dashShakeIntensity = 0.1f;
[Header("Stamina Settings")]
public int maxDashes = 3;
private int currentDashes;
public float staminaRechargeTime = 3f;
private float staminaRechargeTimer;
[Header("UI")]
public Slider staminaBar;
void Start()
{
//De speler begint met max 3 dashes als je de game opstart
controller = GetComponent<CharacterController>();
currentDashes = maxDashes;
if(staminaBar != null)
{
staminaBar.maxValue = maxDashes;
staminaBar.value = currentDashes;
}
}
void Update()
{
if (!isDashing)
{
HandleMovement();
HandleDashInput();
}
else
{
DashMove();
}
RechargeStamina();
}
//Zorgt ervoor dat de player kan bewegen in de goeie directie.
void HandleMovement()
{
float moveX = Input.GetAxis("Horizontal");
float moveZ = Input.GetAxis("Vertical");
moveDirection = (cameraTransform.forward * moveZ + cameraTransform.right * moveX).normalized;
controller.Move(moveDirection * moveSpeed * Time.deltaTime);
}
//Zorgt ervoor dat de player max 3 keer kan dashen met Left shift.
void HandleDashInput()
{
if (Input.GetKeyDown(KeyCode.LeftShift) && currentDashes > 0)
{
StartDash();
}
}
//Zorgt ervoor dat de dash begint en neemt ook stamina af als je dashed.
void StartDash()
{
isDashing = true;
dashTime = Time.time + dashDuration;
lastDashTime = Time.time;
currentDashes--;
if (staminaBar != null)
{
staminaBar.value = currentDashes;
}
}
//Zorgt ervoor dat de player dashed in de goeie richting met de juiste velocity.
void DashMove()
{
Vector3 dashVelocity = moveDirection * dashSpeed;
controller.Move(dashVelocity * Time.deltaTime);
cameraTransform.localPosition += Random.insideUnitSphere * dashShakeIntensity;
if (Time.time >= dashTime)
{
isDashing = false;
cameraTransform.localPosition = new Vector3(0, 1.8f, 0);
}
}
//Laat de player stamina rechargen na een paar secondes.
void RechargeStamina()
{
if (currentDashes < maxDashes)
{
staminaRechargeTimer += Time.deltaTime;
if(staminaRechargeTimer >= staminaRechargeTime)
{
currentDashes++;
staminaRechargeTimer = 0;
if(staminaBar != null)
{
staminaBar.value = currentDashes;
}
}
}
}
}
Dash script