ue4集合类型_UE4项目问题集合
debugeditor模式下,在LoadPackage過程中crash,vs報出Stack overflow的錯誤
這是由于Package層數(shù)過多,vs棧不夠用導(dǎo)致的。而ue4用UBT導(dǎo)致不能直接修改項目的棧大小。之前項目后期就因為這個崩潰導(dǎo)致大家沒法再用debug模式進(jìn)行開發(fā)。直接的解決辦法是修改UEBuildWindows.cs中的LinkEnvironment.DefaultStackSize,這里默認(rèn)賦值為Target.WindowsPlatform.DefaultStackSize,代碼跟了一下我這邊環(huán)境該值是5MB,我這里直接將其乘以3,項目啟動成功。https://answers.unrealengine.com/questions/750298/how-to-increase-stack-size-for-unreal-engine.html?answers.unrealengine.com
角色行走過程中膠囊體與別的物體發(fā)生碰撞時,Hit信息中并沒有附帶物理材質(zhì)的信息
這是因為默認(rèn)情況下膠囊體的bReturnMaterialOnMove為false,改為true就有了。
這個碰撞信息是在移動組件中先創(chuàng)建FCollisionResponseParams變量,然后進(jìn)行碰撞查詢時產(chǎn)生的,詳情見UPrimitiveComponent::InitSweepCollisionParams,斷點調(diào)試流程。
Error MSB3073 The command "chcp 65001 >NUL
降低vs版本到vs2019 Version 16.5.0https://www.reddit.com/r/unrealengine/comments/gphjjj/unable_to_compile_c_project_425/?www.reddit.com由于使用incredibuild導(dǎo)致的編譯錯誤
在類似這個路徑下:C:\Users\username\AppData\Roaming\Unreal Engine\UnrealBuildTool找到BuildConfiguration.xml文件打開,
加上這段:
false
參考:http://yekdniwunrealengine.blogspot.com/2017/11/incredibuild.html?yekdniwunrealengine.blogspot.com
ue4中new對象的操作是先allocateobject然后調(diào)用c++標(biāo)注的placement new:
char* buf = new char[sizeof(A) * 3];//申請了3個A的內(nèi)存
A* pc = new(buf)A();
引擎中關(guān)于接口與模板的一個用法:
struct TStructOpsTypeTraitsBase2{
enum
{
WithZeroConstructor = false,
WithNoInitConstructor = false,
};
};
template
struct TStructOpsTypeTraits : public TStructOpsTypeTraitsBase2
{
};
struct FVector
{
public:
};
template<>
struct TStructOpsTypeTraits : public TStructOpsTypeTraitsBase2{
enum
{
WithNoInitConstructor = true,
};
};
TMap循環(huán)中刪除迭代器
for (TMap::TIterator it(Map); it; ++it)
{
if()
{
it.RemoveCurrent();
}
}
ClassWithin的理解?
/** The required type for the outer of instances of this class */
該類實例的Outer必須是什么類型
什么是Native函數(shù)
Native函數(shù)指的是在C++有函數(shù)體實現(xiàn)的函數(shù),而藍(lán)圖中的函數(shù)和BlueprintImplementableEvent的函數(shù)就不是Native函數(shù)。
UObject可編輯
UCLASS(DefaultToInstanced, editinlinenew)
UPROPERTY(EditInstanceOnly, Instanced)
TArray EachEffect;
編輯器bool屬性作為編輯條件顯示在其他屬性中而不單獨占一行
UPROPERTY(EditAnywhere, Category="Behavior", meta=(InlineEditConditionToggle))
uint8 bOverride_Cursor : 1;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category="Behavior", AdvancedDisplay, meta=( editcondition="bOverride_Cursor" ))
TEnumAsByte<:type> Cursor;
編輯器根據(jù)某枚舉變量更改其他變量是否可編輯
bool FPaladinAbilityEachEffectConfig::CanEditChange(const UProperty* InProperty) const
切換controller的時候 輸入持續(xù)回掉的bug解決辦法:
UPlayerInput::FlushPressedKeys
智能指針的cast 這個cast并不會因為轉(zhuǎn)換失敗而為空 正確使用方式如:
if (InWidget->GetType() == FName(TEXT("SButton")))
{
TSharedRef CurButton = StaticCastSharedRef(InWidget);
}
參考SharedPointerTesting.h了解更多
編譯引擎的時候GetReferenceNearesttargetframeworktask
安裝VS2017的時候 選中"NuGet package manager"
藍(lán)圖節(jié)點使用Latent/async action
要重寫getworld 注意GetOuter()->GetWorld();有可能Outer本身未重寫GetWorld 就會導(dǎo)致沒用
模板代理的例子 用在PlayerInputComponent->BindAction
class AMyCharacter : public ACharacter
{
void Foo(int32 idx);
DECLARE_DELEGATE_OneParam(FFooDelegate, int32);
};
void AMyCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInput)
{
PlayerInput->BindAction("Foo", IE_Pressed, this, &AMyCharacter::Foo, 42);
}
多個UObject實例作為key的map
按照以多個UObject實例作為key的map,當(dāng)這多個UObject實例的值都相同時滿足查找,例子:FGCNotifyActorKey中用到FObjectKey
模板Lerp
FMath::Lerp
UE4源碼關(guān)于組合鍵的解決方案函數(shù)
UPlayerInput::GetChordsForKeyMapping
ue4輸入響應(yīng)先后順序
PlayerController->LevelBP(包括子關(guān)卡)->Pawn
SWidget的cast
可以使用GetType()先得到類型,再調(diào)用static_cast<>靜態(tài)轉(zhuǎn)換
ue4 userwidget中對子widget查找:
每個userwidget中有UWidgetTree,這個類構(gòu)建樹形結(jié)構(gòu),同時負(fù)責(zé)相關(guān)查找
ue4 userwidget導(dǎo)航藍(lán)圖編輯:
UWidget成員變量:class UWidgetNavigation* Navigation;
注意這個類的UPROPERTY以及這個類本身的定義部分,由各個方向的FWidgetNavigationData構(gòu)成
由于操作錯誤 PaperSprite導(dǎo)入時在文件名加索引產(chǎn)生新的文件的問題
詳細(xì)見源碼FPaperJsonSpriteSheetImporter::PerformImport
if (bIsReimporting)
{
TargetSprite = FindExistingSprite(Frame.FrameName.ToString());
}
if (TargetSprite == nullptr)
{
AssetToolsModule.Get().CreateUniqueAssetName(TentativePackagePath, DefaultSuffix, /*out*/ PackageName, /*out*/ AssetName);
OuterForFrame = CreatePackage(nullptr, *PackageName);
}
可知,當(dāng)TargetSprite為空時,就會產(chǎn)生一個新的Package。而這個新的Package就是Unique的。
設(shè)計模式之訪問者模式在UE4中的使用
UE4序列化
判斷在游戲中
FApp::IsGame()
游戲暫停后 攝像機移動時的模糊
ACameraManager::ApplyCameraModifiers時默認(rèn)的PostProcessSettings帶有MotionBlurAmount不為0
可以自定義一個CameraManager寫一個成員變量PausePostProcessSetting 將其配置為0 然后在這個重載函數(shù)中:
if (UGameplayStatics::IsGamePaused(this))
{
InOutPOV.PostProcessSettings = PausePostProcessSetting;
}
如何讓基類使用派生類指定的類型創(chuàng)建成員變量
APaladinCharacterBase::APaladinCharacterBase(const FObjectInitializer& Initializer)
:Super(Initializer.SetDefaultSubobjectClass(ACharacter::CharacterMovementComponentName))
編輯器中調(diào)用類型選擇接口
可以參考User Defined Structure Editor,GenerateHeaderRowContent函數(shù)中調(diào)用SNew(SPinTypeSelector..)
遍歷UScriptStruct中的property
參考FItemPropertyNode::InitChildNodes 屬性編輯器中結(jié)構(gòu)體成員變量的默認(rèn)變量
for( TFieldIterator It(StructProperty->Struct); It; ++It )
PaperSprite不顯示圖片
如圖這樣一個資源 分辨率為1076*10 導(dǎo)入引擎后作為papersprite就不顯示,原因參考源碼:
理解這段源碼,意思是如果圖片寬高比超過100,就會判定為是一條“線”,就不會繼續(xù)后續(xù)操作繼而不顯示。
FText可多行編輯
c++代碼中:
總結(jié)
以上是生活随笔為你收集整理的ue4集合类型_UE4项目问题集合的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql基准性能测试标准_mysql性
- 下一篇: fir滤波器matlab实现_关于FIR