UE4製作一個藍圖的多功能鼠標宏(一)——單擊、雙擊和取消點擊

用了這麼多年操作系統後發現,我們早就被科技巨頭馴化,單擊雙擊早就已經變成肌肉記憶了。
這就叫設計規範——也叫「人類調教說明書」。從這個角度看,某些科技巨頭爲「確認鍵」應該在左在右打得不可開交完全可以理解。我們也沒必要逆潮流去開發新的操作方式,去和科技巨頭去爭奪人類主宰權。
當然,如果你的應用已經擁有了一套操作方式,用戶也養成了使用習慣,並體驗良好。那麼也沒有必要去改成所謂的標準。(讀者讀至此處,應已自然而然地意識到博主在暗示紅警2和紅警3,並露出贊同的微笑)

那麼假設你的用戶用慣了windows,鄙視你現在蹩腳的操作體驗,甩你一臉需求,要你與國際接軌。你很可能就需要這麼一個東西了。。。
一直想把常用的功能做成模塊化,即插即用,不至於每個工程都要重新做。那麼從鼠標操作入手最好不過了,順便在這裏記錄一下心得,日後也當個筆記。


UE4製作一個藍圖的多功能鼠標宏(一)單擊、雙擊、取消點擊

先從熟練操作鼠標的肌肉記憶裏回憶一下,邪惡的科技巨頭是如何把我們調教成熟練使用鼠標的乖寶寶的。
既然做最基礎的東西,那我馬上從蚯狀肌附近找到了一些關於「單擊雙擊」有關的操作體驗的記憶,那就是「取消點擊」,這個被無視卻又最常用的操作。

於是今天先做基礎功能「單擊雙擊」,和一個優化體驗的功能,「取消點擊」


  • 單擊雙擊是基礎中的基礎,自然不用多解釋
  • 「取消點擊」是一種點擊過程中的「後悔藥」,具體操作如下圖所示。這次我想要手動實現這個功能,誰能拒絕後悔藥呢?

這裏寫圖片描述
點擊保存時,突然想起今天心血來潮把項目改的爛七八糟,這保存已經按下去了,一撒手可能會死
此時你按住按鈕不鬆手,拖出範圍再釋放,達到了取消點擊行爲的目的
你因爲後怕而出了一身冷汗,如果沒有這個後悔藥機制,明天就可能去天橋賣手抓餅了

邏輯基本如下

姑且用核彈發射舉個例子,要做一個點擊按鈕發射核彈的發射系統

順序 邏輯 信息反饋 說明
1 移動鼠標到可交互的元素上(例如一個按鈕狀的模型) 可選擇 鼠標指針改變成手指圖標、或者按鈕上顯示出「Don’t Touch Anything」等,用於示意此按鈕爲可點擊的元素
2 按下並保持按下狀態 按下 此時按鈕以是按下的視覺狀態,但仍未觸發事件
3 判斷 - 系統開始緊張起來了,用戶此時會突然拖動鼠標 反悔嗎?
4 原地擡起/拖動擡起 復原爲默認狀態或已被使用狀態 執行發射/取消發射


單擊是擡起鼠標才「確認」執行後續功能



反悔機制,例如用戶A想發射核彈,按下按鈕時,用餘光發現核彈目標定在了自己家,現在突然反悔,此時可以在不擡起鼠標的情況下,拖動鼠標移出按鈕再鬆手。這樣可以取消觸發點擊操作


注意
雙擊是單擊兩次,必含一個單擊。也就是理論上不能單雙擊功能共存
例如:單擊按鈕的功能是發射核彈,雙擊按鈕的功能是彈出修改核彈目標的窗口
此時用戶A如果想修改核彈目標,就會在雙擊的第一擊按完、第二擊未按之前,讓自己的戶口地址從地球上抹去
做相關業務的同行務必慎重


嗯,我一如既往的信任蚯狀肌,並以此爲邏輯開始

做UE4藍圖吧

要說明UMG的小部件可以用自帶的 onDoubleClick ,操作UMG按鈕之類的部件可以直接使用。此處藍圖適用於UMG部件以外的用處。


第一部分 單擊、雙擊

創建宏

1

新建一個 藍圖宏庫 。這裏做成獨立的宏,就可以在任何藍圖使用它,而不會與自身發生衝突。
這裏要注意!宏庫只能保存不能編譯。若修改了宏的內容,需要去編譯使用了這個宏的藍圖


2

用帥氣的指法將宏庫命名爲 Macro_Click


3

點擊加號新建一個宏,命名爲 Click (右邊上角紅框處)
藍圖內容如圖
擴展一下,宏中是沒有全局變量的,而下面的 Local布爾型 (Local Boolean) 就是宏的局部變量,相當於 get 變量 第一次看到的朋友不要慌張。而上面的 分配(Assign) 自然就是 Set 變量
具體節點功能在這裏就不細說了,官方文檔都可以查得到


在關卡藍圖中使用宏

1

內容如圖,在關卡藍圖直接輸入Click就可以找到我們自己做的宏了
至此,單擊雙擊的最最基礎的功能就已經實現了


第二部分 取消點擊

在宏中添加新功能

這裏寫圖片描述

如圖所示,很基礎,沒什麼複雜的東西,改了輸入值和輸出值的名字等,還調皮的把實例材質改成紅色
取消點擊部分:
通過獲取按下和擡起時的屏幕位置,計算出這個過程中鼠標位移了多少距離。這裏用 Get mouse Position on Platform 是因爲我覺得顯示器的大小會比窗口的大小準確,也適合更復雜的情況。然後對比 「取消點擊的距離」 值,判斷用戶是否已經做出了 「取消單擊」 的操作
將距離連到輸入值 「取消點擊的距離」 ,使其可以在外部進行修改。
「取消點擊的距離」 的默認值此時設置爲10,「雙擊間隔」 爲0.25


這裏寫圖片描述

增加了判斷,使其若「取消點擊」,就不執行「單擊」和「雙擊」


這裏寫圖片描述

最後保存宏,把修改好的宏連上打印,編譯,測試ok


結束

今天就做到這裏,實現了基礎的單擊雙擊和取消點擊。今後有時間還會繼續完善擴展這個Click宏的功能~~

話說回來蚯狀肌到底是哪塊?