My AssetStore Link

Unity Store Link - Click to see all the Song's work that has been put on Unity AssetStore



TDTK



TowerDefenseToolKit (TDTK) is a an easy to use and flexible Unity game engine coding framework designed for construction of TowerDefense(TD) game. The aim of the toolkit is to allow as many variant of TD game as possible, with maximum flexibility to individual level design. It's designed with integration of custom asset in mind. Finally the toolkit is written with non-coder in mind so no coding skill is required to use it.

Here's a quick overview video to get an idea of how all things work.


Here's this web-demo that show case some example levels made with TDTK. All the content/assets used are included in the package. Each individual level in the demo are available as example scene in the package. The model used for towers and creep are available separately here.



Some notable features of TDTK:
  • Support a wide variety of gameplay mechanic with tons of customization option
  • Easy-to-use and flexible path system that gives almost unlimited design option
  • Support a variety of units roles (turret, support, spawner, etc.) for both towers and creeps
  • Plenty of stats to configure for various unit-status/effect/buff/debuff
  • Support procedural spawn generation and endless mode
  • Ability system  that supports custom player ability
  • Perk system that support building of custom tech-tree/skill-book
  • Compatible with mobile device
  • Easy integration of custom model/asset
  • No coding required (everything can be done via editors)
  • Full c# source code included  

*TDTK has just gone through a major update to version4.0. 






Following are screenshots taken from the demo







Following are screenshots showing the modular unit set



Some of the custom editor for TDTK




Thanks for reading!!


One of the top paid 'complete projects' on AssetStore, TowerDefenseToolKit (TDTK) is a an easy to use and flexible Unity game engine coding framework designed for construction of TowerDefense(TD) game. The aim of the toolkit is to allow as many variant of TD game as possible. It's designed with integration of custom asset in mind. The toolkit is written with non-coder in mind so no coding skill is required to use it. It does comes with detailed documentation about using the toolkit. The code are adequately documented should you wish to do your own modification.

The various TD level setup in following demo should gives a glimpse of what TDTK is capable of. Please note that due to the multiple game rules combination and semi open end configuration supported by the toolkit, the levels in this demo are only some of the setup available. There are many more possible setup.


The demo are constructed using Unity default and standard asset, as well as custom assets made specifically for this toolkit. All asset seen in the demo (with the exception of skybox) are all included in the package. Each scene in the demo are available as example scene in the package.


One of the top paid 'complete projects' on AssetStore, TowerDefenseToolKit (TDTK) is a an easy to use and flexible Unity game engine coding framework designed for construction of TowerDefense(TD) game. The aim of the toolkit is to allow as many variant of TD game as possible. It's designed with integration of custom asset in mind. The toolkit is written with non-coder in mind so no coding skill is required to use it. It does comes with detailed documentation about using the toolkit. The code are adequately documented should you wish to do your own modification.

The various TD level setup in following demo should gives a glimpse of what TDTK is capable of. Please note that due to the multiple game rules combination and semi open end configuration supported by the toolkit, the levels in this demo are only some of the setup available. There are many more possible setup.


The demo are constructed using Unity default and standard asset, as well as custom assets made specifically for this toolkit. All asset seen in the demo (with the exception of skybox) are all included in the package. Each scene in the demo are available as example scene in the package.


