UE4之Delegate 動態單播

2021-09-28 01:08:58 字數 3019 閱讀 9215

定義

#define func_concat( ... ) __va_args__
定義乙個動態單播,uht會根據body_macro_combine生成乙個file_id_line_delegate巨集,這個函式留到後面說。

先看func_declare_dynamic_delegate 巨集定義

#define func_declare_dynamic_delegate( tweakptr, dynamicdelegatename, execfunction, funcparamlist, funcparampassthru, ... ) \

class dynamicdelegatename : public tbasedynamicdelegate\

\ \

/** construction from an fscriptdelegate must be explicit. this is really only used by uobject system internals. */ \

explicit

dynamicdelegatename

(const tscriptdelegate<

>

& inscriptdelegate ) \

: tbasedynamicdelegate

( inscriptdelegate ) \

\\ /** execute the delegate. if the function pointer is not valid, an error will occur. */ \

inline

void

execute

( funcparamlist )

const \

\/** execute the delegate, but only if the function pointer is still valid */ \

inline

bool

executeifbound

( funcparamlist )

const \

\return

false

; \ } \

};

template

<

typename tweakptr,

typename retvaltype,

typename..

. paramtypes>

class

tbasedynamicdelegate

:public tscriptdelegate

;template

<

class

userclass

>

void

__internal_binddynamic

( userclass* inuserobject,

typename tmethodptrresolver< userclass >

::fmethodptr inmethodptr, fname infunctionname )};

#define binddynamic( userobject, funcname ) __internal_binddynamic( userobject, funcname, static_function_fname( text( #funcname ) ) )

tbasedynamicdelegate繼承自tscriptdelegate, tscriptdelegate裡定義了繫結物件和函式名, 還有最重要的processdelegate函式

template

<

typename tweakptr = fweakobjectptr>

class

tscriptdelegate

void

unbind()

template

<

class

uobjecttemplate

>

void

processdelegate

(void

* parameters )

const

protected

: tweakptr object;

fname functionname;

friend

class

fcalldelegatehelper;}

;

對於processdelegate,通過在繫結到委託的物件上呼叫命名函式來執行委託. 在呼叫此函式之前,應始終先通過呼叫isbound() 來驗證委託是否可以安全執行.

通常,永遠不要直接呼叫此函式.而是在派生類上呼叫execute().

#define hello_source_hello_public_myobject_h_9_delegate \

#define func_concat( ... ) __va_args__

func_concat(*

this

)

因此, 我們將this指標解引用然後傳過去.

// typedef script delegates for convenienceconvenience.

typedef tscriptdelegate<

> fscriptdelegate;

這是返回值為void的動態單播型別,類似的還有乙個帶返回值的動態單播func_declare_dynamic_delegate_retval,唯一區別就是這個巨集指定了返回值retvaltype.

ue4 動態載入資源

動態載入非藍圖資源 如 聲音等使用loadobject 資源型別 nullptr,text 資源路徑引用 載入藍圖資源 獲得藍圖類 loadclass 藍圖的型別 nullptr,text 資源路徑引用 c 這裡需要注意就是資源的路徑需要額外加上 c 例如uclass result1 loadcla...

ue4玻璃材質 UE4 材質

本文中,我們將首先討論基於物理的渲染,什麼是材質域,什麼是材質,什麼是材質例項,什麼是主材質,我們將討論材質的一些建議和禁忌。最後,我們將了解一些材質概念,你可以將其用於各類專案中的材質。pbr 表示基於物理的渲染,基於物理的渲染意味著我們根據現實模擬光線,而不是根據主觀想法模擬光線。光線的最終效果...

UE4之單播委託

參考 實現乙個簡單的demo,主要通過拉近拉遠來實現燈光的控制。實現邏輯如下 定義乙個委託 這裡我定義的是乙個有引數的委託 declare delegate oneparam mydelegate,bool uclass class tarraytest api atarraytestgamemod...