Introduction
A couple weeks ago my coworker Bart posted about some experimentation he had done with Zac’s new VR development library: PuppetJump. It’s a fun experiment about magnets (how do they work?), and a real good read about his process (which you can check out here), but more importantly it’s given me some inspiration to get in to PuppetJump and do some fun experimenting with the system Zac has written specifically to create a demo called “The Matter Changer”!
Abstract
Alright so I’ve actually created 3 demos from this project: The Preset Matter Changer, “The Transfer” Changer, and the In Scene Editing Changer. Each one has their own purpose, which I’ll discuss more thoroughly when we get to them, but they all share a couple things in common. They all rely on the Forcibles and Rigidbody classes, and they all provided a chance for me to try out the PJ3DUI library. Here’s a list of the variables that can currently be changed using this system:
- The object’s Mass
- The object’s Physics Material
- The object’s brake and angular brake (controls the drag and angular drag respectively)
- The object’s max speed and max angular speed (how fast it can move and turn)
- Whether or not the object is using Gravity
Assets
I’ve developed two classes for this project: MatterChanger.cs and MatterButton.cs. MatterChanger holds a reference to all of the information about the object placed on it, and MatterButton changes those values.
Version 1: Preset Matter Changer
The simplest form of the Matter Changer from a design perspective. The basic concept is that you assign each button a matter type using MatterButton.cs, and then they tell the Matter Changer what to change about the object you’ve placed on top of the Matter Changer. In its current iteration, this Matter Changer is great if you’ve got specific static material types and want a simpler method of interaction for the user to engage with. Since all you need to do is drop the object on the Changer, then press the button, it’s good for exploring the concept of changing materials, without bogging the user down with more complicated tasks.
Version 2: “The Transfer” Changer
This form of the Matter Changer takes advantage of the fact that the button is in of itself a type of object with all of these variables that can be changed, so if it simply reads in the data from one object on a special type of Matter Changer base, it can send that information to an object on a different Matter Changer base. This iteration could see use in simple puzzle exercises or explorations that wanted to focus on what happens when you give one object some of another object’s physical properties, but it still retains its innate shape and dimensional properties.
Version 3: In Scene Editing Changer
This iteration of the Matter Changer is the most malleable form of the Matter Changer. Theoretically you could create an enormous amount of materials to give objects with what is given to you in this final demo. Not all of them will be viable, not even close to all, but experimenting with what works and what you can create will be the main focus of this type of Changer. It also functions as a dynamic Matter Changer, and is adaptable in scene to whatever needs you have at that moment, so if you know what you’re doing, you can leverage some really interesting results with any objects you have in scene! The biggest issue with this is in order to understand what you’re doing, the user has to have some knowledge of how objects work physically and maybe a little bit of Unity knowledge to understand how things differ virtually. Or you could run in with no experience and just see what works, y’know: Science!
Future Considerations
So where can this project go from here? Well I see two lenses to view this question from, the first being educationally, the other being development. In terms of development my first thought is to make the Matter Changer mobile. For example, having a little instrument you could carry that allows you to change an object’s properties just by pointing at it, like a remote control, except instead of changing a channel, it changes the mass of an object. Maybe there’s a use case for a 2 way transfer, so both objects switch properties instead of the receiver just getting the sender’s properties. Heck, even something like a scanner that tells you the innate properties that an object comes into scene with would be cool. For example, Zac’s already added an abstraction for weight where an object moves slower when held because it’s offering more resistance because it has more mass, but if the user new what the mass of that object was going in, and a had a reference for how heavy that is, then it would help sell the illusion further. From an educational standpoint I could see this application being used in something as straightforward as a Physics 101 class as an aid for students to better understand the relationship of matter to its properties, to a more abstract philosophical discussion of the metaphysics. Y’know, like how much of a thing is a thing if you keep changing the parts that make it that thing. Could do a fun discussion referencing the ship of Theseus, or some aspects of metaphysics. I really believe there’s a lot you could do both inside of and around this tool.
Conclusion
And that’s what I’ve got to show! I think this application could have a lot of educational potential for the university. I mean, even the concept, like turning a barrel physically into a ball, could be taken in a million different directions. I hope with further iterations, or even collaborative work within my organization, this idea could be a good way to teach a concept that’s hard to visualize without this direct, virtual approach.
Leave a Reply