2016-07-15 67 views
0

我在场景中有两个3d按钮,当我注视任何按钮时,它将调用OnPointerEnter回调并保存指针凝视的对象。Unity Vuforia Google VR - 无法将onPointerEnter改为自身的GameObject更改材质

在游戏手柄上按下Fire1后,我应用从资源文件夹获取的材料。 当我凝视第二个按钮时,我的问题开始了,并且按下Fire1按钮将同时笨拙地更改两个按钮。

这是我附着到这两个按钮

using UnityEngine; 
using UnityEngine.EventSystems; 
using Vuforia; 
using System.Collections; 

public class TriggerMethods : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler 
{ 
Material _mat; 
GameObject targetObject; 
Renderer rend; 
int i = 0; 

// Update is called once per frame 
void Update() { 
    if (Input.GetButtonDown("Fire1")) 
     TukarMat(); 
} 

public void OnPointerEnter(PointerEventData eventData) 
{   
    targetObject = ExecuteEvents.GetEventHandler<IPointerEnterHandler>(eventData.pointerEnter);  
} 

public void OnPointerExit(PointerEventData eventData) 
{ 
    targetObject = null; 
}  

public void TukarMat() 
{ 

    Debug.Log("Value i = " + i); 

    if (i == 0) 
    { 
     ApplyTexture(i); 
     i++; 
    } 
    else if (i == 1) 
    { 
     ApplyTexture(i); 
     i++; 
    } 
    else if (i == 2) 
    { 
     ApplyTexture(i); 
     i = 0; 
    } 
} 

void ApplyTexture(int i) 
{ 
    rend = targetObject.GetComponent<Renderer>(); 
    rend.enabled = true; 
    switch (i) 
    { 
     case 0:     
      _mat = Resources.Load("Balut", typeof(Material)) as Material; 
      rend.sharedMaterial = _mat; 
      break; 
     case 1: 
      _mat = Resources.Load("Khasiat", typeof(Material)) as Material; 
      rend.sharedMaterial = _mat; 
      break; 
     case 2: 
      _mat = Resources.Load("Alma", typeof(Material)) as Material; 
      rend.sharedMaterial = _mat; 
      break; 
     default: 
      break; 
    } 
} 

的脚本我感测到的一些逻辑错误和试图使另一个类为仅管理对象的指针注视到但我得到更加困惑。

希望得到一些帮助

谢谢

回答

0

TukarMat()是beeing叫上当您按下FIRE1两个按钮。如果targetObject真的变为null,那么它应该会在第一个按钮上出现错误,因为它试图从空对象中获取组件。否则,如你所说,它会改变。确保OnPointerExit被调用。

此外,它似乎你正在改变共享材料。 该文档建议:

修改sharedMaterial将更改使用此材质的所有对象的外观,并更改存储在项目中的材质设置。

不建议修改sharedMaterial返回的材质。如果要修改渲染器使用材质的材质,请改为。

因此,请尝试更改材质属性而不是sharedMaterial,因为它只会更改该对象的材质。

+0

非常感谢。我已经完成了OnPointerEnter和OnPointerExit回调测试,两者都有效。 –

+0

@MuadzirAziz and targetObject.GetComponent (); OnPointerExit后没有返回null? –