定義
#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...