How do I display my dictionary key output in the console?

So, I have a keybind script for my settings menu, and I want to add a function at the end that displays my dictionary (named “Keys”) keys and values in the console.

void ConsoleOutput()
    {
        foreach (KeyValuePair<string, KeyCode> kvp in Keys)
            Debug.Log ("Key = {0}, Value = {1}", kvp.Key, kvp.Value);
    }
                 
}

kvp.Key in line 4 is underlined red with an error stating “Cannot implicitly convert type ‘string’ to ‘object’”. What does this error mean and how can I fix it?

Thanks!

1 Like

Your debug logging format is incorrect.
Drop the commas, use + and you should (but probably not necessary) use .ToString()

Hmmmm, where would the .ToString() function go?

It’s not required for the debug but it’s good form to cast correctly but forget it for now.
I tried to edit my post with an example but it’s messed on mobile. Anyway, check this out: Iterate through String,Float dictionary. - Questions & Answers - Unity Discussions

Hmmm, I replaced the commas with + but there is still no output in my console. WHere is my full script:

using System.Collections;
using System.Linq;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;

public class KeyBindScript : MonoBehaviour {

    private Dictionary<string, KeyCode> Keys = new Dictionary<string, KeyCode> ();

    private Dictionary<string, Text> ButTextLookup = new Dictionary<string, Text> ();

    private GameObject currentKey;

    public Text forward, backwards, movleft, movright, leanleft, leanright, run, jump, crouch, interact, attack, clairvoyance, journal, inventory, tasks, watch, quickwheel, pausemenu;  

    void Start ()
    {
        Keys.Add("Forward", KeyCode.W);
        Keys.Add("Backwards", KeyCode.S);
        Keys.Add("MovLeft", KeyCode.A);
        Keys.Add("MovRight", KeyCode.D);
        Keys.Add("LeanLeft", KeyCode.Q);
        Keys.Add("LeanRight", KeyCode.E);
        Keys.Add("Run", KeyCode.LeftShift);
        Keys.Add("Jump", KeyCode.Space);
        Keys.Add("Crouch", KeyCode.LeftControl);
        Keys.Add("Interact", KeyCode.F);
        Keys.Add("Attack", KeyCode.Mouse0);
        Keys.Add("Clairvoyance", KeyCode.Mouse1);
        Keys.Add("Journal", KeyCode.J);
        Keys.Add("Inventory", KeyCode.I);
        Keys.Add("Tasks", KeyCode.X);
        Keys.Add("Watch", KeyCode.C);
        Keys.Add("QuickWheel", KeyCode.Mouse3);
        Keys.Add("PauseMenu", KeyCode.Escape);
        Keys.Add("Additional1", KeyCode.R);
        ButTextLookup.Add ("Forward", forward);
        ButTextLookup.Add("Backwards", backwards);
        ButTextLookup.Add ("MovLeft", movleft);
        ButTextLookup.Add ("MovRight", movright);
        ButTextLookup.Add ("LeanLeft", leanleft);
        ButTextLookup.Add ("LeanRight", leanright);
        ButTextLookup.Add ("Run", run);
        ButTextLookup.Add ("Jump", jump);
        ButTextLookup.Add ("Crouch", crouch);
        ButTextLookup.Add ("Interact", interact);
        ButTextLookup.Add ("Attack", attack);
        ButTextLookup.Add ("Clairvoyance", clairvoyance);
        ButTextLookup.Add ("Journal", journal);
        ButTextLookup.Add ("Inventory", inventory);
        ButTextLookup.Add ("Tasks", tasks);
        ButTextLookup.Add ("Watch", watch);
        ButTextLookup.Add ("QuickWheel", quickwheel);
        ButTextLookup.Add ("PauseMenu", pausemenu);

        forward.text = Keys ["Forward"].ToString ();
        backwards.text = Keys ["Backwards"].ToString ();
        movleft.text = Keys ["MovLeft"].ToString ();
        movright.text = Keys ["MovRight"].ToString ();
        leanleft.text = Keys ["LeanLeft"].ToString ();
        leanright.text = Keys ["LeanRight"].ToString ();
        run.text = Keys ["Run"].ToString ();
        jump.text = Keys ["Jump"].ToString ();
        crouch.text = Keys ["Crouch"].ToString ();
        interact.text = Keys ["Interact"].ToString ();
        attack.text = Keys ["Attack"].ToString ();
        clairvoyance.text = Keys ["Clairvoyance"].ToString ();
        journal.text = Keys ["Journal"].ToString ();
        inventory.text = Keys ["Inventory"].ToString ();
        tasks.text = Keys ["Tasks"].ToString ();
        watch.text = Keys ["Watch"].ToString ();
        quickwheel.text = Keys ["QuickWheel"].ToString ();
        pausemenu.text = Keys ["PauseMenu"].ToString ();


    }
       

    void OnGUI()
    {
        if (currentKey != null) {
            Event e = Event.current;
            if (e.isKey) {
                Keys [currentKey.name] = e.keyCode;
                foreach (var kvp in Keys.ToList()) {
                    if (kvp.Value == e.keyCode) {
                        if (currentKey.name != kvp.Key) {
                            Keys [kvp.Key] = KeyCode.None;
                            ButTextLookup [kvp.Key].text = "*Unbound*";
                            }
                        }
                    }
               
                currentKey.transform.GetChild(0).GetComponent<Text> ().text = e.keyCode.ToString ();
                currentKey = null;
            }
        }
    }

    public void ChangeKey(GameObject clicked)
    {
        currentKey = clicked;
    }

    void ConsoleOutput()
    {
        foreach (KeyValuePair<string, KeyCode> kvp in Keys)
            Debug.Log ("Key = {0} + Value = {1}"+ kvp.Key + kvp.Value);
    }
                   
}
1 Like

Where are you calling the console output method?

Ah, youre right, I had to link the method to an OnClick button event. Bingo, thanks

1 Like

Debug.Log(“Key = {0},Value = {1}”+ kvp.Key + kvp.Value);

1 Like