2016-07-15 3 views
0

내 씬에 두 개의 3d 버튼이 있습니다. 버튼 중 하나를 보았을 때 OnPointerEnter 콜백을 호출하고 포인터가 가리킨 객체를 저장합니다.Unity Vuforia Google VR - GameObject 자체에 대한 자료 변경을위한 onPointerEnter를 만들 수 없습니다.

게임 패드에서 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; 
    } 
} 

의 양쪽에 부착 된 스크립트입니다하지만 난 더 혼란스러워지고 있었다. 일부

도움 받고

희망()는 Fire1을 눌러 두 버튼에서 호출에 beeing 당신에게

답변

0

TukarMat 감사드립니다. targetObject가 실제로 null이되면, null 객체에서 구성 요소를 가져 오기 때문에 첫 번째 버튼에서 오류가 발생합니다. 그렇지 않으면 네가 말했듯이 둘 다 바뀔거야. OnPointerExit가 호출되는지 확인하십시오.

또한 공유 자료를 변경하는 것으로 보입니다. 설명서에 나와있는 내용은 다음과 같습니다.

sharedMaterial을 수정하면이 자료를 사용하는 모든 개체의 모양이 변경되고 프로젝트에 저장된 자료 설정도 변경됩니다.

sharedMaterial에서 반환 한 자료는 수정하지 않는 것이 좋습니다. 렌더러의 재질을 수정하려면 대신 재질을 사용하십시오.

따라서 sharedMaterial 대신 재질 속성을 변경해보십시오.이 재질 속성은 해당 개체의 재질 만 변경하기 때문입니다.

+0

고마워요. OnPointerEnter 및 OnPointerExit 콜백 모두에서 테스트를 수행했습니다. 둘 다 작동했습니다. –

+0

@MuadzirAziz 및 targetObject.GetComponent (); OnPointerExit 후에 null을 반환하지 않습니까? –

관련 문제