74 lines
2.4 KiB
C#
74 lines
2.4 KiB
C#
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<SkinnedMeshRenderer>();
|
|
var list = new List<SkinnedMeshRenderer>();
|
|
|
|
foreach (var smr in all)
|
|
{
|
|
if (smr.CompareTag("AfterImage"))
|
|
list.Add(smr);
|
|
}
|
|
|
|
TargetSmrArray = list.ToArray();
|
|
}
|
|
else
|
|
{
|
|
var smr = GetComponent<SkinnedMeshRenderer>();
|
|
if (smr != null && smr.CompareTag("AfterImage"))
|
|
TargetSmrArray = new[] { smr };
|
|
else
|
|
TargetSmrArray = Array.Empty<SkinnedMeshRenderer>();
|
|
}
|
|
|
|
// 2. Queues
|
|
FaderWaitQueue = new Queue<AfterImageFaderBase>();
|
|
FaderRunningQueue = new Queue<AfterImageFaderBase>();
|
|
|
|
// 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<SkinnedMeshAfterImageFader>();
|
|
fader.Setup(TargetSmrArray, _data, this);
|
|
|
|
DSUtil.ChangeLayersRecursively(_faderContainer.transform, "Actor");
|
|
m_CompleteAction?.Invoke(_faderContainer);
|
|
}
|
|
|
|
Action<GameObject> m_CompleteAction;
|
|
public void Set_Complete(Action<GameObject> _act) { m_CompleteAction = _act; }
|
|
#endregion
|
|
} |