Skip to content

BrieucCaillot/whole

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🐳 WHOLE

Narrative and immersive experience made with Unity and Kinect v1 in 2019-2020 at Gobelins School.

Language Language Language

Demo


Architectures

Projet
β”‚    README.md
β”‚    .gitignore
β”‚
└─── Assets
β”‚    └─── 3DObjects                    # All 3D Objects
β”‚    └─── Fonts                        # Fonts used with Text Component
β”‚    └─── Librairies
β”‚    β”‚    β”‚   Cinemachine               # Cinemachine
β”‚    β”‚    β”‚   Demigiant                 # DOTween
β”‚    β”‚    β”‚   Kinect                    # Kinect v1 library
β”‚    β”‚
β”‚    └─── Materials
β”‚    β”‚    β”‚   Sea                       # Sea scene's materials
β”‚    β”‚    β”‚   Sky                       # Sky scene's materials
β”‚    β”‚
β”‚    └─── Packages
β”‚    β”‚    β”‚   UnityFBXExporter          # Export GameObject to FBX
β”‚    β”‚
β”‚    └─── Plugins
β”‚    β”‚    β”‚   Github                    # Github interface for Unity
β”‚    β”‚
β”‚    └─── PPProfiles                    # Post-processing profiles
β”‚    β”‚    β”‚   SkyPPProfile
β”‚    β”‚    β”‚   WaterPPProfile
β”‚    β”‚
β”‚    └─── Prefabs
β”‚    β”‚    β”‚   PrefabsAnimations
β”‚    β”‚    β”‚   Sea
β”‚    β”‚    β”‚   Sky
β”‚    β”‚    β”‚   UI
β”‚    β”‚
β”‚    └─── Resources
β”‚    β”‚    └─── Animations
β”‚    β”‚    β”‚    └─── Loader
β”‚    β”‚    β”‚    └─── Positions
β”‚    β”‚    β”‚    β”‚
β”‚    β”‚    └─── Images
β”‚    β”‚
β”‚    └─── Scenes
β”‚    β”‚    β”‚   StartupScene              # First scene - Logo
β”‚    β”‚    β”‚   Birds                     # Second scene - Birds
β”‚    β”‚    β”‚   Boids                     # Last scene - Birds
β”‚    β”‚
β”‚    └─── Scripts
β”‚    β”‚    └─── Camera                   # Camera's scripts
β”‚    β”‚    └─── General                  # General scripts
β”‚    β”‚    └─── Helpers                  # Helpers scripts
β”‚    β”‚    └─── Interactions             # Interactions's scripts
β”‚    β”‚    β”‚    └─── Gestures
β”‚    β”‚    β”‚    β”‚    β”‚   Gesture.cs                      # Handle Kinect's gestures status (Completed - Progress - Canceled)
β”‚    β”‚    β”‚    β”‚    β”‚   PsiGesture.cs                   # Kinect Psi position
β”‚    β”‚    β”‚    β”‚    β”‚   SquatGesture.cs                 # Kinect Squat position
β”‚    β”‚    β”‚    β”‚    β”‚   TPoseGesture.cs                 # Kinect T position
β”‚    β”‚    β”‚    β”‚    β”‚   UserDetectedInteraction.cs      # Triggered when users detected by Kinect
β”‚    β”‚    β”‚    β”‚    β”‚   UserKinectPosition.cs           # Get position of users
β”‚    β”‚    β”‚    β”‚
β”‚    β”‚    β”‚    └─── prefabScripts (Check how it works below)
β”‚    β”‚    β”‚    β”‚    β”‚   DefaultInteracton.prefab
β”‚    β”‚    β”‚    β”‚    β”‚   PsiInteraction.prefab
β”‚    β”‚    β”‚    β”‚    β”‚   SpacebarInteraction.prefab
β”‚    β”‚    β”‚    β”‚    β”‚   SquatInteraction.prefab
β”‚    β”‚    β”‚    β”‚    β”‚   TPoseInteraction.prefab
β”‚    β”‚    β”‚    β”‚    β”‚   UserDetectedInteraction.prefab
β”‚    β”‚    β”‚    β”‚    β”‚   UserKinectPosition.prefab
β”‚    β”‚    β”‚    β”‚
β”‚    β”‚    β”‚    └─── Scripts
β”‚    β”‚    β”‚    β”‚    β”‚   DefaultInteracton.cs
β”‚    β”‚    β”‚    β”‚    β”‚   PsiInteraction.cs
β”‚    β”‚    β”‚    β”‚    β”‚   SpacebarInteraction.cs
β”‚    β”‚    β”‚    β”‚    β”‚   SquatInteraction.cs
β”‚    β”‚    β”‚    β”‚    β”‚   TPoseInteraction.cs
β”‚    β”‚    β”‚    β”‚    β”‚   UserDetectedInteraction.cs
β”‚    β”‚    β”‚    β”‚    β”‚   UserKinectPosition.cs
β”‚    β”‚    β”‚    β”‚
β”‚    β”‚    └─── Sea
β”‚    β”‚    β”‚    └─── Boid
β”‚    β”‚    β”‚    β”‚    β”‚   ...
β”‚    β”‚    β”‚    β”‚
β”‚    β”‚    β”‚    └─── Camera
β”‚    β”‚    β”‚    β”‚    β”‚   ...
β”‚    β”‚    β”‚    β”‚
β”‚    β”‚    β”‚    └─── CurvedLines(SeaCurrents)
β”‚    β”‚    β”‚    β”‚    β”‚   ...
β”‚    β”‚    β”‚    β”‚
β”‚    β”‚    └─── Sea
β”‚    β”‚    β”‚    └─── BezierRoutes
β”‚    β”‚    β”‚    β”‚    β”‚   ...
β”‚    β”‚    β”‚    β”‚
β”‚    β”‚    β”‚    └─── Helpers
β”‚    β”‚    β”‚    β”‚    β”‚   ...
β”‚    β”‚    β”‚    β”‚
β”‚    β”‚    └─── UI
β”‚    β”‚    β”‚    β”‚    AudioManager.cs                   # Manage Ambiant Sound
β”‚    β”‚    β”‚    β”‚    InteractionsList.cs               # List all interactions
β”‚    β”‚    β”‚    β”‚    IntroManager.cs                   # Manage Intro screen
β”‚    β”‚    β”‚    β”‚    PictoLoadingManager.cs            # Manage loader progress
β”‚    β”‚    β”‚    β”‚    PictosPositionsManager.cs         # Manage picto inside loader
β”‚    β”‚    β”‚    β”‚    SubtitleManager.cs                # Manage subtitles
β”‚    β”‚    β”‚    β”‚    VoiceoverManager.cs               # Manage voiceovers
β”‚    β”‚    β”‚
β”‚    └─── Shaders
β”‚    β”‚    └─── Sea
β”‚    β”‚
β”‚    └─── Standard Assets
β”‚    β”‚    └─── Effects
β”‚    β”‚    β”‚    └─── Projectors
β”‚    β”‚    └─── Environement
β”‚    β”‚    β”‚    └─── Water
β”‚    β”‚
β”‚    └─── Streaming Assets
β”‚    β”‚    └─── Audio
β”‚    β”‚    β”‚    └─── Sounds                            # Ambient sounds
β”‚    β”‚    β”‚    └─── Voiceover                         # Voiceover audios
β”‚    β”‚    β”‚    └─── Voiceover                         # Voiceover audios
β”‚    β”‚    └─── Subtitles                              # Json subtitles
β”‚    β”‚
β”‚    └─── Textures
β”‚    β”‚    └─── Sea
β”‚    β”‚    β”‚    └─── Corals
β”‚    β”‚    β”‚    └─── Currents
β”‚    β”‚    β”‚    └─── Fishs
β”‚    β”‚    β”‚    └─── Ground
β”‚    β”‚    β”‚    └─── Rock
β”‚    β”‚    └─── Sky
β”‚    β”‚    β”‚    └─── Mountains
β”‚    β”‚    β”‚    └─── Ocean
β”‚    β”‚    β”‚
β”‚    └─── Timelines



