A small Unity (C#) project made mainly for studying and practicing C# gameplay programming (MonoBehaviours, physics, UI, coroutines, layers/masks, etc.).
This repo was originally created for GameLab 24.1 (Seconds) Jam with the theme "Reaching Higher".
- Learn and practice C# scripting in Unity
- Read and modify simple gameplay systems:
- player movement logic
- cooldowns
- UI counters
- physics collisions
- spawning / instantiation
- camera control
- simple enemy behaviour + ragdoll
- The game starts in a Start Menu and only begins when the player right-clicks.
- When starting, it enables:
- in-game HUD
- gameplay prefabs
PlayerController+PlayerComboController
- A 24.1 seconds countdown runs using a coroutine and updates a
TextMeshProUGUItimer. - When the timer reaches 0, the game switches to the End Menu state.
(See: GameStart.cs, GameEnd.cs)
- Player movement is based on teleporting to the mouse position (raycast from camera to the world).
- Teleport has a cooldown.
- Teleport triggers:
- animation (
PlayerTeleport) - audio
- camera shake
- a teleport VFX (
tpEffect)
- animation (
- There is also an optional teleport preview overlay (
tpOverlay3d) when enabled. - If the player is near an enemy, teleport can also rotate the player towards that enemy.
(See: PlayerController.cs)
- Holding left click:
- stops player rigidbody velocity
- enables an attack panel (
AtackPanel) - makes arms material transparent (alpha changes)
- sets the player into “attacking” animation/state
- While attacking, the character rotates:
- towards the nearest enemy inside a detection radius, or
- towards the mouse cursor hit point if no enemy is close.
(See: PlayerComboController.cs)
- An
ATKControlspawns an arm prefab at random points on an interval. - The spawned arm gets a
CollisionDetectorthat reports hits when it collides with an enemy layer. - When hitting an enemy:
- spawns a hit effect prefab
- increments the hit counter HUD
- triggers camera shake
- applies a “hit cooldown” (so the hit feedback is gated)
(See: ATKControl.cs, CollisionDetector.cs, ArmFoward.cs, HitHudCounter.cs)
- Score UI simply mirrors the hit counter value.
(See: GameScore.cs)
There are enemy behaviours like:
- Walking enemy that moves forward with physics forces, limits max speed, picks random walk animation + random material, and can die on collisions with certain layers.
- Ragdoll toggling by disabling animator and enabling child rigidbodies/collisions.
(See: EnemyBehaviourWalking.cs, EnemyBehaviour.cs, RagDollBehaviour.cs)
- Mouse wheel changes a
Stagevalue. - Stage selects a camera position from a list, and if it exceeds the list it starts moving the camera pivot up by “levels”.
(See: LevelAndLayer.cs, CameraChangePosition.cs, CamLayerControl.cs)
-
Right Mouse Button
- Start the game (when in the start menu)
- Teleport (during gameplay)
-
Left Mouse Button (hold)
- Attack mode / aim attacks (rotate towards enemy or cursor)
-
Mouse Wheel
- Change “Stage” / camera level
- Built in Unity using C# scripts (
Assets/Scripts) - Uses TextMeshPro for UI text
- Uses physics (Rigidbody, Colliders) heavily for movement + collision gameplay
Assets/Scripts/– gameplay code (teleport, attack, enemies, camera, UI)
This project is meant for learning and experimentation. Code is intentionally simple and jam-style.