Document toolboxDocument toolbox

Private & Confidential

Getting Started

This guide will walk you through setting up an empty scene to start creating your own level with the Igloo 360 camera template. It will also walk you through some of the fundamentals used in this template to create an interesting experience.

This template comes with a premade starter scene where you can find every part of the template in use if you are stuck for ideas.

The rest of this document explores the components that make up the Igloo camera system, and defines what everything does and the settings for each of those components.

If you are new to Unity, we recommend exploring some of Unity's interactive tutorials to familiarise yourself with the Unity interface and concepts before continuing. More information on Unity can be found at their Learn Site.

If you're in hurry, and just need to get stuck in, we've highlighted some important terms and concepts with links if you would like to find out more about them.

Creating a new scene

The only asset that is required for a new scene, is the Igloo prefab.
Once that is placed in your scene, you will start outputting an Igloo 360 stream when you press play or build the project.
You will need to assign a Transform to the FollowTransform variable of the IglooCameraCreator.cs script to move the camera rig.
Unless you are using the IglooPlayer prefab, which the camera rig will automatically follow unless a different Transform is specified in the FollowTransform variable.

Igloo Prefab

Let's explore the Igloo Prefab and what it does;

  • In the Assets Tab, expand Igloo Tools, and then Prefabs.
  • Drag the Igloo prefab into your scene.

The prefab is put together usine two custom scripts, Igloo Camera Creator, and Igloo OSC.

Igloo Camera Creator

The IglooCameraCreator.cs C# script is used to unpack a type of Igloo Camera system into the scene, and set it up correctly by assigning it a set of default values based on the Enums (Enumerations) provided.


  • Default Camera:
    Type: Enumeration | Default Setting: Cylinder
    This Enum defines the type of camera that will be created when you press Play. The 5 options are:
    1. Cylinder:
      Creates a cylindrical camera system with 5 cameras, at 72 degree intervals that outputs 5 seperate streams.
    2. Cube:
      Creates a square camera system with 4 cameras, at 90 degree intervals, that outputs 4 seperate streams.
    3. Unwrap:
      Creates a cylindrical camera system with 4 cameras, at 90 degree intervals, that outputs 1 stream.
    4. Cylinder6:
      Creates a cylindrical camera system with 6 cameras, at 60 degree intervals, that outputs 6 seperate streams.
    5. ImmersiveRoom4:
      Creates a large square camera system, with 4 cameras at 90 degree intervals, that outputs 1 stream.
  • Stream Type:
    Type: Enumeration | Default Setting: Spout
    This enum defines how the 360 stream will be sent from the camera system. There is two options:
    1. Spout
      A Local machine only based texture streaming service.
      Use this if you are running your application on the same computer as the Igloo software, which for most projects is applicable.
    2. NDI
      A Local area network based texture streaming service. Use this if your project meets or exceeds the following conditions:
      • It's extremely detailed, in excess of 5 million polygons in the scene.
      • You're using a VR Headset device as the main source of input and control.
      • You want a high framerate output, and therefore as much of the graphics card as possible (First person shooter, or racing game, for example) and the 360 output is used as a spectator device.
  • Igloo Cameras:
    Type: Array
    This is an Array, that contains the prefabs which the Igloo Camera Creator creates, unpacks, and sets up.
    The only reason you would need to edit this, is if you are using the ImmersiveRoom4 type of camera package, which by default isn't assigned to this array as it's only used by bespoke igloo installs.
    This is also a quick way to access the various IglooCamera prefabs if you don't want to search through the Asset files.

  • Additional Settings:
    Type: Structure | Default Setting: null
    This structure contains two elements. We have defined this as a structure for organisation purpouses. The two elements it contains are:
    • Follow Transform:
      Type: Transform
      This will be passed to the created camera package when it is instantiated, specifically to the FollowObjectTransform script.
      You will need to drag in whatever Transform you want the camera package to follow, this is usually your first person camera, or it might be a helper gameObject that you have following your main character.

    • Graphy:
      Type: Prefab | Default Setting: null
      This is for a specific prefab made by Tayx called Graphy, which creates a really useful overlay on the main camera of the scene.
      We leave this empty (null), however if you would like to use it, you can find the Graphy prefab in Assets/IglooTools/Packages/External/Tayx/Graphy/Prefab
      Just drag the prefab into this slot, and it will be created on start.

