Pack it Perfect is a quirky and challenging VR puzzle game where your objective is to fit a variety of odd-shaped items into a single suitcase. But it’s not just about finding the right space, some items react when placed next to each other. For example, certain objects might expand, melt, or trigger strange interactions depending on what they’re touching. Figuring out how to pack everything without setting off chaos is the real puzzle.
This VR game was made in Unity on my internship at AlterEyes, together with the other interns (1 coders and 1 artist) we had full control of design and made this game from prototype to production and also ready for release. Unfortunaly it isn't released yet but it should be available soon on Meta Quest Store!
During my time on Pack It Perfect, I contributed extensively to both the gameplay systems and the overall technical stability of the project. My work spanned UI/UX design, game mechanics, save systems, and bug fixing, with a strong focus on problem-solving and refactoring for long-term maintainability.
This system first iteration during prototype was not written by me, but I did refactor and rewrite it during production phase.
Items consists of three types, default (nothing special), Rule Holder (the item that will do something when triggered with the correct trigger type, each rule holder has a Rule scriptable Object attached to it), and the trigger (the item that will trigger the rule in the rule holders if their trigger type is the correct). Trigger types is an Enum that will tell the rile holder rand trigger at which trigger type they should react to, the values could be: cold, fire, predator, ….
Each rule has different ways it needs to react, for example, the expand rule, only needs to react when there is something near it to trigger, so boolean approach, but other items needs to react every time something happens, so like a trigger approach.
We made it in a way where we only need to write the logic of what it needs to do and it will automatically do the approach it is designed to do through a simple boolean with the scriptable Object.
Goal: Certain objects should instantly grow when placed near specific “trigger” objects, doubling their size to create more interesting packing challenges.
The rule system scans for valid the placed object’s neighbours to check if it’s an expansion trigger. When a match is found, the expanding object scales its mesh and colliders proportionally fast to give it a snappy feeling. The scaling logic bypasses Unity’s default transform scaling for some colliders, using manual resizing to avoid hierarchy bugs (especially with nested mesh colliders).
Once the object grows, it runs a bounds check if it’s outside of the suitcase. If any part exceeds those limits, the object is repositioned or ejected out i fit doesn’t find space. If other items overlap the expanded item, those items will be thrown out instead.
Goal: Variant of the expansion rule, but with a visual twist. The blowfish “inflates” and changes its mesh to a puffed-up model.
Goal: Make players physically interact with the beachball for it to change sizes. Throw it up for size increase, compress it with two hands to shrink.
I tracked the ball’s upwards velocity to detect throws, triggering an expansion when it crossed a speed and small time threshold. For shrinking, I measured the distance between the player’s hands while holding the ball. When that distance dropped below a set threshold, the ball smoothly scaled down.
Goal: Ice melts unless kept cold, but heat overrides cold, even if both are nearby.
Each ice cube constantly scans its surroundings for “temperature sources”, these are triggers with heat or cold type. Cold sources stops the melting, so without a cold source nearby it will metl. Hot sources makes the icu cube mellt instantly, even if there is a cold source, so you have to watch out where you place hot objects.
Goal: Give players the ability to grab objects from far away.
Even though we used the Auto Hands VR package to handle the hands and grabbing, their Distance grabber wasn’t working the way we needed it to, so based on the Auto hands package, I created a simple ray-based targeting system with a LineRenderer beam to know which item you’re about to grab, haptic feedback on lock, and grab confirmation when the player pressed the grab button. When grabbing the item will fly towards the hand in a fast and satisfying way.
UI Development with Doozy. Learned and implemented the Doozy UI package to create flexible and scalable menus. Built the Level Selector, interactive UI elements, and Completion Menu that displays stars earned after a level.
| Engine | Language | Programmers | Artists |
|---|---|---|---|
| Unity | VR - C# | Joaquin Verhelst | Çağla Akçay |
| Sebastian Surmont | |||