我用游戏隐藏虚拟按键键怎么没有确定键啊?

游戏(13)
unity(16)
#游戏unity#AR中奇妙的虚拟按钮
先说点题外话,博主在调试项目的时候,什么设置也没有改,突然就运行保存,说vuforia的实例没有初始化,去网上也没有查到错误原因,吓的博主去脚本里找了好久qwq后来在群里问了相关有经验的人才知道——这只是unity打开太久的一个正常反应(???表示无奈),关闭重新打开unity就好了,当时的报错如下图(大家遇到这个错误不要怕啊,,)
好了言归正传,博主昨天很奇妙的在unity里的vuforia文件里发现了一个VirtualButton的prefab,这是高通平台提供的一个功能,里面自带了一些接口和方法,需要我们来调用。那么,这个究竟是个什么东西呢?
对比普通的UI组件
虚拟按钮和普通的UI中的按钮不一样,普通的按钮是在电脑屏幕上或者手机屏幕上进行点击,从而实现基本事件响应;而虚拟按钮是在现实世界中你的识别图上的某个你设定的位置范围内进行点选,实现基本事件的响应。类似 下图:蓝色的按钮就是虚拟按钮,颜色和材质是可以修改的
当然,同时,这也就要求识别图的清晰度要很高,才能准确的进行事件响应。
- 关于虚拟按钮的添加与基本设置
从vuforia文件中将VirtualButton的prefab拖入ImageTarget,成为其子物体。
在VirtualButton添加脚本组件VirtualButtonBehaviour,我一般把灵敏度设为high
将虚拟按钮拖到图片上的对应位置,还有就是按钮的大小最好不要超过识别图片的10%
- 脚本编写
在实际项目中,不需要计算按钮位置,直接使用Virtual Button的prefab即可。
在unity3d平台下,主要涉及到一个类和一个接口:
IVirtualButtonEventHandler。必须要实现这个接口。
其中这个接口包含两个方法:
public void OnButtonPressed(VirtualButtonAbstractBehaviour vb)
public void OnButtonReleased(VirtualButtonAbstractBehaviour vb)
跟普通按钮一样,点击和释放的两个功能。 因为是实现了一个接口,所以这两个方法必须都有基础的实现,要不然会报错。当事件处理程序被调用时,您将通过一个实例的虚拟按钮,包括按钮的名称。通过这种方式,可以应对不同的按钮事件。虚拟按钮示例应用程序的一个完整的例子:用虚拟按钮实现茶壶材质的变化——
指定m_TeapotMaterials1数组0元素为default材质,数组1元素为red材质。
using UnityE
using System.Collections.G
public class changeMaterial : MonoBehaviour,
IVirtualButtonEventHandler
public Material[] m_TeapotMaterials1;
private GameObject m1T
private int pressNum = 0;
void Start()
VirtualButtonBehaviour[] vbs = GetComponentsInChildren&VirtualButtonBehaviour&();
for (int i = 0; i & vbs.L ++i)
vbs[i].RegisterEventHandler(this);
m1Teapot = transform.FindChild("teapot").gameO
void Update()
switch(pressNum)
m1Teapot.GetComponent&Renderer&().material = m_TeapotMaterials1[1];
m1Teapot.GetComponent&Renderer&().material = m_TeapotMaterials1[0];
当点击或者触碰虚拟按钮的时候,该函数会被调用
public void OnButtonPressed(VirtualButtonAbstractBehaviour vb)
Debug.Log("OnButtonPressed::" + vb.VirtualButtonName);
pressNum++;
if (pressNum &= 2) pressNum = 0;
点击不同的虚拟按钮,茶壶的材质会发生变化。
对于我们的项目,我做了一个测试,用虚拟按钮实现对角色动画的控制;脚本如下:
using UnityE
using System.Collections.G
public class changeidle : MonoBehaviour,IVirtualButtonEventHandler
private GameO
private int pressNum = 0;
void Start()
role = GameObject.Find("TestACT2");
anim = GameObject.Find("TestACT2").GetComponent&Animation&();
VirtualButtonBehaviour[] vbs = GetComponentsInChildren&VirtualButtonBehaviour&();
for (int i = 0; i & vbs.L ++i)
vbs[i].RegisterEventHandler(this);
void Update()
switch (pressNum)
role.GetComponent&Animation&().Play("idle");
role.GetComponent&Animation&().Play("attack");
anim.Play("die");
当点击或者触碰虚拟按钮的时候,该函数会被调用
public void OnButtonPressed(VirtualButtonAbstractBehaviour vb)
{ role.GetComponent&Animation&().Play("attack");
Debug.Log("OnButtonPressed::" + vb.VirtualButtonName);
pressNum++;
if (pressNum & 2) pressNum = 1;
public void OnButtonReleased(VirtualButtonAbstractBehaviour vb)
Debug.Log("OnButtonReleased::" + vb.VirtualButtonName);
这就实现了点击次数播放不同的动画。
- 虚拟按钮在运行时的重新配置
一个虚拟按钮,在运行时更改以下属性:
灵敏度 - 设置一个虚拟按钮的灵敏度通过设置SensitivitySetting 资源在VirtualButtonBehaviour实例。
在图像上目标的位置和面积的大小 - 改变通过改变部件在转换中的虚拟按钮的游戏对象的位置,和缩放的虚拟按钮的位置和大小。
搭建其他游戏对象的虚拟按键
重新配置虚拟按钮在运行时的一个典型用例是,当你想要一个按钮,创建对象。为了适应这种情况,一个虚拟按钮,将不需要图像目标中的一个子对象,但可以连接到另一个对象,其本身具有的图像目标作为父。对象移动时,虚拟按钮一起移动,重新配置自动适应。
注意:这仅适用于预先定义的条件下编辑脚本执行。必须位于它的父对象的中心的虚拟按钮。它始终是轴对准目标图像。此外,父不能有一个非均匀的规模。如果确实如此,编辑器,脚本会自动重新调整对象,并显示警告。
好了,以上就是这篇博客的全部内容了。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1284次
排名:千里之外
原创:20篇
(10)(6)(6)后使用快捷导航没有帐号?
平板/笔记本
云服务专区
怎么才能在玩游戏时候隐藏虚拟导航键啊
&登堂入室&
来自:荣耀8 FRD-AL10
同标题,怎么才能在玩游戏时候隐藏虚拟导航键啊,虚拟键有的游戏会当着游戏显示
width:100%">
&渐入佳境&
来自:荣耀8 FRD-AL00
去设置里找智能辅助然后点开导航栏,打开导航栏隐藏
width:100%">
&登堂入室&
来自:荣耀8 FRD-AL10
丫丫维保 发表于
去设置里找智能辅助然后点开导航栏,打开导航栏隐藏
哦了,好使 谢谢
width:100%">
&渐入佳境&
来自:荣耀8 FRD-AL00
城阳袋鼠 发表于
哦了,好使 谢谢
width:100%">
&独步江湖&
来自:荣耀8 FRD-AL00
width:100%">
世界还小,陪你去到天涯海角门源油菜花有人说:经验+反思=成长荣耀X2
忆海情青海湖油菜花海台风来临
花粉客户端
Make it Possible
Make your device special
华为云服务
Huawei cloud services
音乐播放器
Huawei Music
Huawei Vmall
没有最新动态
关注花粉俱乐部
联系我们:
|关注花粉俱乐部:
Copyright (C)
华为软件技术有限公司 版权所有 保留一切权利

我要回帖

更多关于 虚拟按键 的文章

 

随机推荐