So I started a little project recently that I am calling the spider web. I’m not sure what the end goal is or what it is supposed to look like when done, but I’m having fun working on it and I guess that is all that really maters. I figured I would document my progress.
The general idea came from a dream I had a long time ago, wherein I was this sort of space dream spider who glided through the stars on threads woven through space.
In practice, so far the gameplay is just sliding along curves. And the ability to choose from different paths that branch off.
The curves are not my doing, unfortunately. I got this handy free package from the Unity store that helps you make curves, and has a lot of supporting functions and features for scripting. Check it out on the Unity store, its pretty sweet, BG Curve .
I have a pretty ok camera. It rotates around the player using mouse movement input. You can zoom in and out with the scroll wheel. And Q and E will roll the camera. Functionality for the roll is not quite good yet. It doesn’t have any smoothing, just sorta starts and stops as soon as you hit the buttons. I also want it to tie into the player object visuals, so the player rotates around the curve it is on as you roll the camera with Q and E. But I haven’t gotten to that yet.
Originally I had the player object moving along the paths based on some of the built in features of the BG Curves. But I found it to be too limiting. So I wrote my own acceleration/speed/position logic. I made the movement logic independent of the curves first to make sure my logic was sound. But now I have a toggle that can be turned on and off that determines if the player should stick to the paths or not. So far I don’t have a reason to use it, but I figured I might for debugging at some point.
The basic idea of the path movement is that it takes the player’s intended direction, based on arrow keys or WASD. It calculates what its new position would be, then finds the nearest point on the path to that point, and moves the player towards the nearest point on the path.
I’ve gotten it to work perfectly. But from a user interaction standpoint its not as intuitive as I would like it to be. There are specific instances at inflection points in the curves, where the input vector directions don’t really correlate very well with the curves, making for some awkward situations. For example, in the gif below I hold W to go forward on this curve, and at first it is going fine, but then I reach this bend in the curve where inductively I feel like holding forwards should still work, but instead I just stop dead. The bend in the curve is such that the closest point on the curve to my inputed direction, is the point I am already at.
I understand why it is happening, I just haven’t figured out a solution that I like yet. I’m thinking it will be something to do with continuing in the same direction on a path that you are going if you hold down an input. But I’ll have to experiment with what feels good.
An intersection script contains a list of all the connected paths. So as the player approaches an intersection at a specified distances, it selects the path in that intersection that is closest to the inputed direction for the player to follow.
The smooth transition from one curve I think is really important to the user experience here. I got that working just today, and I am really proud of it. There are still some issues, I think that also relate to the input direction not always being the actual desired direction, as described above. But I am pretty confident that once I solve that problem the intersection transitions will also feel a lot smoother.
I also made a script that will change the color of the path you currently have selected to white. I did this originally for debugging purposes, but I think it will end up being a feature in some capacity implemented into the final shaders. Really good for user feedback.
There are still some odd ‘quirks’ with the intersections that I still need to iron out. Odd things happen when you ‘stop’ in an intersection. The main roadblock there is that I haven’t yet decided what I would prefer to happen. I’m putting it off for now, because I want to work on other features, but it is definitely something that I will need to get back too.
I have started a little anthropomorphic spider model, since I felt like my features were far enough along that it was time to get into some look dev.
I have it skinned, but no rig yet. I’m not the most experienced rigger/animator so its going to be an adventure. I’m excited to learn more about the unity animation controllers. Regardless, I posed the model real quick, and exported a static mesh just for testing purposes. So far its…well it needs some work. My player rotation logic needs a lot of love. Lol. That is probably going to be first thing on my list of next up tasks.
So yeah, that’s what I got so far.
Feature wise, I’m thinking of adding a jump, so you can jump off the string a certain distance. Maybe grab onto another one if you get close enough. I want to add a dash also, maybe even a jump dash. I also was thinking of adding a ‘dangle’, but I am not sure how I want to implement that yet.
In terms of look dev, I haven’t thought about it too much. I want to make a nice ethereal ‘thread’ shader for the curves. I want it to visually react to the player as it slides over them. I also want to have some sort of glow or indication that can replace the ‘white’ selection indication when you get near intersections. The skybox will have lots of stars, with constellations connected by threads, like they are woven together. I’ll probably also have some stars just floating around the world like little fireflies so you can move through them as you travel.
For lore and world building, I want it to be based on Anansi, who is the spirit of knowledge and stories. I have some ideas about story, but nothing super fleshed out so far. In general though I want the player to maybe meet other spirit animals as they travel.
So that’s my Spider Web project. I’ll post more updates as/if progress is made.