Summary
As part of our CEGEP graduation project, my team and I were tasked with creating an interactive installation housed within a shipping container. Lucy offers visitors a unique experience by immersing them in a cavern that juxtaposes darkness with the radiant glow of jewels and the lush greenery of plants.
The three main components
The immersive installation comprises three key components: vines, mushrooms, and ricochet. Vines, as hanging ropes, illuminate and emit soft noises upon movement. Mushrooms function as light percussion, generating drum sounds when touched by visitors. The ricochet introduces a Unity-programmed game utilizing Wii controllers. By simulating a rock throw, visitors initiate ripples in the water, producing sounds and triggering visual effects upon each bounce.
Team Members
Our team consisted of three members: Stéphanie Nguyen, William Bonneterre, and myself. Stéphanie played the role of our visual artist, responsible for modeling all the 3D elements in the game. Additionally, she contributed to the ideation and design of the mushrooms and vines. William served as our Arduino programmer, handling all aspects of programming related to the interaction with mushrooms and vines. I was responsible for programming the game in Unity and integrating Wii controllers into the overall experience.
Programming Wii Remotes
I started by learning Unity, as it was my first time using the engine. Then, I found a GitHub repository that guided me on integrating Wii remotes into the platform. By incorporating the demo from the repository, I reverse-engineered and adapted the API to suit our project. In essence, the Wii Remote functions as the hand that throws the rock. Users can grab the rock by pressing the B button, and while executing a throwing motion, release the B button to simulate throwing the rock as in real life. The gameplay is inspired by the bowling game in Wii Sports. Here’s a snippet of code from the Wii Remote integration and some pictures of the installation.
using System.Collections;
using System.Text;
using UnityEngine;
using UnityEngine.UI;
using WiimoteApi;
public class WiimoteDemo : MonoBehaviour
{
public WiimoteModel model;
public Rigidbody objectName;
public AudioSource audioSource;
public float thrust = 30.0f;
float maxSpeed = 1.0f; // units/sec
float stopVel = 10.0f; // units/sec
float eulerAngY;
private Wiimote wiimote;
private Vector2 scrollPosition;
private Vector3 wmpOffset = Vector3.zero;
void Start()
{
//objectName.transform.Rotate (0.0f, 90.0f, 0.0f, Space.Self);
WiimoteManager.FindWiimotes();
StartCoroutine(ABC());
}
//-------------------------------------------------------------- Initialize WiiMotion
IEnumerator ABC()
{
//returning 1 will make it wait 2 frame
yield return 1;
wiimote.ActivateWiiMotionPlus();
wiimote.RequestIdentifyWiiMotionPlus();
wiimote.SetupIRCamera(IRDataType.BASIC);
wiimote.SendPlayerLED(true, false, false, false);
}