I developed this 3D game as a complete solo project. Its central design idea is the ability to move between direct control of a knight and a strategy view of the same battlefield.
The work was in making the systems cooperate: a selected unit changes control mode, the camera follows that decision, other units continue acting, and combat feeds into the same base-health and victory conditions.
01Select a knightStrategy view & unit management
02Take controlThird-person movement & combat
03Return to strategyAI control & resource decisions
04Resolve the battleBase health, victory & defeat
PLAYER SYSTEMS
State-based character control
Movement, running, jumping and falling connect with targeting, melee attacks, blocking, dodging and hit reactions. Health and death complete the character lifecycle.
I connected the animations to the gameplay code and iterated on behavior through repeated testing and debugging.
AI & STRATEGY
A shared battlefield
Enemy and ally AI use detection, chase and attack ranges, behavior transitions and attack cooldowns. Strategy play adds unit selection and spawning, currency costs, bases and base health.
The resource system uses passive income and unit costs. Gathering, crafting and building were planned extensions, outside this version.
TECHNICAL BREAKDOWN
Changing who controls the knight
The Strategy / Combat enum represents the active mode. Entering combat gives the selected knight player control while the other knights retain their AI behavior. The transition also coordinates input, navigation and camera configuration.
View C# — mode switching
Excerpt from the project; surrounding code is omitted.
public enum GameMode { Strategy, Combat }
// Within SwitchToCombatMode:
foreach (GameObject knight in knightRoots)
{
if (knight == null) continue;
if (NormalizeKnightRoot(knight) == NormalizeKnightRoot(SelectedKnight))
EnableCombatStack(knight);
else
EnableStrategyStack(knight, ResolveEnemyBase());
foreach (KnightSelectable selectable in knight.GetComponentsInChildren<KnightSelectable>(true))
selectable.ApplyCameraPolicy();
}
Three debugging priorities
Base attacks: getting allied knights into a valid position to damage the enemy base.
Individual hit reactions: keeping damage and reactions specific to the unit that was hit.
Camera transitions: following the selected knight and restoring a useful view when entering combat.
The current source includes base approach logic, hit filtering and camera-rig management addressing these areas. The footage below shows the resulting prototype behavior.
Ownership & scope
I implemented the gameplay code, integrated animation, assembled the world, and designed the UI and campfire main menu. I used tutorials and AI assistance as learning and debugging resources during development.
Environment and character assets are distinct from my programming and integration work; this project is not presented as an entirely self-modeled asset library.
I built and connected the gameplay, UI and animation in Unity. Melee attacks, Ki projectiles and a sustained beam interact with enemy behavior, health, energy and player progression.
The demo contains ten waves in one gameplay scene, including a final boss encounter. Super Saiyan and Instant Transmission remain planned features.
Different enemies, shared rules
Brawler enemies close the distance, shooters maintain range, and the boss combines melee, ranged and special-attack states. Wave configuration controls enemy composition and staggered spawning.
Progression & interface
Health, Ki, experience and stat allocation connect combat to progression. The pause interface brings together status, inventory and settings. PlayerPrefs persistence covers player stats and consumable counts.
TECHNICAL BREAKDOWN
Animation-driven attacks
Attack input checks cooldown and energy before entering a windup. An animation event spawns the projectile at the release point. The sustained beam adds ongoing Ki consumption, repeated damage timing and stun cleanup.
View C# — animation event flow
Excerpt from the project; surrounding code is omitted.
void TryKiBlast()
{
if (Time.time < lastKiBlastTime + kiBlastCooldown) return;
if (kiBlastPrefab == null) return;
if (playerStats != null && !playerStats.TryUseKi(kiBlastCost)) return;
lastKiBlastTime = Time.time;
isKiBlastWindup = true;
playerStats?.CancelMeditation();
}
// Called by Animation Event on last frame of kiblast animations
public void SpawnKiBlast()
{
isKiBlastWindup = false;
if (kiBlastPrefab == null) return;
AudioManager.Instance?.PlayKiBlast();
Vector2 spawnPos = (Vector2)transform.position + movement.FacingDirection * 0.5f;
GameObject blast = Instantiate(kiBlastPrefab, spawnPos, Quaternion.identity);
KiBlast kiBlast = blast.GetComponent<KiBlast>();
kiBlast.damage = kiBlastDamage * (playerStats != null ? playerStats.PowMultiplier : 1f);
kiBlast.Launch(movement.FacingDirection, kiBlastSpeed);
}
Development and UI integration by me. Sprites and animation were created with AI assistance and integrated in code. Dragon Ball characters and the original game are references for this student fan project.
04 / ADDITIONAL DEVELOPMENT
Different constraints. More ways to build.
TEAM DEMO · UNITY
Sound Spectrum
I designed and implemented the menus, screens, visual objects, effects and gameplay feedback, with a focus on visual refinement and UI polish. I also implemented score and combo logic and integrated the results screen. My project partner handled the core rhythm systems: timing, note spawning and hit detection.
I implemented this prototype using what I learned in my course. The project explores first-person movement, flight, water-related movement and day/night control. I especially enjoyed shaping the terrain and assembling the environment. Models and textures came from Unity Asset Store.
Built mainly through HackerU coursework, with additional YouTube tutorials. The recorded demo shows a tropical environment, survival meters, inventory, crafting recipes, equipment and world interactions. This project represents my practical learning in Unreal and Blueprint workflows.
A Zippo-style hard-surface modeling study, from construction to presentation.
ZBRUSH
Sonic character study
A character model created from scratch, using Sonic as the design reference.
SUBSTANCE PAINTER
Textured blade
A self-built weapon asset with a material and texture study.
06 / ABOUT
From building assets to building behavior.
I’m Mor, a Unity developer and gameplay programmer based in Tel Aviv.
My development path began with game creation and 3D work at HackerU, then continued into Unity and C# at SVCollege. I enjoy the point where individual mechanics become a coherent playable experience.
My projects span solo development, team collaboration and focused coursework. Alongside my studies, my work as a restaurant and bar manager at Ouzeria has involved coordinating people and responsibilities in a busy environment.