1. 程式人生 > >UE4藍圖製作VR漫遊

UE4藍圖製作VR漫遊

1.新建開啟場景 新建資料夾BluePrint & Maps  Blueprint下建立GameMode資料夾  在GameMode資料夾下選擇 Blueprint Class  點選GameMode Base 

2.找到setting 下 Word setting  找到Game  Mode 替換GameMode 。在DefaultPawnClass 右邊選擇+  CreateNewPawn  在Blueprint資料夾下新建資料夾  建立角色類

3. 開啟角色類,Add一個Scene  在Scene下新增一個攝像機  右邊屬性有一個Look to Amd 預設屬性為true ,意思 是攝像機和頭顯繫結到一起的。然後再新增兩個運動控制器, MotonController 一個為左手一個為右手 修改右手的MotonController選項 為Right   然後新增顯示手柄 顯示引擎目錄  Engine Content --》VREditor ---》Devices---》Vice   選擇手柄 然後返回角色控制類 新增在左右手的下面。然後  Engine Content --》VREditor ---》Devices---》Generic 下面找到頭顯示 然後也新增到角色類 放置在攝像機的下面。 返回角色類根節點,找到 Actor屬性 下的Spawn Colision Handing Method 選項選擇 選擇Always Spawn Ignore Colisions  然後重啟 專案工程

4.手柄的按鍵反饋  方法1>在Blueprint資料夾下建立一個新的資料夾Controller   右鍵新建Miscellaneous 找到ForceFeedBackEffect  建立兩個反饋 開啟設定左右手 和振動強度和持續時間。 找到角色類 選擇EventGraph   繪製藍圖 先獲取控制器 GetPlayerController 接著繪製 呼叫ClientPlayForceFeedback   在ForceFeedbackEffect選擇左右手 。然後連線 EventBeginPlay連線   方法 2>   GetPlayerController 繪製PlayDynamicForceFeedback  填寫振動等級和時間 和左右手 然後連線在EventBeginPlay 開始的時候讓振動 

5.按鍵繫結 接著在角色類中新增 Motion Controller(L)/(R)Trigger  左右扳機按鍵,或者在專案設定中的Input中繫結 。下圖就是thc vive和ue4按鍵

6.基本互動 在Engine Content 引擎目錄下找到StaticMesh 拷貝一份小球 到 在根目錄下建立StaticMesh資料夾 下。選中小球 右鍵單擊 選中CreateDestructibleMesh 建立可毀壞物體 開啟後隨便填寫引數  儲存 。 在根目錄下建立 Materials 資料夾 右鍵點選BluePrintClass 建立Actor  然後新增破碎物體 搜尋 De... 新增  新增一個球形的Collision放在坐手柄下,把小球調到手柄前方調整碰撞大小 ,如果要用這個小球檢測碰撞,選擇小球 最先的屬性OnComponentBeginOverlap  因為我沒做的是隻需要抓取小球的材質所以要型別轉換 在OtherActor下繪製Cast To(剛剛建立的小球的名字)    選擇As..(剛剛小球的名字 ) 繪製 新建 Material Object  ,然後新增 按鍵繫結 MotionController(L)Trigger 繪製IsValid (//表示該物件是否例項化)下面連結 MaterialObject  再次繪製MaterialObject  ——》AttachToComponent  連結在IsValid   Parent屬性上鍊接另一個小球。 ScaleRule (縮放) 改為KeepWord  儲存 現在就能實現物體(小球)的抓取 鬆開也是一樣 連結MaterialObject IsValid  MaterialObject 再次繪製 DetachFromConent  屬性全部改為 KeepWord  然後 在轉換的節點下 繪製 SetSimualatePhySics  然後 Simulate(選項為true) 就實現鬆開滑鼠 仍小小球  

7.材質替換  找到StaticMesh資料夾下的 進入藍圖 選擇De..() 右邊屬性下的OnComponent Hit  碰撞 事件(碰撞後讓他替換材質) 點選進入

在 OtherComp繪製  CastToStaticMeshComponent 然後再這個下面找到As StaticMeshComponent  下繪製  SetMaterial 。

然後 在As StaticMeshComponent 下再繪製GetMaterial ,然後ForEachLoop ReturnValue陣列,然後ArraIndex 連線  ElerentIndex 。

然後 吧小球的破壞 拖回來 繪製 GetMaterials 接著繪製Get (0) 連線SetMaterial 下的Material  。然後選中破碎物體 找到Collision  把 SimulationGenerates Hit Ecents 打上對勾(true)。 然後匯入初學者內容的包。找到需要的材質 新增在 可破壞的小球上 多複製幾個小球。繼承至第一個小球。   然後再SetMaterial後面繪製 Delay 設定為1 後面接著繪製 DestroyActor 。。。儲存

8.實現移動漫遊;  在有手下新增一個圓柱   新增一個發光材質  建立開啟點選鍵盤3+滑鼠左鍵 製作發光材質連線在自發光, 然後建立標記點 Blueprint Class  選擇Actor   在Scene下建立一個StaticMesh 。  建立一個圓錐體 。然後回到角色類新增 ChildActor右邊指定一下 剛才那個圓錐體,  然後開始繪製藍圖 ,找到右手手柄的Trigger  和鐳射  如果扳機摁下的時候顯示鐳射 否則隱藏掉 通過 SetVisibility   摁下的時候  讓NewVisibility為true PropagatetoChidren為fals    否則 全部為false  然後把 標記點的圓錐也新增上去 。。。然後新增兩個SphereCollision 一個是射線的開始一個是射線的結束  然後再 EventTick事件上繪製藍圖 LienTraceByChannel  然後 吧射線的開始和結束都放在start和end上

因為射線比較耗效能 所以新增一個bool開關 在摁下右手扳機的時候讓他為true否則為false 然後再繪製射線的時候 摁B加滑鼠左鍵get到那個開關。 然後把 Out Hit  Break 出來  然後再加一個開關摁B加滑鼠左鍵  連線Return Vaule   。然後連線目標的 設定目標點 連線ImpactPoint 

 。。。然後 找到鬆開扳機 吧Scene get下來設定目標點   在 ImpactPoint繪製一個變數設定值 然後get到右手鬆開後 Scene的位置 這時候 位置 會有偏差。 然後獲取HMD到角色的偏移  GetTrackedDevicePositionandOrientation  然後那最終想要的位置減去偏移量  連線New Location ,這時候發現移動的位置對了但是z軸不對 然後讓z軸增加一個單位  如圖所示 


其次還要看法線是否為1  然後先把Break HitResult下的 Normal Break開 然後看他的Z軸是否等於1 增加一個開關到 目標點位置的前面 連線開關條件  如果為false 不顯示任何東西   如果都正確在設定的位置點後增加一個 目標點讓他顯示出來 ,在開始的時候讓目標點隱藏 EventBeginPlay 下SetVisibility   讓他隱藏

9.專案的打包; 該設定的設定一下  然後設定一下打包的地圖 Project--Packaging 下面找到地圖的列表 Lis to fmaps to include in a packaged buld +你要打包的地圖。。  開啟藍圖 在EventBeginPlay下設定為Enable HMD  再次繪製Execute ConsoleCommand  設定 Command r.screenpercentage 200 設定螢幕解析度