可开启门(Openable_Door)

发表于2016-11-02
评论0 1.3k浏览
导语
        SteamVR_Unity_Toolkit工具包API详解:Openable_Door

可开启门(Openable_Door)
概述
        这个类继承自VRTK_InteractableObject,和一般的交互物体一样,可以用手柄触碰,抓取和使用
在VRTK_InteractableObject中,只是为使用逻辑设置了一些相关的参数,并没有具体到场景中来实现功能,这重写了父类的StartUsing方法,设置了自己的一些旋转参数,并在Update中每帧根据参数的值,来实现door对象的旋转。


        门板(Panel)是门(door)的子对象,门的Transform的位置在门板的一侧边缘,这样我门在脚本中控制门对象的旋转时,场景中呈现出来的就是门板绕着一侧旋转,这样就和真实场景中门的旋转一致。
        场景中的door对象的box collider比渲染在画面里的门要厚一点,这样手柄只要在门的附近,就可以使用它。

Inspector可见参数
        flipped: 如果勾选,那么参数sideFlip为1,默认是不勾选,sideFlip为-1
        rotated: 用于脚本中判断参数 side的值
        内置参数
        sideFlip: 翻转标志
        side 方位标志
        smooth: 平滑旋转门,每秒270度
        doorOpenAngle: 开门的角度是围绕door的y轴旋转-90度
        open: 如果当前手柄的使用目的是开门,为true,否则为false
        defaultRotation: 门初始(关门)的世界旋转角度
        openRotation: 下一次使用时门的目标世界旋转角度
        用sideFilip与side相乘来判断开门的方向,得到1则门朝里开,得到-1则门朝外推


公有方法
        StartUsing/1
        public override void StartUsing()
        Parameters
        GameObject -
        Returns
        none
        调用父类的StartUsing方法,并且重写父类StartUsing方法,设置开门方向,设置开门旋转角度的四元数。除了这两个作用,主要是更新参数open的值
        open=!open;
        私有/保护方法
        Start/0
        protected override void Start ()
        Parameters
        none
        Returns
        none
        调用父类的Start方法,并且重写父类Start方法,设门关闭三维形式旋转为当前对象Transform的旋转,同时调用SetRotation方法,设置下次门被使用的时候的目标旋转角度。根据flipped勾选情况为参数sideFlip赋值。
        Update/0
        protected override void Update()
        Parameters
        none
        Returns
        none
        调用父类的Update方法,并且重写父类的Update方法。每帧检测参数open的值,旋转门从当前位置到目标旋转角度,速度是每秒smooth度,乘上Time.deltaTime,转换为每帧旋转的角度。结合前面StartUsing方法中对open的设置,可以这样理解门开关的流程。


        Update/0
        private void SetRotation()
        Parameters
        none
        Returns
        none
        设置门的开启后旋转角度,只围绕y轴旋转。角度是设置好的(doorOpenAngle = -90f;),主要是判断旋转的方向,根据sideFlip*side的结果来判断是拉门还是推门。sideFlidp和side的值只会从1和-1中取,所以只要两者值正负一致,门都会围绕自己的y轴旋转doorOpenAngle,两者不一致时就会旋转-doorOpenAngle。
        SetDoorRotation/1
        private void SetDoorRotation()
        Parameters
        Vector3 - 手柄当前的世界坐标
        Returns
        none
        方法会根据手柄的位置和rotated来设置side值,最终都是用来控制门开启的方向。
        当rotated和flipped都不勾选的时候
        手柄在门旋转轴的右侧时,门会朝外开,即实现推门的效果
        手柄在门旋转轴的左侧时,门会朝里开,即实现拉门的效果


         当rotated勾选,flipped不勾选的时候
        手柄在门的里侧时,门会朝外开,即实现推门的效果
        手柄在门的外侧时时,门会朝里开,即实现推门的效果


        如果勾选了filpped,那么上述效果就是相反的
     看了上面的文章 热爱游戏创作的你是不是已经开始热血沸腾了呢?是不是迫不及待的想加入游戏团队成为里面的一员呢?
  福利来啦~赶快加入腾讯GAD交流群,人满封群!每天分享游戏开发内部干货、教学视频、福利活动、和有相同梦想的人在一起,更有腾讯游戏专家手把手教你做游戏!
腾讯GAD游戏程序交流群:484290331     

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引