void Start()
    {
        //Set up keyboard grid
        KeyboardGrid      = new Grid <KeyObject>(10, 3, cellSize, origin, highlightObject, (Grid <KeyObject> grid, int x, int y, KeyCode key, GameObject highlightObject) => new KeyObject(grid, x, y, key, highlightObject), cellSize / 2);
        KeyObject[,] keys = KeyboardGrid.GetGridObjects();
        foreach (KeyObject keyObject in keys)
        {
            keyObject.SetActive(true);
            UpdateKey(keyObject, KeyObject.KeyAssignment.Universal, universalColor);
        }
        foreach (Vector2 position in unusedCells)
        {
            UpdateKey(keys[(int)position.x, (int)position.y], KeyObject.KeyAssignment.Unassigned, unassignedColor);
            keys[(int)position.x, (int)position.y].SetActive(false);
        }

        //Assign keycodes to keys and add to universal keys list
        for (int j = 0; j < keys.GetLength(1); j++)
        {
            for (int i = 0; i < keys.GetLength(0); i++)
            {
                keys[i, j].SetKey(keyboardKeys[i, j]);
                if (keys[i, j].GetKey() != KeyCode.None)
                {
                    UniversalKeys.Add(keys[i, j].GetKey());
                }
            }
        }

        //Set up assignment info for when keys are clicked, universal is the default starting assignee
        assignee = KeyObject.KeyAssignment.Universal;
        assignmentInfoDictionary.Add(KeyObject.KeyAssignment.Universal, new KeyAssignmentInfo(UniversalKeys, universalColor));
        assignmentInfoDictionary.Add(KeyObject.KeyAssignment.Player1, new KeyAssignmentInfo(Player1Keys, player1Color));
        assignmentInfoDictionary.Add(KeyObject.KeyAssignment.Player2, new KeyAssignmentInfo(Player2Keys, player2Color));

        //Get reference to dropdown
        assigneeDropdown = FindObjectOfType <Dropdown>();
        List <Dropdown.OptionData> dropdownOptions = new List <Dropdown.OptionData>();

        dropdownOptions.Add(new Dropdown.OptionData("Universal"));
        dropdownOptions.Add(new Dropdown.OptionData("Player 1"));
        dropdownOptions.Add(new Dropdown.OptionData("Player 2"));
        assigneeDropdown.ClearOptions();
        assigneeDropdown.AddOptions(dropdownOptions);
        assigneeDropdown.onValueChanged.AddListener(delegate
        {
            ChangeAssignee();
        });

        //Set marker colours
        universalColourMarker.transform.Find("Colour Object").GetComponent <RawImage>().color  = universalColor;
        player1ColourMarker.transform.Find("Colour Object").GetComponent <RawImage>().color    = player1Color;
        player2ColourMarker.transform.Find("Colour Object").GetComponent <RawImage>().color    = player2Color;
        unassignedColourMarker.transform.Find("Colour Object").GetComponent <RawImage>().color = Color.black;

        //Hide unused character colours
        ChangeNumberOfPlayers(Manager <InputManager> .Instance.numberOfPlayers);
    }
    public void ChangeAssignee()
    {
        int optionSelected = assigneeDropdown.value;

        assignee = (KeyObject.KeyAssignment)optionSelected;
    }
 public void UpdateKey(KeyObject keyObject, KeyObject.KeyAssignment keyAssignment, Color color)
 {
     keyObject.SetSpriteColor(color);
     keyObject.keyAssignment = keyAssignment;
 }