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按鍵處出現描述文字,鼠標指針變化,比較簡單

  結束。

  

  

 

 

  

 

 

 

 

  

 

 

   

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM