2016-07-15 14 views
0

私は自分のシーンに2つの3dボタンを持っています。ボタンのいずれかを注視すると、OnPointerEnterコールバックが呼び出され、ポインタが注視したオブジェクトを保存します。Unity Vuforia Google VR - GameObjectへのonPointerEnterを作成できません。

GamepadでFire1を押すと、Resourcesフォルダから取得した資料が適用されます。 2番目のボタンを見つめて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を押したときに

ホープ一部が

答えて

0

TukarMat(ありがとう助け取得は)両方のボタンで呼び出さbeeingてさ。 targetObjectが実際にnullになっている場合、nullオブジェクトからコンポーネントを取得しようとしているため、最初のボタンでエラーが発生するはずです。それ以外の場合は、あなたが言ったように両方が変わるでしょう。 OnPointerExitが呼び出されていることを確認してください。

また、共有資料を変更しているようです。 ドキュメント示唆:

変更sharedMaterialは、この材料を使用しているすべてのオブジェクトの外観を変更し、あまりにもプロジェクトに保存されている材料の設定を変更します。

sharedMaterialから返されたマテリアルを変更することはお勧めしません。レンダラーのマテリアルを変更する場合は、代わりにマテリアルを使用します。

したがって、sharedMaterialではなくマテリアルプロパティを変更すると、そのオブジェクトのマテリアルが変更されるだけです。

+0

ありがとうございます。私はOnPointerEnterとOnPointerExitコールバックの両方でテストを行いました。どちらも動作しました。 –

+0

@MuadzirAzizおよびtargetObject.GetComponent (); OnPointerExitの後にnullを返さないのですか? –

関連する問題