using System; using System.Collections; using System.Collections.Generic; using UnityEngine; // 날짜 : 2021-01-18 PM 7:04:16 // 작성자 : Rito public sealed class SkinnedMeshAfterImage : AfterImageBase { /*********************************************************************** * Fields ***********************************************************************/ #region . private SkinnedMeshRenderer[] TargetSmrArray { get; set; } #endregion /*********************************************************************** * Methods ***********************************************************************/ #region . protected override void Init() { // 1. Target Meshes if (_containChildrenMeshes) { var all = GetComponentsInChildren(); var list = new List(); foreach (var smr in all) { if (smr.CompareTag("AfterImage")) list.Add(smr); } TargetSmrArray = list.ToArray(); } else { var smr = GetComponent(); if (smr != null && smr.CompareTag("AfterImage")) TargetSmrArray = new[] { smr }; else TargetSmrArray = Array.Empty(); } // 2. Queues FaderWaitQueue = new Queue(); FaderRunningQueue = new Queue(); // 3. Container _faderContainer = new GameObject($"{gameObject.name} AfterImage Container"); _faderContainer.transform.SetPositionAndRotation(default, default); _data.Mat = _afterImageMaterial; } protected override void SetupFader(out AfterImageFaderBase fader) { GameObject faderGo = new GameObject($"{gameObject.name} AfterImage"); faderGo.transform.SetParent(_faderContainer.transform); fader = faderGo.AddComponent(); fader.Setup(TargetSmrArray, _data, this); DSUtil.ChangeLayersRecursively(_faderContainer.transform, "Actor"); m_CompleteAction?.Invoke(_faderContainer); } Action m_CompleteAction; public void Set_Complete(Action _act) { m_CompleteAction = _act; } #endregion }