Ejemplo n.º 1
0
    public bool PlayAnimationVoice(eAnimName anim)
    {
        if (AnimDatas.Length <= (int)anim || AnimDatas[(int)anim] == null)
        {
            //Debug.LogError("animation effect index error " + anim);
            return(false);
        }

        uint voiceSoundID;

        Resource.AniInfo aniData = AnimDatas[(int)anim];

        if (aniData.voice.Count >= 1)
        {
            int voiceSoundArrayIdx = Random.Range(0, aniData.voice.Count);
            voiceSoundID = uint.Parse(aniData.voice[voiceSoundArrayIdx].ToString());
        }
        else
        {
            voiceSoundID = uint.Parse(aniData.voice[0].ToString());
        }

        SoundManager.instance.PlayVoiceSound(voiceSoundID);

        return(true);
    }
Ejemplo n.º 2
0
    /// <summary>
    /// 주어진 시간 동안 velocity 방향으로 pushPower 만큼 민다.
    /// </summary>
    public override void Push(eAnimName animName, Vector3 _velocity, float pushPower, float duration, float stiffenTime, UnitState _next = UnitState.Idle)
    {
        float pushDur = duration;

        _stiffenTime = stiffenTime;

        // 애니메이션 유무에 따라 그냥 밀리는지 설정
        if (animName != eAnimName.Anim_none)
        {
            if (parent.PlayAnim(animName, false, 0, true))
            {
                float speed = 0.7f;
                if (animName == eAnimName.Anim_damage)
                {
                    AnimationState state = parent.Animator.Animation[parent.Animator.GetAnimName(animName)];
                    state.speed = speed;
                }

                // 밀리는 시간만 조절하도록 한다.
                //pushDur = (parent.Animator.GetAnimLength(animName) + ((1 - speed) * parent.Animator.GetAnimLength(animName)));
            }
            else
            {
                pushDur = 0.25f; // 애니메이션이 없거나 플레이 실패시 고정시간 밀리기.
            }
        }

        if (animName == eAnimName.Anim_damage)
        {
            //데미지 표시일경우
            Resource.AniInfo aniInfo = parent.GetAniData(eAnimName.Anim_damage);
            SoundManager.instance.PlaySfxUnitSound(aniInfo.seSkill, parent._audioSource, parent.cachedTransform);
        }
        else if (animName == eAnimName.Anim_down)
        {
            //데미지 표시일경우
            Resource.AniInfo aniInfo = parent.GetAniData(eAnimName.Anim_down);
            SoundManager.instance.PlaySfxUnitSound(aniInfo.seSkill, parent._audioSource, parent.cachedTransform);
        }

        //< 이동하는 방향을 자신의 뒤로 설정
        Vector3 newForward = -_velocity;

        newForward.y = 0;
        parent.cachedTransform.forward = newForward.normalized;

        //< 도착할 위치 지정
        pushPower = pushPower * (1 / pushDur);
        velocity  = _velocity.normalized * pushPower;

        //< 종료 시점 지정
        stateEndTime  = pushEndTime = Time.time + pushDur;
        stateEndTime += stiffenTime;

        nextState   = _next;
        startedPush = true;
    }