Igloo OSC

IglooOSC.cs is a custom C# script that sends and receives OSC messages, and passes them onto the active Igloo Camera System

This script doesn't have any editable fields, however it will create some scripts when it starts. These are the OSC senders and recievers and shouldn't require editing. However they are usefull for debugging receiving and sending messages.
If you are proficient in OSC control, and are using this protocol for your control input, you're welcome to edit this script to apply your own additonal functions and message receivers / senders.

Igloo Player

This is a component that is featured in our example scene, but is not technically required for a functioning Igloo 360 project. It essentailly provides you with a controllable character for the IglooCameraSystem to follow.
It also has access to our Igloo based input methods such as XIMU and GyroOSC which will be explained in further detail later in the project.

The IglooPlayer also uses the following standard Unity components: Character Controller, Rigidbody, and Audio Source.

It also uses 4 custom C# scripts which handle the input of various control systems and how the player behaves in the virtual scene:

Igloo First Person Controller

This is a C# script that extends the Unity Character Controller component, it contains many variables which are explained further in the Unity Character Controller documentation.

It also contains a lot of custom, Igloo variables which are explained thus:

Igloo Settings

  • Rotation Input:
    Type: Enumeration | Default Setting: XIMU
    This enum specifies how the character's rotation will be influenced via one of 3 options:
    1. XIMU:
      Uses XIMU based input commands, via OSC. These are sent by our recommended controller, a Steam Controller, via our Igloo Warper.
    2. STANDARD:
      Uses the mouse! Great for testing before outputting to an Igloo, if you don't have a Steam Controller
    3. GYROSC:
      Uses Gyro based input from GyroOSC directly. Useful for testing without a warper.
  • Movement Input:
    Type: Enumeration | Default Setting: Standard
    This enum specifies how the character's rotation will be influenced via one of 3 options:
    1. STANDARD:
      Uses default gaming inputs e.g. Keyboard, Xbox controller, steam controller.
    2. GYROSC:
      Uses Gyro based input from GyroOSC directly. Used for very specific movement systems. e.g. 2D game endless runner games.

