如何检测射线投射没有击中物体

时间:2019-12-06 12:50:12

标签: c# unity3d

在我的项目(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);
        } */
    }
}

enter image description here

1 个答案:

答案 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会解决所有拼写错误。