접촉블럭이 시퀀스 지정되는 조건이 여러 개에서 string 리스트로 DataTable에서 정보를 받아와서 파싱해서 쓰기로 했다.
public void ConvertData()
{
var data = DataManager.Instance.blockDict[id].conditionalSequence;
foreach (var d in data)
{
string[] splits = d.Split(',').Select(s=> s.Trim()).ToArray();
if (!int.TryParse(splits[0], out int triggerId))
{
Debug.LogWarning($"triggerBlockId 변환 실패: {splits[0]}");
continue;
}
ConditionalSequence sequence = new ConditionalSequence()
{
triggerBlockId = triggerId,
successClip = ResourceManager.Instance.LoadAnimationClip(splits[1]),
failClip = ResourceManager.Instance.LoadAnimationClip(splits[2])
};
conditionalSequences.Add(sequence);
}
}
사망트리거인 블럭 중 조건에 맞는 id가 있다면 그 것이 포함된 클립으로 바꾸기
public override void SetGhost()
{
if (ghostManager == null) return;
AnimationClip selectedClip = null;
if(conditionalSequences != null)
{
var match = conditionalSequences.FirstOrDefault(seq => seq.triggerBlockId == matchedTriggerId);
if(match != null)
{
selectedClip = IsSuccess ? match.successClip : match.failClip;
}
}
if(selectedClip == null)
{
selectedClip = IsSuccess ? SuccessSequence : FailSequence;
}
ghostManager.ghostClip = selectedClip;
var animatorController = new AnimatorOverrideController(animator.runtimeAnimatorController);
foreach (var clip in animatorController.animationClips)
{
animatorController[clip.name] = ghostManager.ghostClip;
}
animator.runtimeAnimatorController = animatorController;
ghostManager.SetBeatList(ghostManager.beats, ghostManager.pointNoteList, ghostManager.bpm);
}