Ejemplo n.º 3
0
    public override void OnEnter(System.Action callback)
    {
        base.OnEnter(callback);

        parent.EffectClear();

        startedPush = false;

        if (parent.BuffCtlr.GetTypeBuffCheck(BuffType.Down) || parent.BuffCtlr.GetTypeBuffCheck(BuffType.Knockback))
        {
            NowSkillType = parent.BuffCtlr.GetTypeBuffCheck(BuffType.Down) ? BuffType.Down : BuffType.Knockback;

            if (NowSkillType == BuffType.Knockback)
            {
                //넉백이면 캐스터를 바라보도록 한다.
                Unit caster = parent.BuffCtlr.GetTypeBuffCasterCheck(BuffType.Knockback);

                //네트워크용 임시
                if (caster != null)
                {
                    parent.cachedTransform.LookAt(caster.cachedTransform);
                }
            }
            //< 넘어져있는 애니메이션을 실행한다.

            if (NowSkillType == BuffType.Knockback)
            {
                parent.PlayAnim(eAnimName.Anim_down, true, 0.1f, true);
            }
            else
            {
                parent.PlayAnimNoRootMation(eAnimName.Anim_down, true, 0.1f, true);
            }

            if (parent.Animator.GetAnimName(eAnimName.Anim_down) != "0" && parent.Animation[parent.Animator.GetAnimName(eAnimName.Anim_down)] != null)
            {
                parent.Animation[parent.Animator.GetAnimName(eAnimName.Anim_down)].speed = 1;
            }
        }
        else
        {
            NowSkillType = BuffType.Stun;

            //< 스턴 애니메이션을 실행한다.
            parent.PlayAnim(eAnimName.Anim_stun, true, 0.1f, true);

            Resource.AniInfo aniInfo = parent.GetAniData(eAnimName.Anim_stun);
            SoundManager.instance.PlaySfxUnitSound(aniInfo.seSkill, parent._audioSource, parent.cachedTransform);
        }

        if (parent.UnitType == UnitType.Unit && parent.IsLeader)
        {
            EventListner.instance.TriggerEvent("UseSkill_Start", parent);
        }
    }
Ejemplo n.º 4
0
    public override void OnEnter(System.Action callback)
    {
        base.OnEnter(callback);

        parent.CharInfo.Hp = 0;

        //G_GameInfo.GameMode == GAME_MODE.PVP || G_GameInfo.GameMode == GAME_MODE.SPARRING ||
        if ((parent.UnitType == UnitType.Boss || parent.UnitType == UnitType.Unit || parent.NotDeadPush))
        {
            parent.PlayAnim(eAnimName.Anim_die, true, 0.2f, true);
        }
        else
        {
            parent.PlayAnim(eAnimName.Anim_down, true, 0.2f, true);
        }

        Resource.AniInfo aniInfo = parent.GetAniData(eAnimName.Anim_die);
        SoundManager.instance.PlaySfxUnitSound(aniInfo.seSkill, parent._audioSource, parent.cachedTransform);
        SoundManager.instance.PlayUnitVoiceSound(parent.GetVoiceID(eAnimName.Anim_die), parent._audioSource, parent.cachedTransform);

        //< 죽었을때 컬리더박스는 꺼줌
        BoxCollider[] collider = this.gameObject.GetComponentsInChildren <BoxCollider>();
        for (int i = 0; i < collider.Length; i++)
        {
            collider[i].enabled = false;
        }

        if (GameDefine.skillPushTest)
        {
            CapsuleCollider[] colider2 = this.gameObject.GetComponentsInChildren <CapsuleCollider>();
            for (int i = 0; i < colider2.Length; i++)
            {
                colider2[i].enabled = false;
            }
        }

        if (parent.UsableNavAgent)
        {
            parent.GetComponent <NavMeshAgent>().enabled = false;
        }

        //< 사망시
        parent.SetMasteryEvent(3, parent);

        //< 이펙트 삭제
        parent.EffectClear();

        if (parent.ExtraModels != null)
        {
            for (int i = 0; i < parent.ExtraModels.Count; i++)
            {
                parent.ExtraModels[i].gameObject.SetActive(false);
            }
        }
    }
Ejemplo n.º 5
0
    public override bool PlayAnim(eAnimName animEvent, bool CrossFade = false, float CrossTime = 0.1F, bool canPlaySameAnim = false, bool queued = false)
    {
        bool doPlaying = base.PlayAnim(animEvent, CrossFade, CrossTime, canPlaySameAnim, queued);

        if (false == doPlaying)
        {
            return(doPlaying);
        }

        Resource.AniInfo aniInfo = ads[(int)animEvent];
        if (UsableNavAgent && rootMotion != null)
        {
            rootMotion.Play(Animator.CurrentAnimState, aniInfo.rootMotion);
        }

        return(true);
    }
