UE4 tutorial : Blueprints 筆記

先說目前心得結論。

Blueprint : Unreal提供的類Unity Prefab製作方式。而此prefab的程式component可以用類似拉線路圖拼圖的方式來組合程式互動邏輯。

------------------------------------------


參考教學 : https://www.raywenderlich.com/663-unreal-engine-4-blueprints-tutorial


建立Blueprints (class)時,他會請你選擇要繼承時做的class類別


大致看下來:
  1. Actor : 所有可以被丟到world裡的都叫Actor (即便他可能是不能幹嘛的花瓶)。
  2. Pawn : 繼承自Actor,可以被user操作和接受user input的Actor。
  3. Character : 繼承自Pawn,自帶四處走的功能了。

  4. Player Controller : (目前還沒用到先不講)

  5. Game Mode Base : 決定一些遊戲機制的物件,ex:玩家生成位置、輸入操作系統、如何進入遊戲、計分?

    完成Game Mode Base設計之後,要記得到Setting/World Setting告訴這個world你採用哪個Game Mode Base。


  6. (其他還沒用到過所以不太清楚)

總之先設定好Game Mode Base後,同時也要設定要產生的玩家可操作物件(Default Pawn Class)為何。

在Scene(Unreal中稱 Level)中放入Player Strat物件,該物件會決定player一開始生成出現的位置。



設定Input



要在unreal中做輸入與互動操作並在blueprint中編輯的話,需要先到Edit\Project setting\Input中設定

在這裡建立綁定Binding你的輸入key資訊 : 

Unreal提供兩種key binding
  1. Action Mapping : 該key只能存在兩種狀況 : "按下去"與"沒按下去"。也就是非0即1。
  2. Axis Mapping : 有程度量的輸入。比較直觀的例子大概是PS4的蘑菇頭搖桿那樣的感覺。

這邊的例子是採用Axis Mapping來做方向行走

建立Key mapping

多增加key來操作,這邊共有4個key


設定程度=> WASD控制上下左右


本章大重點來了

使用Blueprint來移動玩家


前面在設定中設完input種類之後,在pawn物件(玩家可操作的物件)中,blueprint會出現相對應的input事件


然後在pawn這個物件中建立一個變數(float)來讓人員可以在外部修改玩家移動速度



有趣的是一些加減乘除,矩陣運算之類的也都有blueprint可以叫出來用
這邊就是將玩家走的方向拿去程上移動速度


最後掛上一個 Add Movement Input會累積你要行走的量,方向等(其實也算不上累積,就一frame而已)

類推另一個水平方向,也是類似的結構

但是這樣仍然不會位移移動到player。

真的要讓他產生位移,需要加上兩個物件在Event Tick(類似unity的 update())上連接起來
  1. Consume Movement Input Vector
    計算目前累積的移動量
  2. AddActorLocalOffser
    對pawn物件實際產生位移去移動它


固定移動速度

------------------------

Actor Collision


跟unity一樣,unreal也有碰撞體的設計能讓物件之間產生碰撞事件或是彼此擋住。
unreal提供了兩種做法來實作碰撞效果。

  • Collision mesh
    依據模型mesh來自動產生的collision mesh。

  • Collision component
    跟unity的collider一樣,就是用box collider、 capsule、 sphere collider去拼出來一個自己的collider形狀。


啟用Collision

Unreal對collision的偵測只會做在blueprint的根物件root上,所以如果要用collision mesh的話,要記得把mesh往上搬去換掉預設的空root

之後再對object控制位移的"AddActorLocalOffset"打開"Sweep(移動)"就可以有Collision阻擋的效果。(究竟為甚麼我可能還要問一下公司同仁就是了,有點神奇阿)

>都可以碰撞且有event發生,但僅有開了Sweep的話,只有Blueprint (Prefab)中的root物件才能卡住牆(物件)不破圖的樣子




碰撞回饋


大概分有三種反應,都是block的狀況才會受到阻擋停下來。Overlap就是可以穿過去。
無論是overlap還是block,雙方都會收到trigger

這邊範例中是使用Custom的碰撞,並設定WorldDynamic類型的物件(這邊是玩家操作的類型的方塊)可以通過(overlap)

處理碰撞

我們撞了香蕉以後要把它吃掉,所以要讓香蕉消失。
故我們在香蕉的object中,去偵測當overlap發生時,要讓this香蕉物件被destory掉



加入"發生Overlap"的事件。


連接,要去Destory一個Actor。target預設是自己。


之後存起來compile一下。去level裡亂撒一波蕉。



有互動了呢

留言

這個網誌中的熱門文章

UE4 tutorial : Materials 筆記

UE4 tutorial : Getting Started