zoukankan      html  css  js  c++  java
  • ue4 可点击座舱实现 Clickable cockpit

      原文链接:https://www.cnblogs.com/LynnVon/p/13453938.html

      

      1、总的思路是通过点击发射射线LineTraceByChannel获取当前点击的模型BoneName,然后查表获得此BoneName对应的按键类型,再通过按键的类型决定如何处理此Bone(位置、旋转),最后再通过PoseableMeshComponent将Bone的transform同步给SkeletalMesh(需要自定义动画节点)。

      2、我将座舱内的按键分为Button、Switch、Knob、KnobSwitch、Cover五种

      

      3、通过DataTable存储每个按键的类型,初始状态,点击后的transform变化,执行的方法,按键描述文字,旋钮按键的数目等,下图为datatable的structure

      

      

      4、要想模型的每个按键可以点击,必须为每个按键建立独立的collider

       

       5、点击获得BoneName,通过bonename查datatable得到数据,再通过按键类型分别对五种按键分别处理,button就移动位置,Swich需要区分当前所处的状态,因为switch可以向上,可以向下,左右都可以板动。

        Knob就是旋转,KnobSwitch也是旋转,只不过旋转的值是固定的,上边Structure的switchNum的意思就是KnobSwitch总共有几个值。Cover也是单纯旋转就可以了。

      6、五种按键按下都会执行对应的方法,通过FindFunction实现。

      7、按键的移动简单,旋转见下图

      

      

      我试了直接GetBoneRotationByName(BoneSpace)然后加上从datatable获得的state1的rotation值,但总是在轴上出问题,最后不得以GetBoneRotationByName(WorldSpace)然后再转成BoneSpace,加上从datatable获得的state1的rotation值

      再通过TransformFromBoneSpace转成worldSpace,然后SetBoneRotationByName(worldSpace)才正确。

      8、按键transform变化都是操作PoseableMesh的,在操作完之后通过将PoseableMesh的变化同步到SkeletalMesh的AnimationBlueprint,完成。

      

      9、从PoseableMesh同步到SkeletalMesh的部分,可以看https://blog.csdn.net/sddxccj/article/details/102306489这篇文章,还有我之前的https://www.cnblogs.com/LynnVon/p/13334523.html

      10、在BeginPlay的部分需要对按键进行初始化,有些按键的初始状态,旋转等,还要记录下所有按键的当前状态,便于后边点击的时候区分,还要对skeletal进行初始化,例如BoneName数组的填充

      

      11、还有鼠标hover按键处出现描述文字,鼠标指针变化,比较简单

      结束。

      

      

      

      

       

      

  • 相关阅读:
    物联网操作系统HelloX V1.77(beta)版本发布
    对XX证券报关于物联网操作系统的几个问题的答复
    Android利用广播实现ViewPager中item之间的数据通信
    Android创建桌面快捷方式
    Android时间选择器对话框的使用
    Android数据库LitePal的存储操作
    Android创建数据表和LitePal的基本用法
    我的2014
    logstash 安装zabbix插件
    tag_on_failure => [] # prevent default _grokparsefailure tag on real records
  • 原文地址:https://www.cnblogs.com/LynnVon/p/13453938.html
Copyright © 2011-2022 走看看