No announcement yet.

Creating an interesting "particle swarm" enemy

  • Filter
  • Time
  • Show
Clear All
new posts

    Creating an interesting "particle swarm" enemy

    I'm looking for a little bit of community input regarding this.

    My team wants to make an enemy in a game that is basically a swarm of nanites or small robots. It is pretty simple in that is attacks you by making contact with you. Currently we could just take the standard pipeline and make them, and their animations in a 3D program and import them to UDK.

    But we want them to be interesting. I've seen videos (like this: and projects with dynamic particle systems that react to the environment, like sparks bouncing off metal. We want this enemy to explode and have the small bots bounce off the floor and walls or even have them react to shots from a gun. Using a basic particle emitter, I can apply an orbit to our particles which achieves an almost perfect "swarm" look. However, this orbit seems to override the ability to apply collision. Collision is not critical because pathing should stop enemies from hitting walls, but it would be nice to play around with. Is it also possible to use an event receiver to suddenly cause the particles to abandon the orbit, apply physics and a negative Z velocity, causing them to drop to the ground?

    Rather then try to pour over the many resources out there, I thought I would turn to the experts. Is it possible to do this? What is the best way to approach it? Would it be too resource heavy? Thanks in advance.

    I'm not an expert but asking how to develop the major part of your game seems like an impossible thing for someone to help you with. There's going to be tons of issues and bugs that will each need to be solved individually.
    I can say good luck and start pouring over resources.


      You may have mistaken my wording, but I've actually spent a fair amount of time working in UDK, including a past game project and I consider myself fairly knowledgeable. What I am asking to do in this specific instance is new grounds for me and in my experience, turning to professionals is a much better way of achieving a high quality result then simply trying to throw together a bunch of tutorials that fail to totally reach the point you are looking for.


        sorry, I must have mistaken what you meant. That link to the video has gone "This video has been removed by the user"
        What way do you think you'd go about it? That might help the Sr guys direct you.
        Do you think something programming heavy is the way you will go or do you hope there is a kismet solution? Do you program?


          Programming heavy is one solution. Our team has a programmer that will be scripting a lot of the enemy behavior, such as the AI, hitboxes, states, etc. Its very easy to just decide to model and animate the swarm and it's different states and treat it like you would any other enemy in the game.

          However, in the particle editor you can tell particles to orbit the emitter and it achieves an effect that is amazingly close to what we are looking for. More importantly, particle emitters can also apply physics to the particles, allowing them to react with the environment, which would make for really cool deaths or squeezing through doors, etc. The problem resulting from that is when the emitter is activate, all the particles can do is orbit. I know you can use event receivers to activate different effects within the same emitter, but the events that trigger the receivers are very limited and I'm not sure they can be activated with a console command. The ideal situation would allow me to have the particles orbit at first, but when an event from unreal script is called, aka it "dies", the orbit is canceled and a negative Z velocity is applied to the particles with collision on, causing them to drop to the ground and bounce around.


            Try searching for rag dolls.
            It may not be your solution, but when dead the robots should collide as you wish.


              Heyo Rabbid!

              I can tell you right now that using standard sprite particles won't work. Not the standard mesh emitter either.

              or rather, it'll work, but if you have more than say 10-15-20 (around there) particlebased collisions at once (I don't know how bid your swarm is) it'll severely impact performance.

              You could try and get the hang of the Physx Typedata as it handles collision better.. but from my experience those are heavier on the renderer.

              You're gona have to find a balance between those two types, I guess (standard vs. Physx)

              Also! I wish there was a custom node for particles (similar to custom node in the material editor).. Would greatly increase the flexibility of Cascade.. Atleast that's my 2 cents!

              Sorry for not being able to help with the orbit -> physics question.

              EDIT: If I were in your shoes, I'd do this:

              trigger event1:

              Event RCvr KILL (event1) on the swarming particles.
              Event Generator on the swarming enemies to create event on death (create event 2)

              event2 triggered:
              Event RCvr SPAWN on a second emitter with an emitter init location node set to the swarmemitter. This emitter has an acceleration node etc, so they will fall to the ground.

              That should be it, I think? Good luck! ;D


              I don't know if your swarm is mesh or sprites.. But I would avoid having them collide with the ground

              unless you spawn fewer falling/colliding particles than you had swarming particles (or.. if you only have like 5 swarming enemies then it doesn't really matter..!)

              Another way to do it is like this:

              Say you have 100 particles in the swarm. 100 collisions would be way to much! So, have 2 emitters trigger at event2 (see above). one that spawns 5-10 colliding particles and one that spawns 30 or so basic falling particles. that way you have the cool effect of the platitude of enemies falling to the ground and some collisions as well.

              both cool and less off a resource-hog

              There you go! Should help you out a bit



                Thank you for that very detailed reply. I don't know why I was thinking along the lines of only using one emitter, but I've had a chance to mess around using suggestions from you and came up with a decent solution.

                Emitter 1: Standard swarm, orbit module.

                Emitter 2: Explosion effect

                Emitter 3: Two separate spawns; One with collision and smoke trails, one without but many more particles. Both explode outwards.

                On death, Emitter 1 is killed, Emitter 2 and 3 are activated. End result is a swarm that blows up and some of the bots bounce around smoking for a little while. Works decently enough for a proof of concept.

                I've been asked about the possibility of getting them to roll like marbles. Would they have to be a mesh to accomplish that effect?


                  You mean you want the particles to roll on the floor? Or simply have a rotation in the air?

                  For the sprites that collide with the floor you could try and add a init rotation rate and try and time the collision when they hit the floor with the velocity by life to remove any velocity in Z.

                  Another way to do it (and I don't know how well this will work) is to give the colliding particles an acceleration node (in negative Z).. That should hold them close to the floor, while not affecting their speed in either x or y.

                  Good luck!

                  PS: A faster way to get hold of me would be to email me.. I'll PM you the adress