ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Unity上的Oculus Quset2开发(2) —— 在VR里打棒球

2021-05-30 15:05:27  阅读:267  来源: 互联网

标签:场景 演示 Quset2 Oculus 物体 抓取 VR


在安装完Oculus的插件后,能在Assets/Oculus/文件夹下看到插件包含的所有资源和脚本。当然有耐心的话,可以配合官方文档一起一个一个去看,另一方面在Assets/Oculus/SampleFramework/Usage下有官方搭建的几个demo场景,实现和演示了一些基本功能。可以直接将场景打包出来放实机里看看效果。
有以下几个场景:
1.AppDeeplink : 演示从游戏内外联到其他APP上
2.CustomControllers: 演示VR相机和Touch控制器
3.CustomHands:演示VR相机和虚拟手
4.DebugUI:演示在场景里做Debug显示,因为Quest2好像都要打包出来测试。
5.DistanceGrab:演示远程抓取
6.HandsInteractionTrainScene:演示手部追踪。注意在打包时要把Hand Tracking Support改成Hands only或者Controller And Hands。默认时Controller only的会没有效果。感觉这是几个演示场景里最有趣的
7.Locomotion:演示基本移动方法
8.MixedRealityCapture:混合现实的演示,没试过。应该是用来做外部拍摄视频把人像合成到游戏场景里的演示。
9.OVROverlay:UIOverLay效果的演示。开启OverLay,就会让UI永远显示再最前面,可能会因为距离不匹配造成UI的违和感。

这次我们利用CustomHands场景来实现VR里的基本交互——看和抓取,最后实现一个类似打棒球的基本演示。
首先复制CustomHands场景并重命名为其他名字,然后双击打开它。
在场景里只有个地板和OVRCameraRig的预制体实例。

1.实现看的功能

OVRCameraRig是提供了Oculus优化的VR摄像机是Oculus插件里用来实现VR显示的最基本的物体,来取代unity原生的Camera。在结构上有6个Anchor用来表示追踪左右眼,两眼中心,身体和左右控制器。只要在场景里放入一个这个物体,就可以实现基本的VR四处看的功能。
在这里插入图片描述

接着看下OVRCameraRig上的脚本。
OVRCameraRig.cs //用来控制3D渲染和头显定位的脚本
在这里插入图片描述OVRManager.cs //VR头显主要的interface
在这里插入图片描述OVRHeadsetEmulator.cs //用来在unity里开发时用按键模拟头显转动

至此已经实现了看的功能。

2. 实现碰和抓

在OVRCameraRig的LeftHandAnchor/RightHandAnchor下有附加的预制体实例——CustomHandLeft/Right用来实现手部的模拟。我们来看下这个物体的结构
在这里插入图片描述
根物体上挂着主要的控制脚本,一个是OVRGrabber.cs 用来实现抓,一个是Hand.cs用来控制手模型的动画。
GripTrans控制抓到物体的位置
GrabVolume是用来检测抓的碰撞盒。
最后一个是手部模型

1.碰的功能:
由于在手部预制体上已经有了刚体和子物体上的碰撞盒,所以自动可以实现碰撞有碰撞盒的物体。
2.抓的功能
在这个预制体上也已经挂有了插件里实现的抓的OVRGrabber脚本。
在这里插入图片描述但光有抓取脚本不行,要在被抓取物体上挂上能被抓的OVRGrabbable脚本,同时被抓取物体要有碰撞盒和刚体。
在这里插入图片描述于是,看和抓两个功能就实现了。

3.做一个棒球小demo

1.做一个球
在场景里拖一个Sphere,在上面挂上RigidBody和sphereCollider 。
为了实现弹性碰撞,创建一个物理材质,将bounciness设为1。
2.做一个发球器
在场景里拖一个Cube,再这个cube下拖一个空物体作为发射点,摆好位置。随手写一个每几秒发射一个球的脚本。

public class PitchingMachine : MonoBehaviour
{
    [Tooltip("球的引用")]
    public Rigidbody Ball;
    [Tooltip("发射点")]
    public Transform Point;
    [Tooltip("发射间隔时间")]
    public float delayTime;
    [Tooltip("发射力量")]
    public float force;

    private float timer;
    private void Awake()
    {
        timer = delayTime;
    }
    void Update()
    {
        timer += Time.deltaTime;
        if (timer >= delayTime)
        {
            Ball.gameObject.SetActive(true);
            Ball.transform.position = Point.position;
            Ball.AddForce(Vector3.back * force,ForceMode.Impulse);
            timer = 0;
        }
    }
}

3. 做一个球棒,调整抓取的设置
拖一个cube,调整大小形成一个球棒的形状。
挂上OVRGrabbable脚本,将上面的AllowOffHandGrab关闭。
再将之前在两只手模型上的ParentHeldObject打开。

4.打包运行
在这里插入图片描述

标签:场景,演示,Quset2,Oculus,物体,抓取,VR
来源: https://blog.csdn.net/farcor_cn/article/details/117388714

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有