[RESOLVIDO] Tem alguma maneira de simplificar esse script?
2 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Tem alguma maneira de simplificar esse script?
Eu tenho um script que tem muitos if que fazem praticamente a mesma coisa, só que modificada.
Tem alguma maneira de simplificar esse script pra eu não ter que criar um if novo sempre que eu adicionar um tema novo?
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class CustomTheme : MonoBehaviour
{
public List<Theme> themes;
public int actualTheme;
public float colorSpeed;
public Image he;
public Image ib;
public Image cs;
public Image tb;
public void SetTheme(int themeID)
{
actualTheme = themeID;
}
void Awake()
{
actualTheme = PlayerPrefs.GetInt("actualTheme");
}
void Update()
{
/*
pink = 0
purple = 1
indigo = 2
blue = 3
teal = 4
light green = 5
amber = 6
brown = 7
blue gray = 8
*/
PlayerPrefs.SetInt("actualTheme", actualTheme);
if (actualTheme == 0)
{
he.color = Color.Lerp(he.color, themes[0].he700, colorSpeed * Time.smoothDeltaTime);
ib.color = Color.Lerp(ib.color, themes[0].ib400, colorSpeed * Time.smoothDeltaTime);
cs.color = Color.Lerp(cs.color, themes[0].cs800, colorSpeed * Time.smoothDeltaTime);
tb.color = Color.Lerp(tb.color, themes[0].tb50, colorSpeed * Time.smoothDeltaTime);
}
if (actualTheme == 1)
{
he.color = Color.Lerp(he.color, themes[1].he700, colorSpeed * Time.smoothDeltaTime);
ib.color = Color.Lerp(ib.color, themes[1].ib400, colorSpeed * Time.smoothDeltaTime);
cs.color = Color.Lerp(cs.color, themes[1].cs800, colorSpeed * Time.smoothDeltaTime);
tb.color = Color.Lerp(tb.color, themes[1].tb50, colorSpeed * Time.smoothDeltaTime);
}
if (actualTheme == 2)
{
he.color = Color.Lerp(he.color, themes[2].he700, colorSpeed * Time.smoothDeltaTime);
ib.color = Color.Lerp(ib.color, themes[2].ib400, colorSpeed * Time.smoothDeltaTime);
cs.color = Color.Lerp(cs.color, themes[2].cs800, colorSpeed * Time.smoothDeltaTime);
tb.color = Color.Lerp(tb.color, themes[2].tb50, colorSpeed * Time.smoothDeltaTime);
}
if (actualTheme == 3)
{
he.color = Color.Lerp(he.color, themes[3].he700, colorSpeed * Time.smoothDeltaTime);
ib.color = Color.Lerp(ib.color, themes[3].ib400, colorSpeed * Time.smoothDeltaTime);
cs.color = Color.Lerp(cs.color, themes[3].cs800, colorSpeed * Time.smoothDeltaTime);
tb.color = Color.Lerp(tb.color, themes[3].tb50, colorSpeed * Time.smoothDeltaTime);
}
if (actualTheme == 4)
{
he.color = Color.Lerp(he.color, themes[4].he700, colorSpeed * Time.smoothDeltaTime);
ib.color = Color.Lerp(ib.color, themes[4].ib400, colorSpeed * Time.smoothDeltaTime);
cs.color = Color.Lerp(cs.color, themes[4].cs800, colorSpeed * Time.smoothDeltaTime);
tb.color = Color.Lerp(tb.color, themes[4].tb50, colorSpeed * Time.smoothDeltaTime);
}
if (actualTheme == 5)
{
he.color = Color.Lerp(he.color, themes[5].he700, colorSpeed * Time.smoothDeltaTime);
ib.color = Color.Lerp(ib.color, themes[5].ib400, colorSpeed * Time.smoothDeltaTime);
cs.color = Color.Lerp(cs.color, themes[5].cs800, colorSpeed * Time.smoothDeltaTime);
tb.color = Color.Lerp(tb.color, themes[5].tb50, colorSpeed * Time.smoothDeltaTime);
}
if (actualTheme == 6)
{
he.color = Color.Lerp(he.color, themes[6].he700, colorSpeed * Time.smoothDeltaTime);
ib.color = Color.Lerp(ib.color, themes[6].ib400, colorSpeed * Time.smoothDeltaTime);
cs.color = Color.Lerp(cs.color, themes[6].cs800, colorSpeed * Time.smoothDeltaTime);
tb.color = Color.Lerp(tb.color, themes[6].tb50, colorSpeed * Time.smoothDeltaTime);
}
if (actualTheme == 7)
{
he.color = Color.Lerp(he.color, themes[7].he700, colorSpeed * Time.smoothDeltaTime);
ib.color = Color.Lerp(ib.color, themes[7].ib400, colorSpeed * Time.smoothDeltaTime);
cs.color = Color.Lerp(cs.color, themes[7].cs800, colorSpeed * Time.smoothDeltaTime);
tb.color = Color.Lerp(tb.color, themes[7].tb50, colorSpeed * Time.smoothDeltaTime);
}
if (actualTheme ==
{
he.color = Color.Lerp(he.color, themes[8].he700, colorSpeed * Time.smoothDeltaTime);
ib.color = Color.Lerp(ib.color, themes[8].ib400, colorSpeed * Time.smoothDeltaTime);
cs.color = Color.Lerp(cs.color, themes[8].cs800, colorSpeed * Time.smoothDeltaTime);
tb.color = Color.Lerp(tb.color, themes[8].tb50, colorSpeed * Time.smoothDeltaTime);
}
}
}
[System.Serializable]
public class Theme
{
public string themeName;
public Color tb50;
public Color cs800;
public Color he700;
public Color ib400;
}
Tem alguma maneira de simplificar esse script pra eu não ter que criar um if novo sempre que eu adicionar um tema novo?
Última edição por Ghosthy em Qui Fev 01, 2018 6:34 pm, editado 1 vez(es)
INKnight- Avançado
- PONTOS : 3600
REPUTAÇÃO : 18
Áreas de atuação : Iniciante em programação em C#;
Iniciante em design;
Respeito as regras :
Re: [RESOLVIDO] Tem alguma maneira de simplificar esse script?
Então cara o seu script tem uma variavel inteira de indice atual( "actualTheme" ) como so vai ter um tema atual voce pode pegar esse indice e setar nos valores das cores ...
Tente o seguinte:
Tente o seguinte:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class CustomTheme : MonoBehaviour
{
public List<Theme> themes;
public int actualTheme;
public float colorSpeed;
public Image he;
public Image ib;
public Image cs;
public Image tb;
public void SetTheme(int themeID)
{
actualTheme = themeID;
// SEMPRE QUE ESSE METODO DE MUDAR FOR CHAMADO
// ELE JA VAI SETAR NO PLAYERPREFS PARA NAO FICAR SENDO SETADO INUMERAS VEZES
// NO UPDATE
PlayerPrefs.SetInt("actualTheme", actualTheme);
}
void Awake()
{
actualTheme = PlayerPrefs.GetInt("actualTheme");
SetTheme (actualTheme);
}
void Update()
{
he.color = Color.Lerp(he.color, themes[actualTheme].he700, colorSpeed * Time.smoothDeltaTime);
ib.color = Color.Lerp(ib.color, themes[actualTheme].ib400, colorSpeed * Time.smoothDeltaTime);
cs.color = Color.Lerp(cs.color, themes[actualTheme].cs800, colorSpeed * Time.smoothDeltaTime);
tb.color = Color.Lerp(tb.color, themes[actualTheme].tb50, colorSpeed * Time.smoothDeltaTime);
}
}
[System.Serializable]
public class Theme
{
public string themeName;
public Color tb50;
public Color cs800;
public Color he700;
public Color ib400;
}
Re: [RESOLVIDO] Tem alguma maneira de simplificar esse script?
Valeu pelas dicas cara!
Funcionou direitinho aqui, muito obrigado
Funcionou direitinho aqui, muito obrigado
INKnight- Avançado
- PONTOS : 3600
REPUTAÇÃO : 18
Áreas de atuação : Iniciante em programação em C#;
Iniciante em design;
Respeito as regras :
Tópicos semelhantes
» [RESOLVIDO] Script
» [RESOLVIDO] Script de imã
» [RESOLVIDO]Alguém tem alguma dica sobre NavMeshAgent
» [RESOLVIDO] Quero saber se tem na unity alguma funçao que seja um trigger?
» [RESOLVIDO] Erro SCRIPT C# com Objeto (Script need's to derive from MonoBehaviour)
» [RESOLVIDO] Script de imã
» [RESOLVIDO]Alguém tem alguma dica sobre NavMeshAgent
» [RESOLVIDO] Quero saber se tem na unity alguma funçao que seja um trigger?
» [RESOLVIDO] Erro SCRIPT C# com Objeto (Script need's to derive from MonoBehaviour)
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos