之前知道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++工程和索引這點讓人踏實多了。