0

シーンに 2 つの 3D ボタンがあり、いずれかのボタンを見つめると、OnPointerEnter コールバックが呼び出され、ポインターが見つめたオブジェクトが保存されます。

ゲームパッドで 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;
    }
}

論理エラーを感じ、ポインターが注視したオブジェクトのみを管理する別のクラスを作成しようとしましたが、さらに混乱していました。

いくつかの助けを得ることを願っています

ありがとうございました

4

1 に答える 1

0

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

また、共有素材を変更しているようです。ドキュメントは次のことを示唆しています:

sharedMaterial を変更すると、このマテリアルを使用するすべてのオブジェクトの外観が変更され、プロジェクトに保存されているマテリアル設定も変更されます。

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

そのため、そのオブジェクトのマテリアルのみが変更されるため、sharedMaterial の代わりにマテリアル プロパティを変更してみてください。

于 2016-07-15T06:34:38.670 に答える