之前知道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(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++工程和索引这点让人踏实多了。