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