- Home /
Question by
komilll · Jun 24, 2016 at 05:00 AM ·
bugaicoroutinenot workingfixedupdate
FixedUpdate has stopped working
Hello. I've a problem with my script - it's enemy AI script. Enemy is chasing player and if he didn't reach him, he gets unusual bug. He is stucked in ShortShot() coroutine and FixedUpdate isn't working. If you have any idea what's the problem, I'll be glad to hear you.
Thanks in advance. =)
IEnumerator ShortShot() //If player is close then enemy is running toward him and shooting from a close distance
{
shortShotFailed = false;
curEnemyState = enemyState.shortShot;
anim.SetTrigger("ShortShot");
//If player is in distance to start short shot
StartCoroutine(CheckingShortShotTime());
if (distanceToPlayer < maxDistanceForShortShot && distanceToPlayer > distanceToStopShortShot)
{
Debug.Log("RUNNING!~~~~~~~~");
float speedToPass = speed;
speed *= 2.5f;
curEnemyState = enemyState.running;
yield return new WaitUntil(() => distanceToPlayer < distanceToStopShortShot || shortShotFailed);
speed = speedToPass;
curEnemyState = enemyState.shortShot;
Debug.Log("STOP RUNNING!");
Debug.Log(distanceToPlayer);
}
//TODO - short attack script
else yield return new WaitForSeconds(0.01f); //TODO - temporarily waiting to correctly reset triggers
yield return new WaitUntil(() => (Mathf.Abs(shortShotDistance) - Mathf.Abs(distanceToPlayer) > 0 || shortShotFailed));
if (shortShotFailed == false)
{
shortShotCol.gameObject.SetActive(true);
//Casting collider2D with trigger to check if enemy has been hit with short attack; If so then damage to player is being calculated
shortShotCol.size = new Vector2(shortShotDistance / gameObject.transform.lossyScale.x, shortShotCol.size.y);
shortShotCol.offset = new Vector2(shortShotCol.size.x / 2, shortShotCol.offset.y);
percentOfShortShotDamageToPass = Mathf.Abs(transform.position.x - playerPos.position.x) - Mathf.Abs(shortShotDistance);
percentOfShortShotDamageToPass = Mathf.Abs(percentOfShortShotDamageToPass); //Making sure that passed value isn't negative
//TODO - useless - only for testing
float shortRayLength = shortShotDistance - distanceToPlayer;
Debug.DrawRay(playerPos.position, Vector3.right * (playerOnRight == true ? 1 : -1) * shortRayLength, Color.red, 1f);
}
anim.ResetTrigger("ShortShot");
yield return new WaitForSeconds(0.01f);
anim.SetTrigger("ShortShotAfterRun");
yield return new WaitUntil(() => anim.GetCurrentAnimatorStateInfo(0).IsName("ArcherSkeleton_shortShot") && //Waiting until animation is finished
anim.GetCurrentAnimatorStateInfo(0).normalizedTime > 1 && !anim.IsInTransition(0));
shortShotCol.gameObject.SetActive(false); //Switching off shortShot collider
StartCoroutine(Idle());
yield return new WaitForSeconds(0.05f);
anim.ResetTrigger("ShortShotAfterRun");
}
Comment
Your answer
Follow this Question
Related Questions
CoRoutine help 2 Answers
UI Text not changing color [C#] 2 Answers
transform.position not working in OnControllerColliderHit 2 Answers