0

I'm currently making a purposefully frustrated mini-game where the movement keys change each time you use them. I intended to do this with the code bellow.

public class Flop : MonoBehaviour
{
    private string[] DirF = new string[] { "r","f","v","t","g","b","y","h","u"};
    private string keyF = "y";

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.keyF))
        {
            // insert code to do a little flop and select a new index to represent keyF
        }
    }
}

this is simplified from what I wrote, but essentially using the keyF variable to quickly replace the necessary input in the jump command. Initially I tried to make it a string as shown above, but clearly the KeyCode command doesn't accept strings and I have no idea what variable could be inserted instead.

2 Answers 2

1

The Unity KeyCode enum seems like the perfect match for your use case. Instead of storing an array of strings, why not just store an array of KeyCodes? Your code would change to something like:

public class Flop : MonoBehaviour
{
    private KeyCode[] DirF = new KeyCode[] { KeyCode.R, KeyCode.F, KeyCode.V, KeyCode.T, KeyCode.G, KeyCode.B, KeyCode.Y, KeyCode.H, KeyCode.U};

    private KeyCode keyF = KeyCode.Y;

    void Update()
    {
        if (Input.GetKeyDown(keyF)) // We don't need to do KeyCode.keyF since keyF variable is already a KeyCode enumeration option
        {
            (insert code to do a little flop and select a new index to represent keyF)
        }
    }
}
Sign up to request clarification or add additional context in comments.

Comments

0

The GetKeyDown method has both KeyCode and string forms for the argument. In your case, you simply need to pass the string representation of the key to the GetKeyDown method, as described here. As such:

public class Flop : MonoBehaviour
{
    private string[] DirF = new string[] { "r","f","v","t","g","b","y","h","u"};
    private string keyF = "y";

    void Update()
    {
        if (Input.GetKeyDown(keyF))
        {
            (insert code to do a little flop and select a new index to represent keyF)
        }
    }
}

The alternative would be to store an array of the KeyCode enums instead.

public class Flop : MonoBehaviour
{
    private KeyCode[] _dirF = new []
    {
        KeyCode.R, 
        KeyCode.F, 
        KeyCode.V, 
        KeyCode.T, 
        KeyCode.G, 
        KeyCode.B, 
        KeyCode.Y, 
        KeyCode.H, 
        KeyCode.U
    };
    private KeyCode _keyF = KeyCode.Y;

    void Update ( )
    {
        if ( Input.GetKeyDown ( _keyF ) )
        {
            // ...
        }
    }
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.