In this second MCU Dev blog post I cover the advanced features I developed after the basic functionality of the package was finished.

The Motor Control Units Development (MCU Dev) package was created to familiarize myself with the Motor Control Unit functionality for the physics based interaction system called Forcibles which the VR framework PuppetJump uses for object interactions. This package was also created to explore some of the capabilities which could become possible by using the Motor Control Units functionality.

 

 

 


 

This post will cover the following sections:

 


 

Intro

As a developer, I find that the development process gets streamlines when working with content and functionality that I am familiar with. The more acclimated I am to the core functions and capabilities of the framework or platforms I am working with, the easier and more intuitive it is to build, create, and brainstorm various functionality and features for any project.

With that in mind I started the MCU Dev package. The MCU Dev package is a bundle of assets and code I created while exploring the Motor Control Unit (MCU) feature included in the Forcibles package used to create and control physics based interactions in the PuppetJump framework.

The goal of the MCU Dev package was to familiarize myself with the basics of Motor Control Units, while also exploring what capabilities I could create by leveraging their functionality.

The following blog post covers each step I took during my exploration of the Motor Control Units functionality.

 


 

Advanced Bait Types

After I completed the development of the basic movement and navigation functionality for the flyers, I felt it was time to start exploring what else the Forcibles package was capable of. My first exploration into this was the creation of the Advanced Bait Types.

Basic bait objects are comprised of a small spherical bait object and an area of effect extending out from the central sphere. This basic bait functions using proximity, anytime a flyer moves within a specified proximity around the bait, the flyer changes targets to start moving toward the bait.

 

 

The next type of bait I created was the Bait Trail bait type. Bait Trail objects exhibit the same proximity functionality as basic bait with the additional feature of leaving a trail when they get moved. As a Bait Trail object is moved around the scene, it places smaller trail bait objects along its path. Each of these smaller trail objects has a proximity based area of effect around them as well. However, when a flyer enters the effect zone of one of the smaller trail objects, the flyers target gets set to the primary Bait Trail object at the head of the trail instead of to the smaller trail object. This means that anytime a flyer gets close to a Bait Trail objects trail it starts to navigate to the Bait Trail object itself.

 

 

The third type of bait object I created was a Scene Wide Bait type. Scene Wide Bait gets added to every flyer’s list of targets in the entire scene, similar to how the basic bait would function if its area of effect was set to envelop the entire scene. As the flyers travel around the scene, they are constantly checking the distance between themselves and each of the potential targets in their list of targets. I programmed this feature to make the flyers always set the closest target to themselves as their currently active target. Scene Wide Bait uses this functionality to always be a potential target no matter how far away a flyer may be, but only become an active target when a flyer is closer to the Scene Wide Bait than to any other target in its list.

 

 

 

The fourth type of bait object I created was the Priority Bait type. Priority Bait functions similarly to the Scene Wide Bait type with the exception that it always takes priority over any other bait type. While normally the flyers select their current target based on the closest target to them, if a Priority Bait object is in the scene, then the flyer automatically goes for it first before any other target in its list. The flyers normal distance based target selection method does come into play again when more than one Priority Bait object is in a scene at the same time, in which case the flyers will move toward whichever Priority Bait object is closest to them.

 

 

 

 

 


 

Target Color Match

Now that I had created a variety of bait types, it was time to add a visual debugging feature to help me verify that the flyers were interacting correctly with each of the bait types when multiple bait types were present in the same scene. To accomplish this, I created the Target Color Match functionality.

The Target Color Match functionality simply changes the color of each flyer to match the color of their currently active target. This feature make it easy to visibly tell which flyers are being effected by various bait objects.

 

 

 


 

Basic Wing Flap

Around this time in my exploration of the Forcibles package, I was informed that a project related to butterflies may be on the horizon for our group. So, it seemed to me that the next logical development step was to create a basic grey-box prototype of a flyer with wings. In order to add a bit more realism to these prototypes I created the Basic Wing Flap functionality which, as the name suggests, would rotate the wings of the prefab to look like flapping wings.

I also decided to add a feature to this wing flap functionality which alters the speed of the flaps based on the velocity of the flyer they are connected to. This meant that the faster the flyer moved, the faster the wings flapped. When a flyer lands and is sitting still, the wings sit still instead of continuing to flap.

 

 

 


 

Butterfly Texture

Shortly after developing the grey-box winged flyer prototypes, I received a prototype texture for butterfly wing patterns from our groups designer Erica Krieger. With a couple small touch ups to the prefab, I was able to implement these wing textured onto the winged flyers to create a basic prototype butterfly with semi-realistic looking wing patterns.

 

 

 


 

Bait Boxes

With the idea of creating a simple “butterfly garden” in mind, I wanted to give the user the ability to access any type of bait they would like in order to interact with and attract the butterflies.

So, I created the Bait Boxes. These Bait Boxes are contained spawn zones which generate a specified type of bait anytime the user reaches inside of them and presses the grab button on the controller. This feature also allowed the user to generate any number of each type of bait and explore how the butterflies interact when various bait types are places in different configurations around the scene.

 

After some testing, I redesigned the Bait Boxes for version 2 (v2) in order to maximize the users easy of use and access. The second version of the Bait Boxes no longer require users to bend over or reach down into bins in order to generate bait objects.

 

 

 


 

Trashcan

In the previous step I gave the users the ability to create bait objects within the scene. Now I needed a way to allow them to destroy bait objects they no longer wanted so that the scene doesn’t get filled up with unwanted bait objects.

To accomplish this, I created a simple Trashcan which will destroy any bait object placed inside of it. I made sure to create these trashcans to be able to tell the difference between bait and non-bait objects so that no butterflies got harmed (destroyed) during these experiences.

 

 

 


 

Dynamic Count Prefab Spawner

The last feature I added in this phase of development was a Dynamic Count Prefab Spawner. This feature alters the normal Prefab Spawner to allow the user to dynamically alter the number of butterflies in the scene instead of having the number be pre-set. With this implemented, users could experience a scene with 1 or 2 butterflies, or could generate a huge swarm to completely surround themselves with.