在我的项目(VR,因此我不使用鼠标)中,我需要突出显示或更改带有标签的多个对象的颜色,但一次只能显示一个对象,我不知道如何检测射线投射不再发生宾语。 现在是我的代码:
public class colorChange : MonoBehaviour
{
RaycastHit hitInfo;
private bool isSelected = false;
void Update()
{
if(Physics.Raycast(transform.position, transform.forward, out hitInfo, 10))
{
if (hitInfo.transform.tag == "changeToColor")
{
isSelected = true;
hitInfo.collider.gameObject.GetComponent<Renderer>().material.color = new Color32(0, 255, 0, 255);
}
else
{
isSelected = false;
}
}
/* if(isSelected == false)
{
hitInfo.collider.gameObject.GetComponent<Renderer>().material.color = new Color32(255, 255, 255, 255);
} */
}
}
答案 0 :(得分:1)
存储被击中的对象,以便当射线投射击中新对象时,您可以将射线投射击中的前一个对象的颜色变回原来的颜色,然后将保存的对象更改为新对象。
赞:
private Renderer m_HitObject;
private Color m_HitObjectOldColor;
...
if(Physics.Raycast(transform.position, transform.forward, out hitInfo, 10))
{
Renderer hitRenderer = hitInfo.collider.GetComponent<Renderer>();
if(hitInfo.transform.CompareTag("changeToColor"))
{
if(m_HitObject != null && hitRenderer !=
m_HitObject)
{
m_HitObject.color = m_OldColor;
}
m_HitObject = hitInfo.collider.gameObject;
m_OldColor = hitRenderer.material.color;
hitRenderer.material.color = new Color32(0, 255, 0, 255);
}
}
很抱歉,您的IDE会解决所有拼写错误。