Didn’t really have enough time to make a game this week, but I made this little jellyfish toy thing:
You just move the jellyfish by hovering your mouse over a spot and it will come to it. Hovering over the jellyfish will make it face upwards.
I wanted to experiment with physics systems in Unity. The tentacle things are Character Joints (although I tried out Interactive Cloth and Fixed Joints – eh, none of them are great for this) and driven by the first one in the chain rotating. I’m adding slightly random forces to each part of the tentacle every frame to suggest water turbulence, and make them tend away from the main part of the jellyfish. There are interactive cloth parts on every other part of the jellyfish apart from the top bit. (I have no vocabulary for jellyfish parts!) The cloth was the hardest thing to get right probably, it just screws up with 99.99 percent of the available settings.
The vertex shader on the jellyfish distorts it according to its world space position, so it looks like it is being buffeted by turbulence. The fragment shader is various rim lighting effects composited together with some noise and a lambert shader.
The sea background is another weird shader I chucked together with a couple of input colours and using a quad’s UVs (I used some of Shaderlab’s awesome examples again for a few noise functions). The light shafts are basically cubes extruded and distorted with a vertex shader, blended additively. There are some basic 3D particles floating around to make it look like the sea.
Here’s a screenshot from the editor (with none of the image effects making it look nice!):
This week I wanted to make something with a minimalist look. I totally failed at that. This is Shaderball:
It’s a 2 player air hockey type game; you push your balls to the opponent’s side. You have 10 balls you can fire into the goal to get a higher score than your opponent. Player 1 has the ability to pull all balls towards the centre of the two players. Player 2 has the ability to slow down time. Only one ability can be used at any time. The number of balls left for each player is represented by the black part of the circle in the player.
Play here: https://dl.dropboxusercontent.com/u/32538545/Shaderball/WebBuild.html only 50kb!
Here’s a short gameplay video:
With Xbox 360 controller(s):
- Left thumbstick – move player 1 (left side)
- Right thumbstick – move player 2 (right side)
- Left bumper – player 1 release ball
- Right bumper – player 2 release ball
- Left trigger – player 1 ability – pull balls towards centre
- Right trigger – player 2 ability – slow down time
- WASD – move player 1
- Arrow Keys – move player 2
- Left ctrl – player 1 release ball
- Right ctrl – player 2 release ball
- Left shift/ F – player 1 ability – pull balls towards centre
- Right shift/ Comma – player 2 ability – slow down time
The game is called Shaderball because the shaders’ code comprises about twice as much as the gameplay code. There are 2 main shaders, one for the board and players, and one for the balls, sides and number of balls left. The only other things are particles and text. With lots sine and cos functions modulated by 3D simplex noise (all factoring in time), the shaders are near the maximum number of arithmetic instructions. I used a variety of these shaders for reference: https://www.shadertoy.com. Hopefully it will work in your web browser (if you have a decent GPU)!
I did most of the gameplay in one hour, which just shows how nice Unity is! I took lots of coding shortcuts this time, which didn’t have any repercussions. I should definitely spend less time on visuals and more on gameplay next week!