基于Steam VR开发遇到的问题

基于Steam VR(Steam 2.0以上)触摸回调

编者前言

生活兜兜转转终于进入了Unity行业,并且进行了实际项目的开发,是基于Steam VR的,因为是新手入行,同时有没有VR大牛带着,总会遇到一些难以解决的问题,本着不能做了就过去的思想,决定给自己遇到的困难都进行记录,也同时和别人分享,本系列长期更新,有问题关注知享奇公众号,且有资源分享,后台留言 ,回复留言必回。

问题:在steam进行交互的时候,总会遇到触摸,抓取,放下这些状态,因公司项目需求,提出了需要检测触摸物体的回调,并且,知道是触摸的哪个物体?

困难:Steam2.0之后,手的函数被封装成了一个Hand脚本,基于平常的思路,应该是在手这个模型,或者在整个物体上挂一个自己的脚本,然后,有个触摸回调函数。
当手触碰到某一个物体的时候,出发了某一个函数,就比如给某一物体挂了碰撞器,在脚本中就有OnCollisionEnter这样类似的函数,但是实际上,在Hand或者整个Player里面都没有一个类似这种的函数。

思路:实际上经过查看源码,官网对于Hand脚本并没有提供可开放的扩写,Interactable是提供的,这是此时我陷入了一个很奇怪的逻辑。一个思路:我要用手去触摸一个物体,然后获取回调,知道这个物体被我的手摸到,并且,知道被摸的物体的信息。另一个思路:Interactable中提供可重写的虚方法 OnHandHoverBegin,这个方法的作用就是当有手在我这个物体上的时候,调用。 此时思路就很奇怪,我要的是手触摸,能知道摸到哪个物体,而不是,这个物体知道被收触摸了。

解决方法:思路的帮助点还是来自于Steam中的机制,实际上,SteamVR用的并不是事件等,而是SendMessage,到这里,解决方法基本就出来了。我自己写了个脚本,复写Interactable,并且代替Interactable挂到要被触摸的物体上去,

public class InteractableSelf : Interactable
{
	protected override void OnHandHoverBegin(Hand hand)
	{
		base.OnHandHoverBegin(hand);
		GameObject.Find("Player").SendMessage("Test2", gameObject);
	}
}
然后当物体被触摸的时候,把自身和消息发送到所需要的脚本中去,刚好完美解决了需求。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是小狼君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值