Как восстановить цвет объекта при повторном нажатии (если при первом нажатии цвет изменяется и при этом объектов больше одного)?
Проблема в повторном нажатии с учётом, что объект не один (а значит и цвета у них разные), как сохранить и восстановить цвета объектов. К примеру две коробки: желтая и синяя, мы изменяем цвет обоих на черный, как восстановить их первоначальный цвет?
using System.Collections.Generic;
using UnityEngine;
public class VisualRay : MonoBehaviour
{
public UnityEngine.UI.Selectable CurrentSelectable;
private Color color;
void LateUpdate()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
Debug.DrawRay(transform.position, transform.forward*100f, Color.yellow);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
GameObject selectable = hit.collider.gameObject;
if ((selectable.tag == "Box") && (Input.GetKeyDown(KeyCode.F)))
{
color = selectable.GetComponent<Renderer>().material.color;
selectable.GetComponent<Renderer>().material.color = Color.red;
}
}
}
}
Пробовал вот так, но не получилось:
using System.Collections.Generic;
using UnityEngine;
public class VisualRay : MonoBehaviour
{
public Transform Pointer;
public UnityEngine.UI.Selectable CurrentSelectable;
private Color color;
bool Transform_color = false;
void LateUpdate()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
Debug.DrawRay(transform.position, transform.forward*100f, Color.yellow);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
Pointer.position = hit.point;
GameObject selectable = hit.collider.gameObject;
if ((selectable.tag == "Box") && (Input.GetKeyDown(KeyCode.F)))
{
if (Transform_color == false)
{
color = selectable.GetComponent<Renderer>().material.color;
selectable.GetComponent<Renderer>().material.color = Color.red;
Transform_color = true;
}
else
{
selectable.GetComponent<Renderer>().material.color = color;
}
}
}
}
}
Ответы (1 шт):
Начнём с того необходимо создать скрипт для коробки, к примеру Box.cs
в Box.cs создать поле с ссылкой на Renderer для смены цвета по material.color, и два поля с Color, одно под цвет выделения другое под "базовый цвет".
Пример:
private Renderer _renderer;
[Serialize Field] private Color _highlightColor = Color.green;
[Serialize Field] private Color _defaultColor;
public Color highlightColor { get => _highlightColor ; set => _highlightColor = value; }
private void Awake()
{
_renderer = GetComponent<Renderer>();
}
public void SwitchColor(bool isSelected)
{
isSelected == true ? _renderer.material.color = _highlightColor : _renderer.material.color = _defaultColor; // Тернарный оператор
}
И создать метод который меняет цвет в зависимости от своего параметра.
Обратите внимание чтобы данный скрипт был на обьекте с Renderer либо укажите путь до него самостоятельно.
И теперь вам остаётся только обратится к данному методу:
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
GameObject selectable = hit.collider.gameObject;
if ((selectable.GetComponent<Box>()) && (Input.GetKeyDown(KeyCode.F)))
{
color = selectable.GetComponent<Renderer>().material.color;
selectable.GetComponent<Box>().highlightColor = color;
selectable.GetComponent<Box>().SwitchColor(true);
}
}