藍圖是UE4中非常重要的系統,要想使用藍圖必然涉及到不同藍圖之間的互相調用,這種互相調用有一個專業術語叫做“藍圖間通信”。
有這樣一個需求:有一個燈的藍圖(BP_Light),內部有一個自定義事件ControlLight(bool)通過一個布爾值控制燈的開關。玩家按Q鍵時可以控制燈的開關。
我們先來分析一下:想要實現上面的需求,需要在Character藍圖中控制BP_Light藍圖,這里就用到了兩個藍圖之間的通信。
在正式開始之前我們首先準備工程。新建基于第三人稱的藍圖工程(不太熟悉的可以參考之前的文章),并創建基于Actor的藍圖類,命名為BP_Light,雙擊打開。添加StaticMesh組件和PointLight組件,如下圖所示。
切換到EventGraph,開始編寫自定義事件ControlLight(bool),拖動燈光組件到事件藍圖中,從輸出端口拉出一條線,搜索Set Visibility并將自定義事件的布爾參數連接到Set Visibility節點的New Visibility端口。整體效果如下圖所示。
接下來設置玩家交互按鍵操作。打開工程設置(Edit>Project Settings),在打開的窗口中找到輸入(Engine>Input),在InputAction中添加Interaction,對應的快捷鍵為Q,具體如下圖所示。
打開ThirdPersonCharacter藍圖,切換到事件圖標,搜索Interact并創建節點,至此,我們前期的準備工作已經完成,藍圖間通信的每種方式都是以這個模板為基礎的,以后不再贅述。
想實現藍圖間通信有很多種方式,我們會一一為大家講解。
第一種方式:直接變量引用
第一種也是最直接的方式,我們在Character中引用BP_Light變量,如下圖所示。
之后將Light變量拖動到事件圖標中,并從輸出端口拉出一條線,搜索ControlLight,并正確連接執行端口完成后如下圖所示。
目前存在的問題是Light變量只是定義了,并沒有賦值。所以接下來要給變量賦值。可以有兩種方式:
1)將變量公開,在關卡中進行賦值。
點擊Light變量旁邊的小眼睛使其處于打開的狀態,借助吸取工具進行選擇即,可如下圖所示。
2)在EventBeginPlay事件后查找場景中所有的BP_Light類型,并將找到的第一個賦予給變量,如下圖所示。
經過兩種方式中的任意一種,運行游戲即可實現我們的需求。
好了,今天的分享就到這里,更多關于unity游戲培訓的問題,歡迎咨詢千鋒教育在線名師。千鋒教育擁有多年IT培訓服務經驗,采用全程面授高品質、高體驗培養模式,擁有國內一體化教學管理及學員服務,助力更多學員實現高薪夢想。