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按键处出现描述文字,鼠标指针变化,比较简单

      结束。

      

      

      

      

       

      

  • 相关阅读:
    C#飞行棋总结
    用python+pygame写贪吃蛇小游戏
    光线步进——RayMarching入门
    EasyX库进行图片绘制函数
    Unity复杂的旋转-欧拉角和四元数
    MATLAB GUI制作快速入门
    Three.js模型隐藏或显示
    Qt 为QPushButton、QLabel添加鼠标移入移出事件
    Unity c# 状态机的简单入门
    JavaFX Chart设置数值显示
  • 原文地址:https://www.cnblogs.com/LynnVon/p/13453938.html
Copyright © 2011-2022 走看看