问题在于重新点击,考虑到对象不是一个(因此它们的颜色不同),如何保存和恢复对象的颜色。比如两个盒子:黄色和蓝色,我们把两者的颜色都改成黑色,如何恢复它们原来的颜色呢?
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;
}
}
}
}
}
首先,您需要为盒子创建一个脚本,例如
Box.csBox.cs创建一个带有链接以Renderer将颜色更改为的material.color字段,以及两个带有 的字段Color,一个在选择颜色下,另一个在“基色”下。例子:
并创建一个根据其参数改变颜色的方法。
请注意,此脚本位于对象上,
Renderer或者您自己指定它的路径。现在你只需要转向这个方法: