htc vive 中SteamVR Plugins入门之抓取物体、投掷

1、创建一个项目,删除掉maincamera,导入SteamVR的包,将teamVR拖进Hierarchy中,创建一个Planne和Sphere,将CameraRig拖动到Hierarchy视图中,SteamVR不用拖动,会自动生成


2、调整小球的大小和位置,给小球添加一个Rigidbody,然后设置mass和drag


3、点击Model,添加一个Collider



3、Edit-->Project Settings-->Time


4、File --> Project Settings --> Physics



5、抓取并投掷的脚本,将该脚本分别挂载到左右手柄的controller上就可以运行

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[RequireComponent(typeof(SteamVR_TrackedObject))]

public class PickUp : MonoBehaviour {

    //追踪的手柄
    SteamVR_TrackedObject trackedObj;
    //获取输入事件
    SteamVR_Controller.Device device;
    public Transform sphere;

    // Use this for initialization
    void Start () {
        trackedObj = GetComponent<SteamVR_TrackedObject>();
        Debug.Log("Start....................................."+trackedObj.name);
    }
	
	// Update is called once per frame
	void Update () {
        //获取扳机键类型
        device = SteamVR_Controller.Input((int)trackedObj.index);
      
     }

 

    private void OnTriggerStay(Collider collider)
    {
        Debug.Log("OnTriggerStay.....................................");

        //抓取物体
        //触摸中
        if (device.GetTouch(SteamVR_Controller.ButtonMask.Trigger))
        {
            // 不受重力影响
            collider.attachedRigidbody.isKinematic = true;
            //将物体设置到父级上
            collider.gameObject.transform.SetParent(gameObject.transform);
            Debug.Log("GetTouch.....................................");
        }


        //松开物体
        if (device.GetTouchUp(SteamVR_Controller.ButtonMask.Trigger))
        {
            Debug.Log("GetTouchUp.....................................");
            // 受重力影响
            collider.attachedRigidbody.isKinematic = false;
            //将父级置为空
            collider.gameObject.transform.SetParent(null);
            //投掷物体
            tossObject(collider.attachedRigidbody);
        }
    }

    //物体投掷
    void tossObject(Rigidbody rigidbody)
    {
        //如果是起始位置,则设置为起始位置,否则设置为父类
        Transform origin = trackedObj.origin ? trackedObj.origin : trackedObj.transform.parent;

        //如果起始位置部位空
        if(origin != null)
        {
            //将局部坐标转换成世界坐标
            rigidbody.velocity = origin.TransformVector((device.velocity));
            rigidbody.angularVelocity = origin.TransformVector((device.angularVelocity));
        }
        else
        {
            //设置速度
            rigidbody.velocity = device.velocity;
            //设置角速度
            rigidbody.angularVelocity = device.angularVelocity;
        }
    }


    //重置小球
    private void Reset()
    {
        //扣动扳机键
        if (device.GetTouchUp(SteamVR_Controller.ButtonMask.Touchpad))
        {
            //重置位置
            sphere.transform.position = Vector3.zero;
            //重置速度
            sphere.GetComponent<Rigidbody>().velocity = Vector3.zero;
            //重置角速度
            sphere.GetComponent<Rigidbody>().angularVelocity = Vector3.zero;
        }
    }

}


5、扣动手柄的扳机的时候抓住小球



6、松开扳机时松开物体




7、当松开扳机的同时投掷物体


抛出去之前小球的位置:


抛出去之后小球的位置


















参考资料:http://www.taikr.com/course/432/task/8518/show#



一、视野中找不到手柄


原因:1、手柄被隐藏掉了,没有激活

2、在unity5.6以上的版本需要添加Camera(eye)中添加两个脚本Steam VR_Update Poses和Steam VR_Camera

解决办法:选中手柄,勾选左右手柄Controller和Model前面的复选框



分别在搜索框中搜索“SteamVR_UpdatePoses”和“SteamVR_Camera”脚本,并添加给Camera(eye),再次运行手柄就可以被渲染上了




二、其中一个手柄一直接触不到小球


原因:Steam VR_Tracked Object中的Origin没有置为none

解决办法:

点击Controller,在Inspector面板找到Origin


点击右侧的小圆圈,在弹出的窗口中选择“None”



再次运行就可以看到手柄可以正常使用了



三、手柄接触小球后,OnTriggerStay函数没有被调用

原因:collider添加的位置有误。该方法被调用的前提:

  1. 确保两个物体都有碰撞器,且有一个勾选了触发器

  2. 确保至少有一个物体有刚体


解决方法:

原来脚本挂载的位置在model上,位置不对,正确设置小球和手柄后,创建的抓取物体的脚本挂载到Controller上就可以了:



正确的做法是:

小球添加一个Collider,但是isTrigger没有勾选,并且添加一个rigidbody


左右手柄的controller分别添加一个collider,并且勾选中trigger



model不添加collider和rigidbody组件


  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
HTC Vive是一种虚拟现实头显设备,为用户提供身临其境的游戏体验。如果你想入门HTC Vive游戏开发,以下是一些基本的步骤和建议。 首先,了解虚拟现实技术并熟悉HTC Vive设备的功能和特性。熟悉VR开发的基本原理,例如头部追踪、手部追踪和房间追踪等。你可以阅读HTC Vive的文档和教程,或参加相关的线上教学课程。 其次,学习游戏开发的基础知识和技巧。掌握Unity或Unreal Engine等虚拟现实游戏引擎的使用,这些引擎提供了开发虚拟现实游戏所需的工具和功能。你可以通过教程、示例项目和社区论坛来学习和掌握这些引擎。 接下来,开始制定你的游戏概念和设计。考虑你想要创建的游戏类型和玩法,以及如何充分利用HTC Vive的特性来提供更好的游戏体验。你可以画草图、编写设计文档和制作原型来帮助你更好地理解和实现你的游戏想法。 然后,开始编写和开发你的游戏。利用你学到的知识和工具,创建虚拟现实场景、模型和动画,并添加交互性和游戏逻辑。在这个过程,不断测试和调试你的游戏,以确保它在HTC Vive设备上正常运行并提供良好的用户体验。 最后,发布和推广你的游戏。将你的游戏打包并提交到HTC Vive的官方市场或其他游戏分发平台上。同时,在社交媒体和相关的游戏开发社区宣传和推广你的游戏,以吸引更多的玩家。 总结起来,入门HTC Vive游戏开发需要你对虚拟现实技术和HTC Vive设备有一定的了解,掌握游戏开发的基础知识和技巧,制定游戏概念和设计,实际编写和开发游戏,并最终发布和推广你的作品。通过不断学习和实践,你将能够创建出令人惊叹的HTC Vive虚拟现实游戏作品。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值