10/19/202011/09/2020
生成actor
載入非同步載入資源
尋找actor
遍歷actor
判斷型別
actor下的元件查詢
生成計時器
總結
//文字元件
createdefaultsubobject
(text
("countdownnumber"))
;//攝像機元件
fpscameracomponent = createdefaultsubobject
(text
("firstpersoncamera"))
;//球形碰撞元件
collisioncomponent = createdefaultsubobject
(text
("spherecomponent"))
;//....
uobject* instobject = newobject
(this
, blueobject-
>generatedclass)
;
//方式1
getworld()
->spawnactor
(acubereplicate::
staticclass()
,getactorlocation()
+ fvector::rightvector*
300.0f
, fquat::identity.
rotator()
);//方式2
getworld()
->spawnactor
(fireeffectclass,
getactortransform()
);
通常載入資源分為兩部分,一部分資源是否在記憶體中,如果不在需要先從磁碟載入(loadclass/loadobject),如果在記憶體中可以直接找到資源(findobject/findclass)
動態載入意味著不在建構函式中宣告靜態的
//方法1:
//在記憶體中找尋資源!!
ustaticmesh* blockmesh = findobject
(null
,text
("staticmesh'/game/startercontent/shapes/shape_cube.shape_cube'"))
;//載入資源,從硬碟載入到記憶體中if(
!blockmesh)
//特殊情況 對藍圖動態載入
//載入藍圖類 --- class
uclass* fireeffectclass = loadclass
(null
,text
("blueprint'/game/thirdpersoncpp/blueprints/unreplicatefire.unreplicatefire_c'"))
;//本藍圖已經由編譯器建立好了!
loadclass不能寫ublueprint,必須寫相對應的父類,比如aactor
//靜態載入 <--- 放在建構函式中
static constructorhelpers::fobjectfinder
spherevisualasset
(text
("/game/startercontent/shapes/shape_sphere.shape_sphere"))
;//載入藍圖不需要字尾加_c
static constructorhelpers::fclassfinder
unitselector
(text
("blueprint'/game/myproject/myblueprint.myblueprint'"))
; tsubclassof unitselectorclass = unitselector.class
fstreamablemanager* wealthloader =
new fstreamablemanager;
//非同步載入,新增紋理資源到texturepath並且完成後執行委託函式
//wealthhandle 儲存了資源資料
wealthhandle = wealthloader-
>
requestasyncload
(texturepath,
fstreamabledelegate::
createuobject
(this
,&awealthactor::streamablemanagerloadcomplete));
//獲取資源
tarray> outobjects;
wealthhandle-
>
getloadedassets
(outobjects)
;
#include
"kismet/gameplaystatics.h"
tarray>actarray;
ugameplaystatics::
getallactorsofclass
(getworld()
, arpcactor::
staticclass()
, actarray)
;//世界 + 類名 + 儲存容器
#include
"engineutils.h"
class
acollectables
;for
(tactoriteratorit(
getworld()
); it;
++it)
for
(int i =
0; i < actarray.
num();
++i)
aactor* otheractor;
class
acollectables;if
(otheractor-
>isa()
)
//dynamic cast an object type-safe
if(cast
(otheractor)
!=null
)
if
(gengine)
}
#include
"timermanager.h"
//declare_delegate(ftimerdelegate); 宣告委託 ftimerdelegate
ftimerhandle updatetimerhandle;
//定時器儲存位址
//定義乙個委託,即當前類中的updatetimer函式委託給timermanager呼叫
ftimerdelegate updatetimerdelegate = ftimerdelegate::
createuobject
(this
,&afireeffectactor::updatetimer)
;//設定乙個定時器,每一秒中呼叫ftimerdelegate函式
getworld()
->
gettimermanager()
.settimer
(updatetimerhandle, updatetimerdelegate,
1.0f
,true);
//委託函式
voidupdatetimer()
無非就是構造,增減查,轉換。 UE4 Python呼叫c 指令碼函式
1 新建乙個c 工程,建立乙個testpy指令碼,父類見下圖 件 pragma once include coreminimal.h include kismet blueprintfunctionlibrary.h include testpy.generated.h uclass class c...
UE4 C 的const類成員函式
我們知道,在c 中,若乙個變數宣告為const型別,則試圖修改該變數的值的操作都被視編譯錯誤。例如 const char blank blank n 錯誤 要宣告乙個const型別的類成員函式,只需要在成員函式引數列表後加上關鍵字const,例如 pragma once include includ...
ue4材質節點怎麼用 ue4材質常用節點
ue4的材質表面上看起來很簡單,可是到了用的時候卻總是沒有辦法實現好的效果。所以特意對文件進行閱讀,初步了解了一下主要知識點。當前使用的ue4版本 4.8.0。ue4中的材質有很多用途,可以用於光照 延遲渲染 粒子系統等等。由於暫時不會用到,目前只做了最基礎的材質使用的研究,也就是說是materia...