快速开发实用工具VRTK-008

008-Controller_UsingAGrabbedObject 操作抓取的物体


展示了抓取之后再使用对象的功能,具体操作GripPress按下抓取物体(VRTK_InteractGrab),然后TriggerPress使用物体开火射击或旋转(VRTK_InteractUse)。即场景中极简易的枪抓取后,再按扳机开火。

 

首先在左右手柄上添加VRTK_InteractGrab和VRTK_InteractUse脚本。主要设置抓取按键和操作按键。

其次制作交互的物体Gun和Whirlygig。同时编写各自的交互脚本,脚本继承于VRTK_InteractableObject。

Gun

 

Gun是从VRTK_InteractableObject派生出的脚本组件是对比较简单的可交互对象的应用。

namespace VRTK.Examples
{
    using UnityEngine;
    /// <summary>
    /// 模拟射击的脚本
    /// </summary>
    public class Gun : VRTK_InteractableObject
    {
        private GameObject bullet;
        /// <summary>
        /// 子弹的速度
        /// </summary>
        private float bulletSpeed = 1000f;
        /// <summary>
        /// 子弹射出去之后的生命周期
        /// </summary>
        private float bulletLife = 5f;
        /// <summary>
        /// trigger press 执行,即抓取后的操作
        /// </summary>
        /// <param name="usingObject"></param>
        public override void StartUsing(VRTK_InteractUse usingObject)
        {
            base.StartUsing(usingObject);
            //开火
            FireBullet();
        }
        /// <summary>
        /// 游戏开始之后的初始化
        /// </summary>
        protected void Start()
        {
            //找到子弹
            bullet = transform.Find("Bullet").gameObject;
            //默认子弹不显示
            bullet.SetActive(false);
        }
        /// <summary>
        /// 开火
        /// </summary>
        private void FireBullet()
        {
            //实例化一个子弹,即克隆体
            GameObject bulletClone = Instantiate(bullet, bullet.transform.position, bullet.transform.rotation) as GameObject;
            //激活子弹,可见
            bulletClone.SetActive(true);
            //获取子弹上的刚体组件(运动,模拟受力状况的组件)
            Rigidbody rb = bulletClone.GetComponent<Rigidbody>();
            //对子弹施加力的作用(方向+大小)
            rb.AddForce(-bullet.transform.forward * bulletSpeed);
            //子弹射出之后的生命周期,之后自动销毁
            Destroy(bulletClone, bulletLife);
        }
    }
}

Whirlygig 

 

Whirlygig也是继承自VRTK_InteractableObject,使盒子上的胶囊体旋转起来。

namespace VRTK.Examples
{
    using UnityEngine;
    /// <summary>
    /// 旋转的胶囊
    /// </summary>
    public class Whirlygig : VRTK_InteractableObject
    {
        //速度
        float spinSpeed = 0f;
        //胶囊体的引用
        Transform rotator;
        /// <summary>
        /// 抓取之后,扣动扳机之后触发,旋转速度为360
        /// </summary>
        /// <param name="usingObject"></param>
        public override void StartUsing(VRTK_InteractUse usingObject)
        {
            base.StartUsing(usingObject);
            spinSpeed = 360f;
        }
        /// <summary>
        /// 松开扳机后触发,旋转速度为0
        /// </summary>
        /// <param name="usingObject"></param>
        public override void StopUsing(VRTK_InteractUse usingObject)
        {
            base.StopUsing(usingObject);
            spinSpeed = 0f;
        }
        /// <summary>
        /// 游戏开始时,获取胶囊体的引用
        /// </summary>
        protected void Start()
        {
            rotator = transform.Find("Capsule");
        }
        /// <summary>
        /// 每一帧的操作,对胶囊体的旋转
        /// </summary>
        protected override void Update()
        {
            base.Update();
            rotator.transform.Rotate(new Vector3(spinSpeed * Time.deltaTime, 0f, 0f));
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值