在使用FGUI按钮事件切换动画资源文件时出现一帧的骨骼设置状态问题,可能是因为在切换SkeletonDataAsset时,SkeletonAnimation组件的状态没有及时更新。根据提供的代码,您可以尝试在切换SkeletonDataAsset后立即调用Initialize(true)方法来重新初始化SkeletonAnimation组件,这样可以确保所有引用和状态都被正确更新。
在ReloadSkeletonAsset方法中,您已经调用了Initialize(true),这应该是正确的做法。然而,您可能需要确保在调用Initialize(true)之前,所有相关的状态和引用都被清除,例如使用ClearState()方法清除当前的动画状态。
如果问题仍然存在,您可以尝试在Initialize(true)之后立即设置动画,以确保动画状态在初始化后立即被应用。
public void ReloadSkeletonAsset(int id)
{
    SkeletonDataAsset skeleton;
    string animation;
    if(id == 1)
    {
        skeleton = Sword;
        animation = "n-b0029-防守-姿势循环";
    }
    else
    {
        skeleton = Wand;
        animation = "h-b0029-防守-姿势循环";
    }
    if (skeleton != null)
    {
        var skeletonAnimation = body.GetComponent<SkeletonAnimation>();
        skeletonAnimation.ClearState();
        skeletonAnimation.skeletonDataAsset = skeleton;
        skeletonAnimation.Initialize(true);
        skeletonAnimation.Skeleton.SetSkin("No1");
        PlayAnimation(animation);
    }
}
确保在Initialize(true)之后立即调用PlayAnimation方法,以便在初始化后立即应用动画。