Beispiel #1
0
 private void OnEnable()
 {
     // Read the settings from the ScriptableObject and initialize the
     // SeleriazedObject and SerializedProperty.
     _settings           = DefaultAnimationsSettings.Instance;
     _settingsSO         = new SerializedObject(_settings);
     _animatorController = _settingsSO.FindProperty("AnimatorController");
     _animationsMapping  = _settingsSO.FindProperty("AnimationsMapping");
     _animationsFolder   = _settingsSO.FindProperty("AnimationsFolder");
     _spritesheets       = _settingsSO.FindProperty("Spritesheets");
 }
    private static AnimationClip[] CreateAnimationClips(Sprite[] sprites, DefaultAnimationsSettings settings)
    {
        var mappings = settings.AnimationsMapping;
        var clips    = new AnimationClip[mappings.Length];

        for (int i = 0; i < mappings.Length; i++)
        {
            var map = mappings[i];
            clips[i] = CreateAnimationClip(map, settings, sprites.Where((sprite, index) => map.SpriteIndexes.Contains(index)).ToArray());
        }

        return(clips);
    }
    private static AnimationClip CreateAnimationClip(DefaultAnimationsSettings.AnimationMapping map, DefaultAnimationsSettings settings, params Sprite[] sprites)
    {
        var clip = AssetHelper.GetAsset <AnimationClip>($"{sprites.GetSpritesheetName()}-{map.Name}");

        clip.frameRate = map.ClipToOverride.frameRate;
        clip.wrapMode  = map.ClipToOverride.wrapMode;

        // In more complex animation clip, maybe will be needed to copy more settings.
        var clipToOverrideSettings = AnimationUtility.GetAnimationClipSettings(map.ClipToOverride);

        clip.EditSettings(s => s.loopTime = clipToOverrideSettings.loopTime);

        // Create the keyframes based on source animation, but with the new sprites.
        var keyFramesToOverride = map.ClipToOverride.GetKeyFrames();
        var keyFrames           = keyFramesToOverride.CreateWithSprites(sprites);

        clip.SetKeyFrames(keyFrames);

        clip.SaveAsset();

        return(clip);
    }
    private static (bool canCreate, int spritesNeed) Validate(DefaultAnimationsSettings settings, Sprite[] sprites)
    {
        var spritesNeed = settings.AnimationsMapping.SelectMany(x => x.SpriteIndexes).Distinct().Count();

        return(sprites.Length >= spritesNeed, spritesNeed);
    }