TopDown Engine Extensions
This repository contains community-created extensions for the TopDown Engine, More Mountains' bestselling top down games solution, available on the Unity Asset Store. These extensions can be anything, from an alternate take on an existing Character Ability, to brand new ones, or new ways to use the engine.
Contents
- AngleBasedAutoAim, by AlexanderGheorghe : extensions of WeaponAutoAim2D/3D that aim at the target with the smallest angle between the movement direction and the character-target direction instead of the closest target
- AStar Pathfinder3DAiAction, by ZUR1EL : Add this Ai Action to your enemy AiBrain to allow A* to control them.
- AIAction2DPathFinding, by Gabriel Elkind : an A* Pathfinding Project integration
- AIActionMoveTowardsPlayer2D, by Efreeti : makes the character move up to the specified MinimumDistance in the direction of the target.
- AI Brain Extensions, by TheBitCave : These are hosted separately, at https://github.com/thebitcave/ai-brain-extensions-for-topdown-engine, and provide a way to interact with AI Brains using visual nodes.
- AIDecisionPlayerIsInSameRoom, by 石田ぎがしー Gigacee, an AI decision that returns true if the player is in one of the specified rooms, false otherwise.
- AI Performance Manager, by Force : A system used to disable AIs based on distance to the player for better performance
- BlockAbilities, by AlexanderGheorghe: scripts for blocking selected character abilities while attacking
- Boomerang, by AlexanderGheorghe : a component that makes Projectile decelerate and return to the owner when it stops. works in both 2D and 3D. includes 3D demo, unitypackage for easy installation and boomerang model from The Base Mesh
- Character8WayGridMovement, by @jcphlux : adds support for 8-way grid movement.
- CharacterInventoryWeaponChanger, by AlexanderGheorghe : this script allows you to use scroll wheel or number keys to change your weapon to any weapon from your MainInventory
- CharacterProne, by AlexanderGheorghe : duplicate of CharacterCrouch that allows you to have different animations (Animator parameters "Prone" and "ProneMoving") and different collider resizing, useful for making a character prone like in Metal Gear Solid, for example
- ClimbingController3D, by AlexanderGheorghe : An extension of TopDownController3D which gives you the option (activated by default) to have CharacterDash3D climb slopes instead of stopping at obstacles and to move the character downwards while dashing, at a configurable speed. It uses CharacterController.Move(), which means you no longer need to put objects to avoid when dashing on the layers of the obstacles layer mask, because the CharacterController will be handling collisions.
- Control Freak 2 Integration, by christougher : support for the input solution Control Freak 2, available on the Asset Store.
- ConveyorBelts, by AlexanderGheorghe, : 3D conveyor belts with implementations for moving Characters and Rigidbodies
- GrapplingHook, by AlexanderGheorghe, : 3D grappling hook implementation with rope animation. configurable to pull owner towards hit object or the other way around
- GridPathfinding, by AlexanderGheorghe, : grid versions of CharacterPathfinder3D and CharacterPathfindToMouse3D
- HeldButtonZone, by Dougomite : a button activated zone for which the player needs to keep the button pressed for a certain duration to activate
- InvertedMeshConeOfVision2D, by AlexanderGheorghe : version of MMConeOfVision2D with inverted mesh (mesh is where the character doesn't have vision)
- MarbleCharacter, by AlexanderGheorghe : scripts that enable creating marble type characters. includes example character prefab
- MMFeedbackLootDrops, by Dougomite : an MMFeedback that spawns "loot" (item pickers or any object you want) in a certain radius at weighted chances
- MouseControls3D, by AlexanderGheorghe : a collection of extension scripts that implement Diablo-like mouse controls (double click to run, click and hold to make the character follow mouse position, click an enemy to pathfind to it and attack when in line of sight and in range). requires adding the public float Range = 10f; declaration to Weapon.cs so the character knows when it is in range to attack, depending on the weapon he has equipped. includes unitypackage for easy installation and an example character prefab
- MultiInventoryDetails, by men8 : an addon to handle all active inventories on scene. See this repo for more info.
- MultipleKeyOperatedZone, by AlexanderGheorghe : extension of KeyOperatedZone that allows for requiring multiple keys. useful for trading a number of inventory items for something, for example when used in conjunction with InventoryEngineChest for setting up a simple shop system, where the keys are coins
- MultipleWeapons, by AlexanderGheorghe : two scripts, extensions of CharacterHandleWeapon and InputManager that go together to allow you to have your characters handle any number of weapons you want at once, from 0 to 1000000, the possibilities are infinite! includes an InputManager.asset with already configured bindings for the second weapon reload and third weapon input (2, 3 for reloading second and third weapon, middle mouse for shooting the third weapon)
- PathfindingAvoidance, by septN : this CharacterPathfinder3D extension lets you have characters carve the navmesh and avoid each other. You'll need to add a NavMeshObstacle to your character(s), check "Carve" and uncheck "Carve Only Stationary"
- Perspective, by AlexanderGheorghe : a collection of scripts that allows toggling between top down and first person perspectives. includes demo scene based on Loft3D and unitypackage
- PickableAbilities, by AlexanderGheorghe : PickableItem extension that allows configuring a list of abilities to be enabled on the picking character
- PredictiveAim3D, by ZUR1EL : Add this Ai Action to your enemy AiBrain in replace of AiActionShoot3D to allow your enemy to lead targets.
- ProgressionSystem, by AlexanderGheorghe : a simple, extendable, scriptable object based progression system (get experience -> level up -> update stats). uses AnimationCurves for value management, as explained in this video
- ProjectileHoming, by AlexanderGheorghe : a component that gets a target on spawn and rotates Projectile's direction towards the target every frame, stopping if it misses the target. works in both 2D and 3D
- ReferenceFrameCharacterMovement, by Necka : a specialized variant of the Character Movement ability that corrects for a reference frame camera
- RewiredIntegration, by Tony Li [Pixel Crushers] : support for the input solution Rewired, available on the Unity Asset Store.
- RootMotionMovement, by AlexanderGheorghe : allows root motion animations to move the top down controller 3D
- SpecificInvulnerabilityHealth, by AlexanderGheorghe : an extension of Health that calculates invulnerability per instigator GameObject (DamageOnTouch usually). this allows you to have overlapping damage on touch all affect your characters and count down invulnerability individually
- SpeedMultipliers, by AlexanderGheorghe : extension scripts that add speed multipliers. includes demo of slowing down all enemy characters while the player continues to move at normal speed
- Stamina, by AlexanderGheorghe : simple stamina that gets consumed when running or dashing and stops either if it's too low
- StatusEffectSystem, by AlexanderGheorghe : a simple, extendable, scriptable object and event based status system. includes 5 status effect examples, a demo scene and a .unitypackage for easy installation
- TankControls, by AlexanderGheorghe : scripts for implementing tank controls (horizontal axis rotates player model, vertical moves the character along the direction it's facing). set Movement to Strict 2 Directions Vertical and replace CharacterOrientation3D with CharacterRotation
- TemporaryEffects, by AlexanderGheorghe : scripts for implementing temporary effects. includes damage, projectile speed and weapon delay between use multipliers and projectile weapon spread changing. see demo scene for an example
- ToggleCrouch, by AlexanderGheorghe : CharacterCrouch extension that makes the crouch button toggle instead of having to hold it to keep crouching
- TriggerEventOnAreaClear, by AlexanderGheorghe : a script that triggers a UnityEvent when all the targets within an area (defined by a 2D or 3D collider) have been destroyed (useful for example in the room system to open doors/portals or spawn chests when all enemies have been killed). tag targets with the respective 2D/3D scripts included
- TwinStickShooterHandleWeapon, by AlexanderGheorghe : an extension of CharacterHandleWeapon that gives you the option to shoot on receiving SecondaryMovement input, with configurable minimum magnitude of the input
- TypedDamage, by AlexanderGheorghe : a collection of extension scripts that implement typed damage with scriptable objects, like explained in this video.
- Vehicle, by AlexanderGheorghe : allows creating vehicles that the player character can enter, drive and exit. uses Hayden Donnelly's Vehicle-Physics.
- WeaponCooldownProgressBar, by AlexanderGheorghe : put this component on a MMProgressBar and it will be updated with the weapon's cooldown progress
- WeaponLaserSightEx, by Velsthinez : an extended version of the base WeaponLaserSight to create a widening laser when player turns
Why aren't these in the engine directly?
Because they weren't created by Renaud, the creator of the TopDown Engine, because I want to keep the Engine simple to use and just pouring features into it (as cool as they may be) wouldn't be such a great idea, and because the Engine is meant to be extended upon, and these extensions are great examples of that.
Do I need to pay something? Give credit?
No you don't, it's all free to use. Feel free to give credit to their creators though (they'll mention that in the class' comments if they want to).
Are more extensions coming? Can I contribute?
Absolutely, contributions are always welcome. If you want to contribute, drop me a line using the form on this page, or create a pull request on this very repository.
Hey this extension is not working!
You'd need to contact the creator of the extension if they've put their contact info in the class somewhere. If not, not much I can do, I won't provide support for these.