Lil' Gill Design Thoughts
From the very start this project was challenging. Our task was to use the piece of hardware we had selected and just basically "make something cool with it", and we had chosen the Looking Glass, a kind of holographic display.
The original idea we had with it was terrible in all regards, but once we dropped that one after the first day of mostly research, we had two concepts we liked. The first was to use the fact that the Looking Glass already looks like an aquarium and make a virtual fishtank of sorts, the second was to use a Leap Motion controller to make a flight simulation that responds to your hand movements (kind of like children would mime airplanes flying). In a flash of brilliance we decided to combine these ideas, and that was basically Lil' Gill.
So we wanted to make a sort of endless runner with full 3d movement range, though admittedly with a floor, a ceiling and in the very far distance even walls (because we could not come up with a good way of generating new 3d terrain at runtime in this short development time we had). The challenge would come from avoiding other fish that were swimming around. The main difficulty of this project however proved to be UI.
This is because we could not get the Looking Glass to display 2D UI elements in Unity in a way that was not aliased to hell. We assume this was because the device is primarily a holographic display and as such not meant to like 2d things, but regardless of that, we also did not really want to do 3D UI (either in world or just as a way to simulate 2D UI), as we felt that those would not fit or just be a hassle respectively. After a long time in thought, we settled on a Sonic-esque approach to this problem. The longer our player would go without being hit, the faster they would become, and that would reflect in the particle trail of bubbles that the character would emit.
We later found during testing that this conveniently also mostly solved our need for a score display, as to most people just the act of going faster and faster was more than enough and they did not feel that they needed a number to go up to feel engaged with what was happening on screen.
This left us with only one more thing to figure out, which was enemy creation. For a prototype test, I just whipped up a simple script that would spawn enemy fish ahead of you and then make them swim in your direction. This worked pretty ok, and when I emerged about a week later from my cave of rigging and animating all of these enemy fish, I expected our programmer to have refined that system into something similar, yet better. I was dimly aware that constantly spawning and despawning enemies would probably be not optimal for performance, but our scripts where running so light that I was not really worried about that. I did not anticipate what my programmer would whip up in just a few days.
Raphael made a simple ai-behaviour for the enemy fishes that would make them constantly try to move infront of the camera, without ever making drastic turns along the way. This resulted in the fishes circling the player. A behaviour which we then refined in the next day to also ensure that the fish would not approach the player from too steep an angle and that they would not change course at all once in the players field of view, both of those changes meant to ensure the player did not feel tricked by the fishes. In the end, I don't think we ever had a player that suspected that the swarms of fish that populated all parts of our underwater landscape where nothing more than about 30 fish that were constantly swimming circles around the player-character.
I have told this story not only to highlight this as one of the first moments where I was genuinely amazed by the skill of a programmer I worked with, but also as a great example of what you can get by letting teammates run free for a bit. So long as everyone knows what result you need, it is not necessary to micro manage people you trust. I also learned however that I should ask my expert colleagues how they plan to achieve a certain goal. This is precisely the reason why I am learning this broad set of skills, so that I can understand what they plan to do and question it as needed. The reason for this lesson comes from a different situation in this project however. When asked to make "one more enemy fish", my 3D artist made an octopus. I spent days animating a damn octopus, when we just needed any fish at all.