This repository has been archived on 2026-08-07. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
zq/10.项目/11-墨犬/A.草稿/墨犬项目Mac平台编译问题记录.md
T

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