Unity Vuforia Google VR - 无法让 onPointerEnter 自行更改游戏对象的材质
Posted
技术标签:
【中文标题】Unity Vuforia Google VR - 无法让 onPointerEnter 自行更改游戏对象的材质【英文标题】:Unity Vuforia Google VR - Can't make onPointerEnter to GameObject change material for itself 【发布时间】:2016-07-15 03:17:39 【问题描述】:我的场景中有两个 3d 按钮,当我注视任何按钮时,它将调用 OnPointerEnter 回调并保存指针注视的对象。
在 Gamepad 上按下 Fire1 后,我会应用从 Resources 文件夹中获取的材料。 当我凝视第二个按钮时,我的问题就开始了,按下 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;
我感觉到一些逻辑错误,并尝试创建另一个类来仅管理指针注视的对象,但我变得更加困惑。
希望得到一些帮助
谢谢
【问题讨论】:
【参考方案1】:当您按下 Fire1 时,两个按钮上都会调用 TukarMat()。如果 targetObject 真的变成 null 这应该在第一个按钮上给出错误,因为它试图从 null 对象获取组件。否则,它会像你说的那样改变。确保 OnPointerExit 正在被调用。
另外,您似乎正在更改共享材料。 文档建议:
修改 sharedMaterial 将改变所有使用此材质的对象的外观,并更改存储在项目中的材质设置。
不建议修改sharedMaterial返回的材质。如果要修改渲染器的材质,请改用材质。
因此,请尝试更改材质属性而不是 sharedMaterial,因为它只会更改该对象的材质。
【讨论】:
非常感谢。我已经对 OnPointerEnter 和 OnPointerExit 回调进行了测试,两者都有效。 @MuadzirAziz 和 targetObject.GetComponent以上是关于Unity Vuforia Google VR - 无法让 onPointerEnter 自行更改游戏对象的材质的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Google Cardboard SDK for Unity 创建 VR 视频播放器
Unity 中的 Firebase / Google VR 链接器错误 - iOS