I made a shload of tools while working on this prototype. Here are some of more interesting examples
simultaneous scaling & translating
Unity's built in scaling tool is like that of any other 3d animation software. You are given three handles pointing along the x,y,z axis and pulling on one will expand the size of your object along that dimension. Unfortunately this scaling is mirrored around the pivot point of the mesh. If the pivot is in the center and you tug on the y-axis handle, the selected mesh will scale in the y+ and y- axis.
But what if you want to keep one side of an object anchored but drag the opposite side around? Well you would need to
- Scale the mesh
- Translate it so that the anchored point arrives back to the point it started.
I wrote a tool that could be triggered with a hotkey to do this. You can see the results above. Due to the way Unity handles rotations this turned out to be a royal pain in the ass and so the code is mostly a pile of edge cases.
hiding walls and obstructions
A major feature of this prototype was the ability to seamlessly walk in and out of enclosed spaces. Also, when in an enclosed space I wanted to hide walls and objects that obstructed the player from seeing inside. Because the camera can rotate around the player there was a need to hide different things depending on the camera orientation.
At first I attempted to write an algorithm that would figure this out automatically. This took a few weeks and the results were ok. But after talking to a friendly artist I realized that there were good reasons to let the environment designer to hide specific objects from specific camera angles. So I made a tool to help with that.
This tool runs right in the Unity editor Scene View so that you can easily see what will be hidden when a player is looking from various angles while you are building the level. This tool saves the data and stores it in with the map data partitioned by room/space.