Ejemplo n.º 6
0
    public override bool PlayAnim(eAnimName animEvent, bool CrossFade = false, float CrossTime = 0.1f, bool canPlaySameAnim = false, bool queued = false)
    {
        bool doPlaying = base.PlayAnim(animEvent, CrossFade, CrossTime, canPlaySameAnim, queued);

        if (false == doPlaying)
        {
            return(doPlaying);
        }

        //일단 임시!!!
        bool ignoreEnemy = false;

        if (CurrentState == UnitState.Skill)
        {
            ActionInfo actionIfno = SkillCtlr.SkillList[UseSkillSlot].GetSkillActionInfo();

            if (actionIfno != null)
            {
                if (actionIfno.skillpass == 0)
                {
                    ignoreEnemy = false;
                }
                else
                {
                    ignoreEnemy = true;
                }
            }
            else
            {
                ignoreEnemy = false;
            }
        }
        else
        {
            ignoreEnemy = false;
        }

        Resource.AniInfo aniInfo = CharInfo.animDatas[(int)animEvent];
        if (UsableNavAgent && rootMotion != null)
        {
            rootMotion.Play(Animator.CurrentAnimState, aniInfo.rootMotion, ignoreEnemy);
        }

        return(true);
    }
Ejemplo n.º 7
0
    private void Attack()
    {
        parent.UnitStop = true;

        if (parent.isLeader)
        {
            if (Time.time > ComboKeepTime)
            {
                parent.CurCombo = 0;
            }
        }

        if (!SceneManager.instance.IsRTNetwork || (SceneManager.instance.IsRTNetwork && (parent.m_rUUID == NetData.instance._userInfo._charUUID)))
        {
            if (parent.UnitType == UnitType.Unit)
            {
                parent.FindTarget();
                // ** 회전 조절 우선순위 **
                // 1. 조이스틱 회전값
                // 2. 타겟존재 여부
                if (parent.inputCtlr != null && Quaternion.identity != parent.inputCtlr.RotationFromInterJoyStick)
                {
                    parent.cachedTransform.rotation = parent.inputCtlr.RotationFromInterJoyStick;
                }
                else if (parent.GetTarget() != null)
                {
                    parent.LookAt(parent.GetTarget().cachedTransform.position);
                }
            }
        }

        if (SceneManager.instance.IsRTNetwork)
        {
            if (0 < parent.m_SvComboIdx)                   //중계 받아온 입장에서만...
            {
                parent.CurCombo     = parent.m_SvComboIdx; //평타 인덱스 동기화
                parent.m_SvComboIdx = -1;
            }
        }

        eAnimName aniName;

        if (parent is Pc && !parent.IsPartner)
        {
            aniName = (eAnimName)((int)eAnimName.Anim_attack1 + parent.CurCombo);
        }
        else
        {
            aniName = (eAnimName)((int)eAnimName.Anim_attack1);
        }

        atkAnimLength = Time.time + parent.Animator.GetAnimLength(aniName) - fadeTime;
        attackEndTime = 90;

        int a_OldCombo = parent.CurCombo;

        if (parent is Pc && !parent.IsPartner)
        {
            parent.UseSkillIdx = parent.GetNormalAttackComboSkillID(parent.CurCombo);
            parent.CurCombo++;
        }
        else
        {
            parent.UseSkillIdx = parent.GetNormalAttackComboSkillID(0);
        }

        if (SceneManager.instance.IsRTNetwork)
        {
            //if (parent.IsLeader == true || (parent.IsPartner == true && parent.TeamID == G_GameInfo.PlayerController.Leader.TeamID))
            if (parent.m_rUUID == NetData.instance._userInfo._charUUID)
            {
                uint a_Combo;
                a_Combo = parent.GetNormalAttackComboSkillID(a_OldCombo);

                if (a_Combo == uint.MaxValue)
                {
                    Debug.Log("NotFound NormalAttack ID");
                    return;
                }

                /*
                 * ////루트 가져오기
                 * a_RootMoPos = 0.0f;
                 * if (parent.UnitType == UnitType.Unit)
                 * {
                 *  _ResourceLowData.AniTableInfo aniInfo = parent.CharInfo.animDatas[(int)aniName];
                 *  if (parent is Pc && aniInfo.rootMotion == true)
                 *  {
                 *      Pc a_refPc = (Pc)parent;
                 *      string animName = a_refPc.Animator.GetAnimName(aniName);
                 *      Vector3 a_CacVec = a_refPc.rootMotion.CalcTotalMovingDistance(animName);
                 *      a_RootMoPos = a_CacVec.z * 0.7f;
                 *  }
                 * }
                 * else if(parent.UnitType == UnitType.Npc)
                 * {
                 *  _ResourceLowData.AniTableInfo aniInfo = parent.CharInfo.animDatas[(int)aniName];
                 *  if (parent is Npc && aniInfo.rootMotion == true)
                 *  {
                 *      Npc a_refNpc = (Npc)parent;
                 *      string animName = a_refNpc.Animator.GetAnimName(aniName);
                 *      Vector3 a_CacVec = a_refNpc.rootMotion.CalcTotalMovingDistance(animName);
                 *      a_RootMoPos = a_CacVec.z * 0.7f;
                 *  }
                 * }
                 *
                 * parent.g_CacDamPos = parent.transform.position + (parent.transform.forward * a_RootMoPos);  //이미 캐릭터간 간격은 충분히 멀다. 충돌박스로 인하여... 1.8 ~ 2.1 m
                 * //parent.g_CacDamRot = Quaternion.LookRotation(parent.transform.forward).eulerAngles;   <--타겟을 이미 바라보고 있기 때문에 이 부분은 않해도 될 것 같다.
                 *
                 * parent.g_AniEvent.ForGetList_SkillUse(1, UnitState.ManualAttack); //<-- 이렇게 해서 타겟의 리스트를 얻어온다.
                 * System.Collections.Generic.List<ulong> a_list = new System.Collections.Generic.List<ulong>();
                 * a_list.Clear();
                 *
                 * for (int a_ii = 0; a_ii < parent.g_targetList.Count; a_ii++)
                 * {
                 *  a_list.Add(parent.g_targetList[a_ii].m_rUUID);
                 * }
                 *
                 * if (a_list.Count <= 0)
                 *  a_list.Add(ulong.MaxValue);
                 */
                //iFunClient.instance.ReqSkillStart( parent.m_rUUID, a_Combo, parent.transform.position, parent.transform.eulerAngles.y);
                //NetworkClient.instance.SendPMsgBattleAttackPrepareC((int)parent.UseSkillIdx, 0, (int)UnitModelHelper.RotateTo8Way(parent.transform.eulerAngles.y));

                //일단 서버에 위치보정을 하자
                parent.MoveNetworkCalibrate(parent.cachedTransform.position);

                //pc의 경우 8방향이 아닌 360도를 쓰게 수정
                NetworkClient.instance.SendPMsgBattleAttackPrepareC((int)parent.UseSkillIdx, 0, (int)parent.cachedTransform.eulerAngles.y);
            }
            //else if (parent.IsPartner == true && parent.TeamID == G_GameInfo.PlayerController.Leader.TeamID)
            //{
            //    uint a_Combo = parent.GetNormalAttackComboSkillID(0);
            //    NetworkClient.instance.SendPMsgBattleAttackPrepareC((int)parent.UseSkillIdx, 0, 1);
            //}
        }

        //< 이펙트 실행
        string StartEffect  = "0";
        uint   StartSoundID = 0;

        Resource.AniInfo aniData = parent.GetAniData(aniName);

        if (aniData != null)
        {
            StartEffect  = aniData.effect;
            StartSoundID = aniData.seSkill;
        }

        if ("0" != StartEffect && null != parent.Animation[parent.Animator.GetAnimName(aniName)])
        {
            parent.SpawnSkillEffect(StartEffect, parent.Animation[parent.Animator.GetAnimName(aniName)].speed, parent.cachedTransform, aniData.childEffect == 0 ? null : parent.cachedTransform, (skillCastingEff) =>
                                    //parent.SpawnSkillEffect(StartEffect, parent.Animation[parent.Animator.GetAnimName(aniName)].speed, parent.transform, parent.transform, (skillCastingEff) =>
            {
                //SoundManager.instance.PlaySfxSound(StartSoundID, parent.cachedTransform);
                SoundManager.instance.PlaySfxUnitSound(StartSoundID, parent._audioSource, parent.cachedTransform);
                SoundManager.instance.PlayUnitVoiceSound(parent.GetVoiceID(aniName), parent._audioSource, parent.cachedTransform);
                //< 애니메이션 실행
                //parent.PlayAnim(aniName, true, fadeTime, true);
                parent.PlayAnim(aniName, true);
                attackEndTime = atkAnimLength + parent.CharInfo.AtkDelay;

                ActionInfo actionData = parent.SkillCtlr.__SkillGroupInfo.GetAction(parent.UseSkillIdx);

                if (actionData != null)
                {
                    if (actionData.effectCallNotiIdx != 0)
                    {
                        Collider[] existCol = skillCastingEff.GetComponentsInChildren <Collider>(true);
                        for (int j = 0; j < existCol.Length; j++)
                        {
                            //EffectCallAbility = true;

                            //< 있을경우는 삭제
                            ForwardTriggerEvent OrgtriggerEvt = existCol[j].gameObject.GetComponent <ForwardTriggerEvent>();
                            if (OrgtriggerEvt != null)
                            {
                                UIMgr.Destroy(OrgtriggerEvt);
                            }

                            existCol[j].isTrigger          = false;
                            existCol[j].isTrigger          = true;
                            ForwardTriggerEvent triggerEvt = existCol[j].gameObject.AddComponent <ForwardTriggerEvent>();
                            triggerEvt.TriggerEnter_Unit   = FireToTarget;

                            uint skillIdx = parent.SkillCtlr.GetSkillIndex((int)parent.UseSkillSlot);

                            //황비홍 프로젝트 - 프로젝트에 맞게 수정
                            triggerEvt.Setup(parent, parent.SkillCtlr.__SkillGroupInfo.GetAbility(skillIdx, 1));
                        }
                    }
                }
            });
        }
        else
        {
            //SoundManager.instance.PlaySfxSound(StartSoundID, parent.cachedTransform);
            SoundManager.instance.PlaySfxUnitSound(StartSoundID, parent._audioSource, parent.cachedTransform);

            //< 시전이펙트가 없을시 바로 애니메이션 실행
            parent.PlayAnim(aniName, true, fadeTime, true);
            attackEndTime = atkAnimLength + parent.CharInfo.AtkDelay;
        }

        parent.PreEndAttackAnim = false;
        parent.ActiveAttack     = true;
    }
