在進行遊戲構建時,我們通常會用到和時間相關的邏輯,在此稍微做下小結。
當前ue4版本為4.15。
基本上遊戲引擎都是以tick為中心運轉的,表現在玩家面前就是幀率了,ue4也是如此。
在藍圖中要使用tick的話只要從灰色的tick上拖出呼叫就可以了,但是在c++中使用的時候需要注意的是,在預設的情況下,tick是關閉的,必須自己開啟才行。
1
primaryactortick
.bcanevertick
=true
;
另外由於tick本身是在每幀上呼叫的,出於效率考慮,要盡量避免往上新增複雜的邏輯,例如尋找1000以內的素數之類的。
在c++中使用時,如果遇到tick函式在編輯模式下不會執行的情況,這時可以嘗試對以下函式進行過載: 1
virtual
bool
shouldtickifviewportsonly()
const
override;
然後直接返回true。
1
2
3
4
bool
amyactor
::shouldtickifviewportsonly()
const
原始的過濾可能發生在如下的定義: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void
aactor
::tickactor
(float
deltaseconds
,eleveltick
ticktype
,factortickfunction
&thistickfunction) } }
其中leveltick_viewportsonly是定義在enginetypes中的乙個列舉。
ue4內部對tick進行了分組管理,tickgroup之間按照先後順序進行呼叫,其在引擎內部的定義為:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
uenum
(blueprinttype
) enum
etickinggroup
;
在藍圖中有提供修改的介面,預設情況下的tickgroup是prephysics。
在c++中可以額外的新增tick函式,使得物件可以獲得額外的其他tickgroup的tick,但是在設計上意義並不是很大。
在同乙個tickgroup中的tick似乎是根據優先排程進行的,其順序近似隨機。在特殊的需求下,ue4還提供了前置tick actor的設定,它可以保證兩個actor之間的tick按照順序被呼叫。
全域性的時間調節也可以使用控制台指令開啟:
這個功能相對簡單,時間設定的細節需要到具體使用的時候調節為上。
Collision碰撞相關 UE4
原文 如何禁用角色的剛體碰撞檢測collision 禁用actor上所有component的碰撞 mycharacter setactorenablecollision false 設定以後,角色就可以忽視一切障礙物或者剛體來進行移動了,但是這樣會導致 addmovementinput 失效,set...
UE4 二維相關
scenecapture2d 類似相機元件 可將視口內的影象轉化為平面二維紋理資源渲染到 rendertarget rendertarget 可以被 material直接使用 例 做小地圖 scenecaptrue2d放置於人物頭頂用於獲取影象資源,scenecaptrue2d渲染到renderta...
UE4 間接光照快取
照亮環境 儘管lightmass可以生成靜態物件上的間接光照的光照貼圖,但像角色這樣的動態物件 也需要一種接收間接光照的方法。這個問題可以通過indirect lighting cache 間接光照快取 解決,它在構建光照時使用lightmass生成的樣本來計算動態物件在執行時的間接光照。eleme...