95 comments:

  1. Do you have any information on the multiplayer support?

    ReplyDelete
    Replies
    1. Unfortunately there's no multiplayer support.

      Delete
  2. Is there documentation included with the purchase...? Will there be a video tutorial out?

    ReplyDelete
    Replies
    1. Yes, there's a pdf documentation included in the package. I would be happy to let you have a preview if you send me an email at k.songtan@gmail.com.

      As for video, I like to make a few tutorial videos about it but there's no telling when is that going to happen. So I wouldnt count on it.

      Delete
  3. Hello,

    I'm unable to create a custom shooting tower. It's possible to build a tower on a square, but it won't fire my custom bullet(A sphere, it has the shooting object script and it's added to the tower through the Tower manager) Is there any step I might be missing?

    Thanks in advance

    ReplyDelete
    Replies
    1. I found that the bullet is created in the scene, but somewhere far far away from the game. Upon attaching the bullet to another tower, it fires correctly

      Delete
    2. In that case, my guess is your tower shootpoint is not positioned correctly. If you have assigned a shootpoint to the tower, make sure it's in the position where you want the shootObject to fired from.

      Delete
  4. Hi Song!

    Currently using 2.x version of this package and the creeps are overlapping each other when melee attacking towers. Is this solved on 3.x ? Thanks!

    ReplyDelete
    Replies
    1. Unfortunately no. Unit overlapping will still happen in v3.0 under some circumstance.

      Delete
  5. Ok. Thank you for quick answer!

    ReplyDelete
  6. Does this toolkit also support upgrading towers using different models and build/upgrade animations?

    ReplyDelete
    Replies
    1. Yes. You can use custom model for each level of your tower. Build and upgrade anmation are supported too. But I have to say unless you are familiar with Unity's animation system (thanks to the way mecanim works), it can be quite confusing to setup and get right at first.

      Delete
  7. Thanks. The feature list also mentions the ability to have support creeps. Can you control their movements? And can these be upgraded as well?

    ReplyDelete
    Replies
    1. No that's not what it means. The framework doesnt support any reverse TD element. What it means is you can have creeps that attack back at tower or buff other creep. It's still non-interactable creep that follow a path, only less passive.

      Delete
  8. Good day! I had a problem in building the towers. Every time i click on the platform it says cancelled.

    ReplyDelete
    Replies
    1. Can you help me with this? Thanks in advance

      Delete
    2. Sorry for the slow respond. I'm currently out of my normal working schedule so it might take a while for me to respond. Also please post your problem to the support forum or email me directly in the future. It's a more efficient way of reaching me.

      Now back to the problem, does the tower build at all? Or no tower is built but you see the 'cancelled' message? If the tower is built but you see the cancelled message at the same time, that's a bug I'm aware off. I'll get it fixed and upload another update as soon as possible.

      Delete
  9. Support type creep's HP Regen don't work. How to run it?

    ReplyDelete
    Replies
    1. It's a bug. There's a typing mistake in the code. I'll include the fix in the next update. If you want to, You can fix it by changing line641 of Unit.cs to:

      if(regenHPBuff<buff.regenHP) regenHPBuff=buff.regenHP;

      Delete
  10. how can i change tower, creep and map?
    do you have any tutorial video?

    ReplyDelete
    Replies
    1. i mean image and animation

      Delete
    2. Absolutely. That's the point of the framework. You can use your own assets for the towers, creep and just about anything. However the framework is design with 3D asset in mind so if you are thinking of using 2D asset, it depends on the kind of 2D you want to do. In some case, you might need some additional work to get it look properly.

      Following is the link to a list of video tutorials based on previous version. It's a bit different from the current version but concept is more or less the same.

      https://www.youtube.com/playlist?list=PLucfbVosdV4az2xKZ4G4VlX1JKFQuN3pQ

      Delete
    3. thank you for reply
      can i find that how to fix for 2d asset
      any tutorials or something?

      Delete
    4. I'm afraid there's no standard solution for using 2D asset. It depends on your asset, how you want to implement them and so on.

      The key thing you need to understand is 2D works about the same as 3D. The units are still essentially gameObject, only that instead of 3D meshes, they are images that has to be arranged to face the camera at all time.

      Delete
  11. Hi Song

    I'm new in unity and I want to buy your TDTK, but I have some questions

    1) Do I need Unity PRO to use TDTK?
    2) Under which license do you sell TDTK? Can I modify it if I need it?

    ReplyDelete
    Replies
    1. Thanks for your interest. To answer your questions:

      1. No you dont need Unity Pro.
      2. Standard license used for typical AssetStore package. Yes you can modify it if you want. Many user do. Visit the support form and you'll see.

      Delete
    2. Thanks for the Information, Excelent work btw your framework looks amazing :)

      Delete
  12. This comment has been removed by the author.

    ReplyDelete
  13. Hello! I have the A* Path and I was thinking if there is a possibility to use the grid of A* instead of Tdtk's Platform to put the towers on the ground... Is that possible? Once the tdtk uses the A* algorithms!

    ReplyDelete
    Replies
    1. It's possible. In fact you can just the default Unity Navmesh navigation. I recon that would be a better solution. However doing that means you have to replace all the default navigation system of TDTK. It's quite a lot of work.

      Note: TDTK uses A* algorithm too for path-finding on the platform

      Delete
    2. Note: When I talk "A* Path" it means "Aaron's AStar Pathfinding"

      Delete
    3. I see. Still, the same principal applies. All A* path-finding algorithm do the same thing, which is layout an environment, navigate the agent from point-a to point-b. The different thing is how you define the environment (a fixed grid, a nav-mesh, etc).

      In this case (tower defense), the environment changes dynamically during runtime. As long as the library can handle update of the navigational graph during run-time, it should be usable.

      Delete
  14. Hi, Does TDTK First Person Shooter mode also work on mobile devices? Are there any features that don't work well on mobile? The whole thing looks amazing!

    ReplyDelete
    Replies
    1. I'm sorry to say that first person shooter mode doesn't really work on mobile right out of the box. The control (aiming and shooting) only takes input from mouse. To make it work, additional UI (a virtual d-pad and fire button) has to be added to received touch input. Honestly I dont think that is too difficult to do.

      Apart from FPS mode, everything else in TDTK should work on mobile :)

      Delete
  15. This comment has been removed by the author.

    ReplyDelete
  16. Hi, which are the minimum elements do I have to place in the hierarchy to make a operational scene without using your platform scheme?

    I just want to use my own build manager and make your towers functionals!

    Thanks!

    ReplyDelete
  17. As far as I can tell, ResourceManager and LayerManager are the only two components required. ResourceManager to setup the cost and sell value correctly. LayerManager is for setting up the targeting correctly. The rest are not really required.

    ReplyDelete
  18. Hello from mars... again! :D

    "LayerManager" is not a Monobehavior how can I put it in a scene?

    Thanks Again!

    ReplyDelete
    Replies
    1. If you are using earlier version (pre-3.1), LayerManager is a MonoBehaviour. It should be required by GameControl by default. You need not worry about putting it in a scene.

      As of version3.1, LayerManager is no longer required and not in used. If you have one in your project, you can just delete it.

      Delete
  19. Hi. I have the FREE TDTK and cannot get the towers to work when I run the demo scene (single path). The creeps work, but I cannot create the towers. I am running UNITy 5.3

    ReplyDelete
    Replies
    1. I have to say I'm only tested the TDTK free up to version5.2. It works despite having some minor issue such as the grid not being drawn correctly. Can you elaborate what exactly is the problem you are facing. The default tower doesn't work, or the custom tower you are trying to add? In what way they don't work? Any error/warning show up int the log.

      Delete
  20. Hey Song,

    How would you go about tackling having multiple options for upgrades on a single tower with this toolkit? I would like to have multiple options when upgrading a tower (preferably using the GUI presented when clicking on an open square) as opposed to just one.

    Thank you :D

    ReplyDelete
    Replies
    1. I'm not sure if you are aware but multiple upgrade option is already supported. I take it in this case that you are referring to the interface. When you select a tower, there will be two upgrade buttons instead of one (the toolkit only support up to 2). With the default UI, it's a bit rudimentary I have to say. There isn't more information when you hover over those buttons.

      Delete
  21. Hello again Song,

    im trying to add audio when the tower shoots. but the sound clip is being cut short (ending when the shoot object is destroyed)
    is there something in the editor to handle this or will i need to edit the code

    thanks again

    ReplyDelete
    Replies
    1. Is that audio meant to be played when the shot is fired or hit? I would recommend you to use the shoot effect object or hit effect object instead by attached the audio clip to the effects. You can set the active length of the effect object so the sound don't get cut off before they finish.

      Delete
    2. I just ended up adding a shootEffectSound using your methods. So now there is a separate field. It just spawns an empty object with a sound clip which can be edited. Thank you again for the response. This TDTK is outstanding.

      Delete
    3. I just ended up adding a shootEffectSound using your methods. So now there is a separate field. It just spawns an empty object with a sound clip which can be edited. Thank you again for the response. This TDTK is outstanding.

      Delete
  22. Is it possible to create buildings and have the creep units attack them? Say the buildings are vital to stage survival. If the buildings all get destroyed the game is over.

    ReplyDelete
    Replies
    1. Not by default I'm afraid. You will have to do a bit of custom modification. It's relatively easy since attacking creep is already supported by default. First the building has to call game over state when it's destroyed. Then you will need to modify the creep targeting behavior so that they only attack the key building but not other tower. You can do all this by creating a new property in UnitTower specifically if they are the 'key' building. So the building is just a tower marked as key building. Make sense?

      Delete
  23. Yes makes sense, just trying to figure out how I would mod it.
    Something like:
    Tower is 10 meters way and building is 20 meters away. The building is priority but if the creep is 10 meter in front of the tower making it 20 meters from the building; it will attack the tower.

    But if it's in the middle 5 meters from each, it will choose to attack the building. Think I have an idea, just not sure where the targeting code is for the creep.

    Great tool set by the way.

    ReplyDelete
    Replies
    1. The target scanning code for all unit (tower and creep) are located in Unit.cs, specifically ScanTargetRoutine(). The scanning mask is different for each unit type so tower will always detect creep and vice versa.

      Delete
  24. Hello, I am learning lots of things from the free version, first of all thanks for this. When I tried to put a mesh under the platform, I can not click on the platform. I made a simple square basement for the platform. Set the platform scale to 1 square. I put the basement under the platform. The platform is not colliding the basement. Is this a restriction of free version or because of something else?

    ReplyDelete
    Replies
    1. This is certainly has nothing to do with free-version. :)

      First I would make sure the platform can be select(click) without the mesh. If the platform can be select just fine without the basement mesh but stop working as soon as the mesh is added, my guess is there's a collider component on the mesh game-object which stop the platform from being clicked on. The cursor on platform detection is based on rayast. If you have other collider in the way, the would break the detection. Just remove the collider should solve the problem. The same goes for creep and tower, make sure the mesh object you use have no collider on them.

      Delete
  25. There is a glitch in the web demo. If you upgrade to a resource tower, the UI window won't close and you cannot select another tower.

    ReplyDelete
    Replies
    1. Thanks for pointing that out. I'll look into it.

      Delete
  26. what type of camera that used in the last image ?
    perspective or orth

    ReplyDelete
    Replies
    1. Perspective, but with lower field of view then the default setting.

      Delete
  27. Hello, we buyed TDTK to create Marching Cubes, our first game in App Store. It works very well. Thank you.

    https://everyplay.com/marching-cubes/home

    ReplyDelete
  28. I'm trying to use the tdtk, but my creeps are always 90 degrees rotated. I tried to give the prefab a rotation, but somehow it's ignored.
    Also when the cutom creeps hit the final destination, it's not destroyed. Am I missing something here?

    ReplyDelete
    Replies
    1. Make sure your creep face +ve z-axis when the rotation is (0, 0, 0). I would suggest you to setup your creep the way the prefab creeps are, with all the model/mesh as child object to the prefab. If you have done that, you just need to adjust the child rotation so that it faces +ve z-axis when the prefab rotation is at (0, 0, 0).

      The creep should destroy itself when it reach the destination. If it's not, chance are you are having some error. Do you see any error message in the console? Also are you using any animation?

      Delete
    2. Thanks, it works now. How can I display some sort of particle effect when the creeps reach their destination?

      Delete
    3. I'm afraid that is not supported atm, an oversight from my end. I'll try to add that before the next update. Unfortunately I'm not sure when is that going to be.

      For now, you will have to add some modification of your own to do that. If you want to do that, the code you need to look at will be at UnitCreep.cs, ReachDestination().

      Delete
  29. Hello! Just picked up your Kit on Unity. I have a question about the way the creeps are detected. I have a map where I have an elevated tower that needs to shoot downwards, How do I change it so that the targeting is at a 360 degree total coverage.

    Thank you.

    ReplyDelete
    Replies
    1. I forgot to clarify what I mean by 360 degree coverage, I am looking for a sphere style of tracking, not just on a plane.

      Thank you.

      Delete
    2. Thanks for your purchase.

      Have you actually try run it? It's spherical detection by default. So the tower can detect creeps from any direction as long as they are within range.

      Delete
    3. I changed the Range. I was off by one unit, everything is working just great!

      Delete
  30. Hi Song, do you have any date in mind for the release of the new TDTK version 4?
    Thank you

    ReplyDelete
    Replies
    1. Unfortunately I don't. But I can tell you It's going to be a good while from now I'm afraid. I'm quite occupied by other stuff at the moment it's going to be sometime before I can actively work on it again.

      Delete
  31. I have a question regarding the spawning, how would I go about setting up a spawning system similar to Fieldrunners 2? It spawns on multiple paths at once and during a single wave, instead of just one path. Also, is there any way to set up a level that runs on a timer? This way it is a survival level til the timer runs out. Thank you.

    ReplyDelete
    Replies
    1. If you look at SpawnManager, each wave can be made up of more than 1 or more subwave. These subwave can each spawn different group of creep prefabs at different path. All you need to do is assigned the path intended for each subwave. Of course, if the path are unassigned, they will use the default assigned path.

      As of now, I'm afraid there's no way to set a timer to a level. You can only set timer on incoming wave.

      Delete
    2. Thank you for the quick reply. I have made the adjustments, and it is working out great. Once again, thank you for your Tool Kit.

      Delete
  32. Hello Again, Have a quick question about the PlatformTD. How do I make it so the Platform changes sizes on how it tiles. I want to make it bigger, but when I scale it up, it just adds a ton of little squares inside, when all I want is one big one, maybe 2. If you could help me, I would be very thankful.

    ReplyDelete
    Replies
    1. I assume what you meant to do is change the grid-size, not the platform size. Try adjust the value of Grid-Size on BuildManager instead of scaling the platform themselve. Hope this help.

      Delete
  33. Yes. I want the grid size to be 1, no matter how big the platform. So I do this in the script, prefab or the inspector?

    ReplyDelete
    Replies
    1. I'm afraid I don't quite get what you mean. Basically this is how it works. You have grid size (as specified in BuildManager), then you have platform size. The grid size is how much space a single tower occupies and it's the same across every platform. Platform size on the other hand is how big the platform is. A bigger platform can accommodate more tiles (build point).

      However if you want all the platforms to have a single tile on them regardless of their size, I'm afraid that is not possible without some modification to the code. Is there a reason why the platform needs to have different size if they are all single tile platform?

      Delete
    2. Its a scale issue. My assets are designed on a grid style snapping, so that they always go together, and I made the assets larger than your squares are set up for. Also, I don't have the towers side by side. I have them spread out on fixed points.

      Delete
  34. Hey Song, Thanks for this cool asset! Having an issue getting it to work when built for android. Works fine in the editor but when I build a tower in the android version it places a tower there but it is not functional. The dialog/description UI box doesn't go away and no money is subtracted from the top-left. After this no other tower can be built unless you click on many different tower bases picking random tower and then eventually it will change but still not work. Thanks in advance for your time in considering this problem.

    ReplyDelete
    Replies
    1. Thanks. Can I know what version of Unity are you using? Are you using your custom scene or the default example scene? If you are using your custom scene, can you try the defaults to see if the same problem persists?

      Delete
    2. Hey, Thanks for the quick reply. I'm using Unity 5.5.0f3. The problem exists in an empty project with the clean asset for the two path test. The one path test (with the click and drag works as expected. In order to compile the project I did have to make one modification to the source code of the asset. In the CameraControlEditor class lines 56 63 69 and 75 contain attempts to set the value of variables in the CameraControl class that don't exist (enableTouchPan, enableTouchRotate, enableTouchZoom, and rotationSpeed); I commented out these lines.

      Delete
    3. "One path test" and "two path test"? Are you using the free version? Honestly I haven't update that for a long time and it has been a while since I last look at it. I remember it doesn't support Android or any mobile build, hence the error with the code. Sorry to dissapoint.

      Delete
    4. Gotcha. Was considering using it/testing it for a small part of a game I'm making. Is there full mobile support in the premium version?

      Delete
    5. Yes. And you get a whole bunch of other features too! :)

      Delete
  35. I am having an issue with your new updated version of the TDTK and the newest version of Unity. The UI is not responsive. I can't choose buildings, start waves. The camera rotation is the only thing working. I am using Unity version 5.6.0f3.

    ReplyDelete
    Replies
    1. Can I know what version of TDTK you are using? I've just uploaded a new version 3 days ago (3.1.1 f5), which I've tested on Unity5.6.

      Delete
    2. I updated to the new version today. Started an entire new project too, no changes.

      Delete
    3. That's strange. Just tested it myself. Empty project with Unity5.6.0f3, imported TDTK 3.1.1f5 from AssetStore and everything seems to be working. Are all the default scene not running?

      Delete
    4. Let me check when I get home. Just got to work, sorry. I might reinstall Unity.

      Delete
    5. I had to uninstall the tool kit, reinstall Unity 5.6 to get it working. Somehow somewhere there was probably a packet missed in the download causing issues. The problem is corrected now. Thanks for you help!

      Delete
  36. i boght your Tower Defense Toolkit (TDTK) and it was working fine unitl i imported my Realistic effects pack 1 Now there is an error Assets/TDTK/Scripts/DemoMenu&Props/RandomRotate.cs(6,14): error CS0101: The namespace `global::' already contains a definition for `RandomRotate'

    ReplyDelete
    Replies
    1. The reason of the error is Realistic Effects Pack also contain a script with a similar name called RandomRotate. You can fix this by changing the name of the script to something else, like RandomRotateTD. You will have to change the content of the script too to match the new name. It's very simple, just open the script, within the first few line you should see the existing name. Just change that will do.

      Delete