5.8 KiB
5.8 KiB
变量初始化顺序需要与定义顺序一致。
//修改前
FAnimNode_CustomLookAt::FAnimNode_CustomLookAt()
: LookAtLocation(FVector(100.f, 0.f, 0.f))
, LookAt_Axis(DefaultLookAtAxis)
, IsFirstLookAtNode(true)
, IsAddLookAtRotator(true)
, LookAtUpClamp(90.f)
, LookAtDownClamp(90.f)
, LookAtHClamp(90.f)
, LookAtWeight(1)
#if WITH_EDITORONLY_DATA
, LookAtAxis_DEPRECATED(EAxisOption::Y)
, CustomLookAtAxis_DEPRECATED(FVector(0.f, 1.f, 0.f))
, LookUpAxis_DEPRECATED(EAxisOption::X)
, CustomLookUpAxis_DEPRECATED(FVector(1.f, 0.f, 0.f))
#endif
, CurrentLookAtLocation(ForceInitToZero)
, CachedCurrentTargetLocation(ForceInitToZero)
,LookAtFollowFrameSpeed(1.f)
,CachedDeltaRotation(FRotator(.0f,.0f,.0f))
,FollowParentLimitHAngle(0.f)
,FollowParentLimitVAngle(0.f)
//修改后
FAnimNode_CustomLookAt::FAnimNode_CustomLookAt()
: LookAtLocation(FVector(100.f, 0.f, 0.f))
, LookAt_Axis(DefaultLookAtAxis)
, IsFirstLookAtNode(true)
, IsAddLookAtRotator(true)
, LookAtUpClamp(90.f)
, LookAtDownClamp(90.f)
, LookAtWeight(1)
, LookAtHClamp(90.f)
#if WITH_EDITORONLY_DATA
, LookAtAxis_DEPRECATED(EAxisOption::Y)
, CustomLookAtAxis_DEPRECATED(FVector(0.f, 1.f, 0.f))
, LookUpAxis_DEPRECATED(EAxisOption::X)
, CustomLookUpAxis_DEPRECATED(FVector(1.f, 0.f, 0.f))
#endif
, CurrentLookAtLocation(ForceInitToZero)
, CachedCurrentTargetLocation(ForceInitToZero)
,CachedDeltaRotation(FRotator(.0f,.0f,.0f))
,LookAtFollowFrameSpeed(1.f)
,FollowParentLimitHAngle(0.f)
,FollowParentLimitVAngle(0.f)
宽字符集用TEXT()而不是用L
//修改前
FString SliceType = L"不切分";
//修改后
FString SliceType = TEXT("不切分");
部分旧版接口在Mac已经弃用
class CRIWARERUNTIME_API FManaTextureResource : public FTextureResource, public FRenderTarget
/* FRenderResource 仮想関数をオーバーライド */virtual void InitRHI(FRHICommandListBase& RHICmdList) override;
virtual void ReleaseRHI() override;
class FAppleManaTextureSampler : public FManaTextureResource
{
public:
FAppleManaTextureSampler(FCriWareManaApple& InManaApple, const UManaTexture* InOwner);
virtual void InitDynamicRHI() override;
virtual void ReleaseDynamicRHI() override;
C++数组不能直接比较
//修改前
#define UNUSED(arg) { if ((arg) == (arg)) {} }
//修改后
#define UNUSED(arg) { if (sizeof(arg) == sizeof(arg)) {} }
注释内的注释
/**/ 里面如果还想用/注释时,/会导致提前结束注释。因此改成了#1#替代。但是Mac上不允许。用//替代内部的/*
TCHAR_TO_UTF8
TCHAR_TO_UTF8 是一个虚幻引擎宏,用于将TCHAR转换为UTF-8字符,这个宏会创建一个临时对象来进行转换,临时对象在完整表达式结束的时候就会被销毁。代码将这个临时对象的内部指针地址复制给AwbPath。这样当这个临时对象被销毁之后,AwbPath就变成了悬空指针,指向已经无效的内存。 改法:用FTCHARToUTF8定义变量然后赋值出去,不再用宏。
//修改前
const CriChar8 * AwbPath = TCHAR_TO_UTF8(*AwbName);
/* クック時はAWBファイルをバインドしない */if(GIsCookerLoadingPackage) {
AwbPath = NULL;
}
// ACBファイルのロード */if (Params.ResourceData) {
// uasset内にACBデータが保持されている場合はメモリからロード
Handle = criAtomExAcb_LoadAcbData(
reinterpret_cast<void*>(Params.ResourceData), static_cast<CriSint32>(Params.ResourceDataSize), Params.Binder, AwbPath, nullptr, 0);
} else {
// uasset内にACBデータが保持されていない場合はファイルからロード(旧バージョンのデータが該当)
Handle = criAtomExAcb_LoadAcbFile(nullptr, TCHAR_TO_UTF8(*AcbName), Params.Binder, AwbPath, nullptr, 0);
}
//修改后
FTCHARToUTF8 AwbNameUtf8(*AwbName);
const CriChar8 * AwbPath = AwbNameUtf8.Get();
/* クック時はAWBファイルをバインドしない */if(GIsCookerLoadingPackage) {
AwbPath = NULL;
}
// ACBファイルのロード */if (Params.ResourceData) {
// uasset内にACBデータが保持されている場合はメモリからロード
Handle = criAtomExAcb_LoadAcbData(
reinterpret_cast<void*>(Params.ResourceData), static_cast<CriSint32>(Params.ResourceDataSize), Params.Binder, AwbPath, nullptr, 0);
} else {
// uasset内にACBデータが保持されていない場合はファイルからロード(旧バージョンのデータが該当)
Handle = criAtomExAcb_LoadAcbFile(nullptr, AwbNameUtf8.Get(), Params.Binder, AwbPath, nullptr, 0);
}
typeid RTTI(运行时类型信息)被虚幻禁用
虚幻引擎有自己的UObject体系。不需要用typeid
//修改前
template <typename T>
bool FEditorAnomalyOptionBase::CanCast()
{
FString ClassName = GetMatchName();
FString MatchName = typeid(T).name();
return ClassName.Equals(MatchName);
}
//修改后
template <typename T>
bool FEditorAnomalyOptionBase::CanCast()
{
FString ClassName = GetMatchName();
// 如果 T是UObject派生类
if constexpr (TIsDerivedFrom<T,UObject>::Value)
{ FString MatchName = T::StaticClass()->GetName();
return ClassName.Equals(MatchName);
} else
{
return false;
}}
默认构造时子对象初始化问题
枚举中用另外一个枚举赋值
使用const w_char_t*
使用宏::##
子类同名重写函数与父类参数不同
##__VA_ARGS__的作用是去掉前面的逗号,前面没有逗号时不能用,会报错。
#define NetAssert(cond, ...) do { \
if (!(cond)) { \
LogMqNetError(#cond, ##__VA_ARGS__); \
} \
} while (0)
std:result_of 在C++20 中被移除
改成invoke_result