UE4學習筆記_03

今天主要學習了BluePrint,看了官方文檔的介紹,而後是YouTube上的視頻教學。視頻教學的前9集講的比較細(或者說比較囉嗦...),把基礎內容都覆蓋了;後面的QuickShot系列則短小精悍,在幾分鐘內寥寥數語就展現了BluePrint的某個功能要點,受益頗豐。編程

但總的來講這些視頻教程仍是偏基礎的,幾大類BluePrint裏只涉及到了Level BP和Class BP,DataOnly BP、BP Marco Library以及BP Interface都未談及,要想深刻仍是要更多地參考文檔(或高級ShowCase例子)。併發

下面是一些BP的學習心得:異步

  • Class BP是構建遊戲邏輯的核心單元,它的功能和定位相似於Unity3D和UDK裏的Prefab,能夠將多個Asset組合在一塊兒造成一個有機的Actor,而後由Level BP將多個Class BP串起來就構成了遊戲的完整邏輯
  • Level BP裏的內容不宜過多,它的主要職責應該是讓多個ClassBP協同進行工做,從而實現整個遊戲的完整邏輯。最好不要在Level BP裏作一些很細節、很底層的工做(好比控制一個燈的開關等),這一點相似於大型C/C++程序的main()函數的實現方式
  • 除了經過UE4系統內消息與外界交互以外,Class BP能夠經過建立EventDispatcher來給外界發送自定義消息,經過建立CustomEvent來從外界接收自定義消息。這樣就使BP間通訊沒有了任何的障礙
  • 若是工程的複雜度上升到一個級別,光經過EventDispatcher和CustomEvent來進行BP間通訊可能容易出錯,也不易管理,此時就應該使用BP Interface來規範BP間的通訊接口;此外,通用的BP邏輯應該存放到BP Macro Library中
  • Class BP支持繼承,便可以在一個Class BP的基礎上建立子Class BP,子BP會繼承父BP的全部成員,標記爲私有的變量在子BP中沒法修改
  • 值得一提的是:子BP實現的事件響應函數不會覆蓋父BP的響應函數,當事件被捕獲時是先執行子BP的響應函數,執行完畢後再執行父BP的響應函數,由此類推,造成一個串行的響應函數鏈
  • 在Timeline的曲線中增長點的快捷鍵是Shift+MLB

從上面能夠看到,做爲BP的核心:ClassBP的設計是參考了多種編程語言的精華所得來的:它採用了面向對象裏的封裝、單繼承,又採用了異步編程裏經常使用的異步消息傳遞模型,同時還參考了函數式編程裏的無反作用的函數調用鏈,這使得整個BP系統在規模和複雜度上升到很高的程度時仍然能夠被控制和管理,同時還很好地支持了分佈式和併發的應用場景,這避免了不少難以發現和排查的條件競爭Bug,而性能方面也能很好地隨着硬件資源(好比多核)的擴展而擴展。從BP的設計中不難看出,UE4的設計和實現是通過長期調研和深思熟慮後的成果。編程語言

UE4博大精深,還有不少東西值得學習,後面有機會再繼續寫。分佈式

相關文章
相關標籤/搜索