如何解决从脚本中添加Vuforia虚拟按钮不会触发处理程序
当用户触摸屏幕时,我正在从脚本中将VirtualButtons添加到ImageTarget。我使用通过3d模型创建的预制件来构建按钮,该预制件已经包含带有处理程序的脚本。这是用户触摸屏幕时的代码:
print(">>> adding mark");
playAddingMark();
float dist = 0.0f;
Plane targetPlane = new Plane(hit.transform.up,hit.transform.position);
targetPlane.Raycast(ray,out dist);
Vector3 planePoint = ray.GetPoint(dist);
GameObject mark = Instantiate(baseMark);
mark.transform.tag = "mark";
mark.transform.parent = this.transform;
mark.transform.localScale = new Vector3(0.03f,0.03f,0.03f);
mark.transform.localRotation = new Quaternion(0.5f,0.5f,-0.5f,0.5f);
mark.transform.position = planePoint;
这是带有处理程序的脚本:
using UnityEngine;
using Vuforia;
public class MarkButtonListener: MonoBehaviour {
public Material markPressedMaterial;
public Material markIdleMaterial;
private Transform torus;
void Start() {
print("*** mark button Start: " + this.gameObject.name + "," + this.gameObject.tag);
torus = this.gameObject.transform.Find("halo/haloTorus");
this.gameObject.GetComponent < VirtualButtonBehaviour > ().RegisterOnButtonPressed(OnButtonPressed);
this.gameObject.GetComponent < VirtualButtonBehaviour > ().RegisterOnButtonReleased(OnButtonReleased);
}
public void OnButtonPressed(VirtualButtonBehaviour vb) {
print("*** mark Pressed " + vb.VirtualButtonName);
setTorusMaterial(markPressedMaterial);
}
public void OnButtonReleased(VirtualButtonBehaviour vb) {
print("*** mark Released " + vb.VirtualButtonName);
setTorusMaterial(markIdleMaterial);
}
private void setTorusMaterial(Material material) {
if (torus != null) {
torus.GetComponent < Renderer > ().material = material;
}
else {
print("NO TORUS");
}
}
}
如果我在编辑器中的ImageTarget中添加了预制实例,则触发处理程序并应用材料,但是当我从脚本中添加按钮时,永远不会触发处理程序。另外,当我实例化脚本中的按钮时,我可以在日志中看到调用了Start()方法,因此按钮应该附加了处理程序...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。