Search Unity

Question Change sprite while scheme input manager changed

Discussion in 'Input System' started by mffntime, May 4, 2023.

  1. mffntime

    mffntime

    Joined:
    Jul 25, 2022
    Posts:
    1
    Hi from this code I want change sprite when I use different input, in this case between keyboard and xbox controller.

    Code (CSharp):
    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. using UnityEngine.InputSystem;
    5.  
    6. public class InputSchemeSprite : MonoBehaviour
    7. {
    8.     PlayerInput input;
    9.     SpriteRenderer spriteRenderer;
    10.  
    11.     [SerializeField] private Sprite keyboardSprite;
    12.     [SerializeField] private Sprite controllerSprite;
    13.  
    14.     private void Start()
    15.     {
    16.         input = GetComponent<PlayerInput>();
    17.         spriteRenderer = GetComponent<SpriteRenderer>();
    18.         CurrentScheme();
    19.     }
    20.  
    21.     private void Update()
    22.     {
    23.         CurrentScheme();
    24.     }
    25.     void CurrentScheme()
    26.     {
    27.         if(input.currentControlScheme == "Keyboard")
    28.         {
    29.             spriteRenderer.sprite = keyboardSprite;
    30.             Debug.Log("Keyboard");
    31.         }
    32.         else if (input.currentControlScheme == "Gamepad")
    33.         {
    34.             spriteRenderer.sprite = controllerSprite;
    35.             Debug.Log("Controller");
    36.         }
    37.     }
    38. }
    But this code doesnt work, unity give me this error code

    NullReferenceException: Object reference not set to an instance of an object
    InputSchemeSprite.CurrentScheme () (at Assets/Scripts/InputSchemeSprite.cs:27)
    InputSchemeSprite.Update () (at Assets/Scripts/InputSchemeSprite.cs:23)

    Please if someone can help me to resolve this, thanks