Character Controller Settings

  • Is Walking:
    Type: Boolean | Default Setting: true
    Is the player walking (or false: running.)

  • Walk Speed:
    Type: Float | Default Setting: 5
    Speed at which the player walks

  • Run Speed:
    Type: Float | Default Setting: 10
    Speed at which the player runs, usually double the walk speed.

  • Climb Speed:
    Type: Float | Default Setting: 0
    Used for certain conditions where the player may need to climb a ladder. This is an unused variable at this point.

  • Runstep Lengthen:
    Type: Clamped Float | Default Setting: 0
    Lengthens the time between steps when the player is running. A step defines a footstep audio trigger, and also a headbob trigger.

  • Jump Speed:
    Type: Float | Default Setting: 10
    Velocity given to the player on Jump.

  • Stick to Ground Force:
    Type: Float | Default Setting: 2
    Defines the initial force excerted by Gravity on the player when Jump is triggered.

  • Gravity Multiplyer:
    Type: Float | Default Setting: 1
    Gravity is set in the Unity settings, however this multiplies that value before it is used in Jump calculations.
    Useful if you want to simulate weight changes, e.g. if you're player has picked up a large, heavy object.

  • Igloo Look Gyr OSC:
    Type: Structure
    Variables specific to the GYROSC based rotation input.
    • Clamp Vertical Rotation:
      Type: Boolean | Default Setting: False
      Should the vertical rotation be clamped to the following variables: MinimumX, MaximumX

    • Minimum X:
      Type: Float | Default Setting: -90
      minimum X axis rotation allowed if Clamp Vertical Rotation is active. Stops Gimbal lock from occuring

    • Maximum X:
      Type: Float | Default Setting: 90
      maximum X axis rotation allowed if Clamp Vertical Rotation is active. Stops Gimbal lock from occuring

    • Smooth:
      Type: Boolean | Default Setting: False
      Adds a linear interpolation smooth effect to the crosshair. Useful for instances where a realistic rotation is required.

    • Smooth Time:
      Type: Float | Default Setting: 5
      How much smoothing is applied to the crosshair if Smooth is enabled.

  • Igloo Look XIMU:
    Type: Structure
    Variables specific to the XIMU based rotation input. These are exactly the same as the Igloo Look Gyr OSC Variables, so please reference those.

  • Mouse Look:
    Type: Structure
    Variables specific to the STANDARD based rotation input. These are exactly the same as the Igloo Look Gyr OSC Variables, so please reference those.
    This does, however, have an extra set of variables that define the mouse sensitivity on the X and Y axis.

  • Use FOV Kick:
    Type: Boolean | Default Setting: False
    - Depricated -  Will be removed in a future release.

  • FOV Kick:
    Type: Structure
    - Depricated - Will be removed in a future release.

  • Use Head Bob:
    Type: Boolean | Default Setting: False
    Enables Head Bob on the character which simulates realistic movement.

  • Head Bob:
    Type: Structure
    A structure of elements for controlling simulated Head Bob if Use Head Bob is set to true.
    • Horizontal Bob Range:
      Type: Float | Default Setting: 0.33
      The maximum amount of bob allowed on the horizontal axis each side of 0.

    • Vertical Bob Range:
      Type: Float | Default Setting: 0.33
      The maximum amount of bob allowed on the vertical axis each side of 0.

    • Bobcurve:
      Type: Curve
      A X/Y curve defining the highest and lowest point of bob.

    • Vertical to Horizontal Ratio:
      Type: Float | Default Setting: 1
      - Depricated - Will be removed in a future release.

  • Jump Bob:
    Type: Structure
    - Depricated - Will be removed in a future release.

  • Step Interval:
    Type: Float | Default Setting: 5
    Time between steps in milliseconds when walking, defines head bob aspects as well as footstep sounds.

  • Footstep Sounds:
    Type: AudioClip Array | Default Setting: null
    An array to hold AudioClips that will be looped through on every footstep.

  • Jump Sound:
    Type: AudioClip | Default Setting: null
    An audio clip that will be played when Jump is triggered.

  • Land Sound:
    Type: AudioClip | Default Setting: null
    An audio clip that will be played when the player makes contact with a collider after jumping or falling.

  • Crouch Mode:
    Type: Enumeration | Default Setting: ONE
    This enum specifies how the character will crouch based on one of three options:
    1. ONE:
      Movement is unbound between crouch Min and crouch Max. meaning the character can freely move between those values and will not move on it's own.
    2. TWO:
      Movement is bound via a spring interpretation between the input value (clamped by crouch Min and crouch Max.) and 0.
      However the initial input is not 'sprung' meaning you can freely, and quickly, crouch, but you will then spring back to standing when you stop crouching.
    3. THREE:
      Movement is bound via a spring interpretation between the input value (clamped by crouch Min and crouch Max.) and 0. Spring force is always calculated.

  • Crouch Min:
    Type: Float | Default Setting: -0.4
    The minimum crouch position on the Y axis for the player.

  • Crouch Max:
    Type: Float | Default Setting: 0.2
    The maximum crouch position on the Y axis for the player. Could also be interpreted as standing on tip-toes as you can "crouch up" with positive values.

  • Invert Pitch:
    Type: Boolean | Default Setting: False
    Flips the Y input axis for all input devices. Theoretically making 'look up' look down.

Igloo Input Scripts

Igloo Input XIMU

This is a C# script that handles XIMU based OSC input from IglooOSC.cs and applies any calculations required to normalise it, before sending the rotation values to the Igloo Player Controller.

Igloo Input Gyr OSC

This is a C# script that handles GyrOSC based OSC input from IglooOSC.cs and applies any calculations required to normalise it, before sending the rotation values to the Igloo Player Controller.

  • Debug:
    Type: Boolean | Default Setting: False
    Prints incoming GyrOSC messages to the console.

Igloo Input Controller

This is a C# script that handles regular input any calculations required to normalise it, before sending the rotation values to the Igloo Player Controller

  • Use Keboard Input:
    Type: Boolean | Default Setting: False
    - Depricated - Will be removed in a future release.
  • Player Public:
    Type: Igloo First Person Controller | Default Setting: False
    - Depricated - Will be removed in a future release.

(c) Igloo Vision 2020