我正在尝试根据用户选择的内容保存对象的颜色,然后通过按键将其加载回屏幕上。在答案的帮助下,我设法找到了一种使用PlayerPrefs保存颜色RGB值的方法,但是,我不确定如何将“ 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));
}
答案 0 :(得分:1)
您可以执行此操作;
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);
}
或者您可以将其十六进制代码另存为字符串并加载
答案 1 :(得分:0)
在Awake
中,获得对GameObject
渲染器的引用:
private Renderer rend;
void Awake() {
rend = GetComponent<Renderer>();
}
将红色,蓝色,绿色以及(如果需要)颜色的Alpha通道保存为不同的浮动首选项:
// 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);
}