Как я могу использовать PlayerPrefs для сохранения значений цвета объекта? - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь сохранить цвет объекта в зависимости от того, что выбрал пользователь, и загрузить его обратно на экран при нажатии клавиши. С некоторой помощью из ответов мне удалось найти способ сохранить значения RGB цвета с помощью PlayerPrefs, однако я не уверен, как установить "colorObject" в текущий цвет объекта. Я видел решения, в которых используются новые Color () и предопределенные наборы цветов, но я хочу сохранить то, что выбирает пользователь. Есть ли способ установить "colorObject" на текущий цвет объекта?

     /* Changing the color via key presses
     * 
     */

    if (Input.GetKeyDown(KeyCode.R))
    {
        rend.material.SetColor("_Color", Color.red);
    }
    if (Input.GetKeyDown(KeyCode.G))
    {
        rend.material.SetColor("_Color", Color.green);
    }
    if (Input.GetKeyDown(KeyCode.B))
    {
        rend.material.SetColor("_Color", Color.blue);
    }
}

// To add button elements to the visual interface
void OnGUI() 
{
    // Saving
    if (GUI.Button(new Rect(700, 330, 50, 30), "Save"))
    {
        // Saving the object's color 
        Color colorOfObject = new Color();
        PlayerPrefs.SetFloat("rValue", colorOfObject.r);
        PlayerPrefs.SetFloat("gValue", colorOfObject.g);
        PlayerPrefs.SetFloat("bValue", colorOfObject.b);
    }

    // Loading
    if (GUI.Button(new Rect(770, 330, 50, 30), "Load"))
    {
        Color colorOfObject = new Color(PlayerPrefs.GetFloat("rValue", 1F), PlayerPrefs.GetFloat("gValue", 1F), PlayerPrefs.GetFloat("bValue", 1F));
    }

Ответы [ 2 ]

0 голосов
/ 15 января 2019

В Awake получите ссылку на средство визуализации GameObject:

private Renderer rend;

void Awake() {
    rend = GetComponent<Renderer>();
}

Сохраните красный, синий, зеленый и - если вам это нужно - альфа-каналы цвета в качестве различных параметров с плавающей запятой:

// Saving
if (GUI.Button(new Rect(700, 330, 50, 30), "Save"))
{
    Color colorOfObject = rend.material.GetColor("_Color");

    PlayerPrefs.SetFloat("rValue", colorOfObject.r);
    PlayerPrefs.SetFloat("gValue", colorOfObject.g);
    PlayerPrefs.SetFloat("bValue", colorOfObject.b);
    PlayerPrefs.SetFloat("aValue", colorOfObject.a);
}

А затем, чтобы загрузить его, используйте GetFloat соответственно:

// Loading
if (GUI.Button(new Rect(770, 330, 50, 30), "Load"))
{
    Color defaultColor = Color.red;
    Color colorOfObject = new Color(
            PlayerPrefs.GetFloat("rValue", defaultColor.r),
            PlayerPrefs.GetFloat("gValue", defaultColor.g),
            PlayerPrefs.GetFloat("bValue", defaultColor.b),
            PlayerPrefs.GetFloat("aValue", defaultColor.a)
        );

    rend.material.SetColor("_Color", colorOfObject);
}
0 голосов
/ 15 января 2019

вы можете сделать это;

public static void SaveColor (Color color, string key) {
    PlayerPrefs.SetFloat(key + "R", color.r);
    PlayerPrefs.SetFloat(key + "G", color.g);
    PlayerPrefs.SetFloat(key + "B", color.b);
}

public static Color GetColor (string key) {
    float R = PlayerPrefs.GetFloat(key + "R");
    float G = PlayerPrefs.GetFloat(key + "G");
    float B = PlayerPrefs.GetFloat(key + "B");
    return new Color(R, G, B);
}

или вы можете сохранить его шестнадцатеричный код в виде строки и загрузить его

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...