250512 TIL

박소희·2025년 5월 12일

Unity_7기

목록 보기
86/94

접촉블럭이 시퀀스 지정되는 조건이 여러 개에서 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);
    }

0개의 댓글