void Update() { switch (cStatus) { case Status.None: break; case Status.Idle: break; case Status.Attack: iTween.RotateUpdate(gameObject, iTween.Hash("rotation", new Vector3(0, 0, GetAngle(transform.position, TargetEnemy.GetTransform().position)), "speed", AttackSpeed * 300.0f)); anm.timeScale = AttackSpeed; anm.AnimationState.Event += HandleEvent; CheckDistance(transform.position, TargetEnemy.GetTransform().position, Range); break; case Status.Skill: break; case Status.Dead: anm.AnimationName = "death"; anm.loop = false; break; default: break; } }
// 콜백함수. 이벤트 발생시 호출됨 void HandleEvent(Spine.TrackEntry trackEntry, Spine.Event e) { // 정확히 타격 판정이 발생하는 부분 if (e.Data.Name == "hit" && !isAttacked) { print("event hitttttt"); Attack(); isAttacked = true; } // 공격 후 if (e.Data.Name == "end attack" && isAttacked) { print("end Attack"); // 적이 아직 사거리 내에 있는지 확인 if (TargetEnemy.isAlive()) { CheckDistance(transform.position, TargetEnemy.GetTransform().position, Range); } isAttacked = false; } }
void Update() { switch (cStatus) { case Status.None: break; case Status.Idle: break; case Status.Attack: iTween.RotateUpdate(gameObject, iTween.Hash("rotation", new Vector3(0, 0, GetAngle(transform.position, TargetEnemy.GetTransform().position)), "time", 0.5f)); anm.AnimationState.Event += HandleEvent; break; case Status.Skill: break; case Status.Dead: anm.AnimationName = "death"; anm.loop = false; break; default: break; } }