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); }