Scenes managment

You can run each scene separatly for development purposes. But the production scene is "StartupScene" which uses the kinect manager and load every scene asynchronously depending on the users interactions.

Interaction Managment

If you want to use interactions outside of the StartupScene, you will need to create a GameManager and InteractionManager. but you will have to remove it for development and use the GameManager and InteractionManager in the StartupScene.

To add a new interaction in the interactionManager, you will need to create a GameObject, and add the script with the interaction you want to use. If the interaction you want does not exist yet, you can create your own script and extend it with Interactions.cs. it just need to return true in the Listen function when the interaction is completed. When the gameObject is created you can drag it to the interaction list in the interaction manager.

Each interaction GameObject should have a string "action" that triggers a function in the GameManager, if defined. if the interaction have a pictogram attached and audio, you have to select the InteractionKey corresponding to the audio/picto defined in InteractionList.cs and enable "hasPicto".

To prevent the interaction to abort too soon, you can enter the audio duration in the GameObject and add an additional delay if needed.

If you want to trigger the onComplete event somewhere outside of the interaction script, you can uncheck "Handle on Complete".

Each interaction is enabled one after the other depending on the order of the interactions array, when the complete function is called.

Kinect managment

If you are working without the kinect device, you can still run the scenes just by removing every interaction using the kinect, you might have warnings but you can just ignore them.

To make the kinect work

Install the Kinect SDK 1.8 (only KinectV1) on your windows device. Kinect with MS-SDK package is already installed in our project. https://www.microsoft.com/en-us/download/details.aspx?id=40278

There's already a list of available gestures, but if you want to add custom ones, check the Gesture pdf in Kinect with MS-SDK asset.

If you want to create a new kind of interaction with the kinect you will need to create a KinectGesture GameObject linked to a new GestureScript that you need to create.

We are actually working on a new version with depth and position user data, to delete current gestures and interactions.

Credits