Ejemplo n.º 8
0
    static void ProcessAniRead(List <AnimationClip> aniclips)
    {
        string a_strBuf = "";

        a_strBuf = "idx_ui,casttime_f,hittime_f,mergetime_f,watingtime_f\n";

        List <SkillData> skillDatas = new List <SkillData>();

        //일단 유저꺼만 - 코스튬
        Resource.AniInfo aniInfo = null;

        //var enumerator = itemLowData.CostumeInfoDic.GetEnumerator();
        var enumerator = skillLowData.SkillSetInfoDic.GetEnumerator();

        while (enumerator.MoveNext())
        {
            //해당 리소스 데이터를 가져옴
            Resource.UnitInfo data = null;
            if (resourceLowData.UnitInfoDic.TryGetValue(enumerator.Current.Value.AniId, out data))
            {
                //평타1

                SkillData newData = new SkillData();
                newData.skillID = System.Convert.ToUInt32(enumerator.Current.Value.skill0[0]);
                newData.aniID   = data.AniAttack01;

                if (resourceLowData.AniInfoDic.TryGetValue(newData.aniID, out aniInfo))
                {
                    newData.aniName = aniInfo.aniName;
                }

                skillDatas.Add(newData);

                newData         = new SkillData();
                newData.skillID = System.Convert.ToUInt32(enumerator.Current.Value.skill0[1]);
                newData.aniID   = data.AniAttack02;

                if (resourceLowData.AniInfoDic.TryGetValue(newData.aniID, out aniInfo))
                {
                    newData.aniName = aniInfo.aniName;
                }

                skillDatas.Add(newData);

                newData         = new SkillData();
                newData.skillID = System.Convert.ToUInt32(enumerator.Current.Value.skill0[2]);
                newData.aniID   = data.AniAttack03;

                if (resourceLowData.AniInfoDic.TryGetValue(newData.aniID, out aniInfo))
                {
                    newData.aniName = aniInfo.aniName;
                }

                skillDatas.Add(newData);

                newData         = new SkillData();
                newData.skillID = enumerator.Current.Value.skill1;
                newData.aniID   = data.AniSkill01;

                if (resourceLowData.AniInfoDic.TryGetValue(newData.aniID, out aniInfo))
                {
                    newData.aniName = aniInfo.aniName;
                }

                skillDatas.Add(newData);

                newData         = new SkillData();
                newData.skillID = enumerator.Current.Value.skill2;
                newData.aniID   = data.AniSkill02;

                if (resourceLowData.AniInfoDic.TryGetValue(newData.aniID, out aniInfo))
                {
                    newData.aniName = aniInfo.aniName;
                }

                skillDatas.Add(newData);

                newData         = new SkillData();
                newData.skillID = enumerator.Current.Value.skill3;
                newData.aniID   = data.AniSkill03;

                if (resourceLowData.AniInfoDic.TryGetValue(newData.aniID, out aniInfo))
                {
                    newData.aniName = aniInfo.aniName;
                }

                skillDatas.Add(newData);

                newData         = new SkillData();
                newData.skillID = enumerator.Current.Value.skill4;
                newData.aniID   = data.AniSkill04;

                if (resourceLowData.AniInfoDic.TryGetValue(newData.aniID, out aniInfo))
                {
                    newData.aniName = aniInfo.aniName;
                }

                skillDatas.Add(newData);
            }
        }

        //몬스터스킬
        var enumerator2 = monsterLowData.MobInfoDic.GetEnumerator();

        while (enumerator2.MoveNext())
        {
            //해당 리소스 데이터를 가져옴
            Resource.UnitInfo data = null;
            if (resourceLowData.UnitInfoDic.TryGetValue(enumerator2.Current.Value.AniId, out data))
            {
                //평타1

                if (System.Convert.ToUInt32(enumerator2.Current.Value.skill[0]) != 0)
                {
                    SkillData newData = new SkillData();
                    newData.skillID = System.Convert.ToUInt32(enumerator2.Current.Value.skill[0]);
                    newData.aniID   = data.AniAttack01;

                    if (resourceLowData.AniInfoDic.TryGetValue(newData.aniID, out aniInfo))
                    {
                        newData.aniName = aniInfo.aniName;
                    }

                    skillDatas.Add(newData);
                }

                if (System.Convert.ToUInt32(enumerator2.Current.Value.skill[1]) != 0)
                {
                    SkillData newData = new SkillData();
                    newData.skillID = System.Convert.ToUInt32(enumerator2.Current.Value.skill[1]);
                    newData.aniID   = data.AniAttack02;

                    if (resourceLowData.AniInfoDic.TryGetValue(newData.aniID, out aniInfo))
                    {
                        newData.aniName = aniInfo.aniName;
                    }

                    skillDatas.Add(newData);
                }

                if (System.Convert.ToUInt32(enumerator2.Current.Value.skill[2]) != 0)
                {
                    SkillData newData = new SkillData();
                    newData.skillID = System.Convert.ToUInt32(enumerator2.Current.Value.skill[2]);
                    newData.aniID   = data.AniAttack03;

                    if (resourceLowData.AniInfoDic.TryGetValue(newData.aniID, out aniInfo))
                    {
                        newData.aniName = aniInfo.aniName;
                    }

                    skillDatas.Add(newData);
                }

                if (System.Convert.ToUInt32(enumerator2.Current.Value.skill[3]) != 0)
                {
                    SkillData newData = new SkillData();
                    newData.skillID = System.Convert.ToUInt32(enumerator2.Current.Value.skill[3]);
                    newData.aniID   = data.AniAttack03;

                    if (resourceLowData.AniInfoDic.TryGetValue(newData.aniID, out aniInfo))
                    {
                        newData.aniName = aniInfo.aniName;
                    }

                    skillDatas.Add(newData);
                }
            }
        }

        for (int i = 0; i < skillDatas.Count; i++)
        {
            for (int j = 0; j < aniclips.Count; j++)
            {
                if (skillDatas[i].aniName.Equals(aniclips[j].name) && !skillDatas[i].aniName.Equals(""))
                {
                    //동일할경우
                    AnimationEvent[] aniEvents = AnimationUtility.GetAnimationEvents(aniclips[j]);

                    //int count = 0;
                    //uint iValue = (uint)skillDatas[i].skillID;

                    //노티만 체크하던 버전
                    //foreach (AnimationEvent aniEvent in aniEvents)
                    //{
                    //    if(aniEvent.functionName.Equals("SkillUse") )
                    //    {
                    //        ++count;
                    //        a_strBuf = a_strBuf + iValue.ToString() + "," + count.ToString() + "," + aniEvent.time.ToString() + "\n";
                    //    }
                    //}

                    float castTime       = 0;
                    float mergeTime      = 0;
                    float lastAttackTime = 0;
                    uint  iValue         = (uint)skillDatas[i].skillID;

                    a_strBuf = a_strBuf + iValue.ToString() + ",";

                    foreach (AnimationEvent aniEvent in aniEvents)
                    {
                        if (aniEvent.functionName.Equals("PrepareEnd"))
                        {
                            castTime = aniEvent.time;
                        }
                        else if (aniEvent.functionName.Equals("MergeTime"))
                        {
                            mergeTime = aniEvent.time;
                        }
                        else if (aniEvent.functionName.Equals("SkillUse"))
                        {
                            lastAttackTime = aniEvent.time;
                        }
                    }

                    a_strBuf = a_strBuf + castTime.ToString() + "," + lastAttackTime.ToString() + "," + mergeTime.ToString() + "," + aniclips[i].length.ToString() + "\n";
                }
            }
        }

        string a_temfname = Application.dataPath;

        a_temfname = a_temfname.Replace('\\', '/');
        string a_RootPath = a_temfname.Remove(a_temfname.LastIndexOf("/") + 1); //프로젝트가 있는 경로...

        if (!System.IO.Directory.Exists(a_RootPath + "/ExportAniEvent"))
        {
            System.IO.Directory.CreateDirectory(a_RootPath + "/ExportAniEvent");
        }

        string a_PathName = a_RootPath + "/ExportAniEvent/aniEvent.csv";

        System.IO.File.WriteAllText(a_PathName, a_strBuf);

        skillDatas.Clear();
    }