UE4基礎:一次猝不及防的崩潰事件的自救過程(5月29日 更正)

之前知道UE4"愛翻臉"說崩潰就崩潰,連招呼都不打,不過這是本次入坑的第一崩,所以寫一下自救過程。

現場還原

自己隨便做的一個學習用的Demo,想用C++自定義一個GameInstance,結果UE4生成C++文件的時候就崩了。打開這個項目就顯示下面這個窗口。

在這裏插入圖片描述
看到錯誤提示窗口報了一條代碼文件的信息:

UE4Editor_GameCpp!AMyActor::AMyActor() [D:\Unreal Projects\GameCpp\Source\GameCpp\MyActor.cpp:15]

自救辦法

到Source文件夾裏用記事本打開看一下

// Fill out your copyright notice in the Description page of Project Settings.


#include "MyActor.h"


// Sets default values
AMyActor::AMyActor()
{
 	// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = false;
	this->RootComponent = StaticMesh;
	StaticMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMesh"));
	
	GetGameInstance();
}
/*
// Called when the game starts or when spawned
void AMyActor::BeginPlay()
{
	Super::BeginPlay();
	GEngine->AddOnScreenDebugMessage(1,1.0,FColor::Green,"Hello, I am an Actor!");
	//SetRootComponent()
}

// Called every frame
void AMyActor::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

}

void AMyActor::EndPlay(const EEndPlayReason::Type EndPlayReason)
{
	Super::EndPlay(EndPlayReason);
}
*/

第15行就寫了一個

GetGameInstance();

當時想看看能不能獲取到,忘了刪除。GetGameInstance();放在這裏爲啥不行還有待考證,我心說就算崩潰也是運行時崩潰啊,怎麼編譯的時候就崩了。

暫時先把15行註釋掉。

然後把沒用的文件都刪了(Saved其實也可以刪了)

在這裏插入圖片描述

雙擊.uproject文件重新建立模塊索引

在這裏插入圖片描述

在這裏插入圖片描述

然後提示了是否用之前自動保存的文件,還原崩潰時未保存的文件(如果把Saved文件夾刪掉就沒有這步了),我直接選的略過還原

在這裏插入圖片描述
項目又打開了,非常開心
在這裏插入圖片描述
目前還沒有 sln文件,需要刷新一下Rider Project,如果你用VS的話那就是 VS Project了
在這裏插入圖片描述

然後就可以用 Rider打開C++項目了。

在這裏插入圖片描述崩潰前創建的DemoGameInstance也可以在GameInstance 的設置中看到了。

小結

  • 創建新的 C++文件前,先把之前該編譯的都編譯完畢。
  • 通過UE4可以重建C++工程和索引這點讓人踏實多了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章