Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. Voting for the Unity Awards are OPEN! We’re looking to celebrate creators across games, industry, film, and many more categories. Cast your vote now for all categories
    Dismiss Notice
  3. Dismiss Notice

Easier way to set the skin of a player

Discussion in 'Scripting' started by J4wsky, Sep 7, 2018.

  1. J4wsky

    J4wsky

    Joined:
    May 18, 2017
    Posts:
    19
    Hey! :)
    Just a quick question...
    is there a easier (less code) way of setting a sprites' image?
    I'm planning to make a lot of skins, and I know I can make something else instead of putting
    hundreds of cases.
    I've been looking on the web to find something i'm looking for
    but I couldn't find anything... guess i'm just a bad searcher. :p

    Btw. please don't blame me for my way of coding, i'm a beginner.
    And sorry for my bad england.

    Code (CSharp):
    1. using UnityEngine;
    2.  
    3. public class SkinSetScript : MonoBehaviour {
    4.  
    5.     [Header("Skins")]
    6.     [SerializeField]
    7.     Sprite Skin1, Skin2, Skin3, Skin4, Skin5, Skin6, Skin7, Skin8, Skin9, Skin10, Skin11, Skin12, Skin13, Skin14, Skin15, Skin16, Skin17, Skin18, Skin19, Skin20, Skin21, Skin22, Skin23, Skin24, Skin25, Skin26, Skin27, Skin28, Skin29, Skin30;
    8.  
    9.     void Start()
    10.     {
    11.         setCurrentSkin();
    12.     }
    13.  
    14.     void setCurrentSkin()
    15.     {
    16.         var SpriteRenderer = GetComponent<SpriteRenderer>();
    17.         switch(PlayerPrefs.GetInt("currentSkin"))
    18.         {
    19.             case 1: SpriteRenderer.sprite = Skin1; break;
    20.             case 2: SpriteRenderer.sprite = Skin2; break;
    21.             case 3: SpriteRenderer.sprite = Skin3; break;
    22.             case 4: SpriteRenderer.sprite = Skin4; break;
    23.             case 5: SpriteRenderer.sprite = Skin5; break;
    24.             case 6: SpriteRenderer.sprite = Skin6; break;
    25.             case 7: SpriteRenderer.sprite = Skin7; break;
    26.             case 8: SpriteRenderer.sprite = Skin8; break;
    27.             case 9: SpriteRenderer.sprite = Skin9; break;
    28.             case 10: SpriteRenderer.sprite = Skin10; break;
    29.             case 11: SpriteRenderer.sprite = Skin11; break;
    30.             case 12: SpriteRenderer.sprite = Skin12; break;
    31.             case 13: SpriteRenderer.sprite = Skin13; break;
    32.             case 14: SpriteRenderer.sprite = Skin14; break;
    33.             case 15: SpriteRenderer.sprite = Skin15; break;
    34.             case 16: SpriteRenderer.sprite = Skin16; break;
    35.             case 17: SpriteRenderer.sprite = Skin17; break;
    36.             case 18: SpriteRenderer.sprite = Skin18; break;
    37.             case 19: SpriteRenderer.sprite = Skin19; break;
    38.             case 20: SpriteRenderer.sprite = Skin20; break;
    39.             case 21: SpriteRenderer.sprite = Skin21; break;
    40.             case 22: SpriteRenderer.sprite = Skin22; break;
    41.             case 23: SpriteRenderer.sprite = Skin23; break;
    42.             case 24: SpriteRenderer.sprite = Skin24; break;
    43.             case 25: SpriteRenderer.sprite = Skin25; break;
    44.             case 26: SpriteRenderer.sprite = Skin26; break;
    45.             case 27: SpriteRenderer.sprite = Skin27; break;
    46.             case 28: SpriteRenderer.sprite = Skin28; break;
    47.             case 29: SpriteRenderer.sprite = Skin29; break;
    48.             case 30: SpriteRenderer.sprite = Skin30; break;
    49.         }
    50.     }
    51. }
     
  2. LaneFox

    LaneFox

    Joined:
    Jun 29, 2011
    Posts:
    7,383
    Use an Array.

    Code (csharp):
    1. public Sprite[] Skins;
    2.  
    3. private void Start()
    4. {
    5.     SetSkins();
    6. }
    7.  
    8. private void SetSkins()
    9. {
    10.     var SpriteRenderer = GetComponent<SpriteRenderer>();
    11.     int index = PlayerPrefs.GetInt("currentSkin");
    12.     SpriteRenderer.sprite = Skins[index];
    13. }
     
    J4wsky likes this.
  3. J4wsky

    J4wsky

    Joined:
    May 18, 2017
    Posts:
    19
    Thank you so much!:)
     
  4. johne5

    johne5

    Joined:
    Dec 4, 2011
    Posts:
    1,133
    I would look into creating a List<Sprite>.
    Then you could replace the switch statement with a for loop.
     
  5. johne5

    johne5

    Joined:
    Dec 4, 2011
    Posts:
    1,133
    Same concept as Lanefox