Unit unintentionally moving on attack call
Found something very strange while working on my RTS game and I'm not sure what else I can try here. Definitely need someone with some more experience to help me out here if possible.
The problem is that when attacking my ranged unit jumps forward a bit during his attack as you can see here. Melee units do not seem to do this despite using the same script, although there does appear to be some glitchy behavior the melee unit does not move.
This is the script I worked up for attacking other units which is first called via the Update() function. It's worth mentioning that this occurs with or without the animations which (I think) rules out any root motion issues.
private void Update()
{
if (target != null)
{
MoveToDestination(target.transform);
}
if (attackAvailable)
{
attackAvailable = false;
StartCoroutine("Attack");
}
}
Once the Attack Coroutine is called in this way, it first locates the nearest enemy and then will do damage to it via the enemies own TakeDamage() method
private IEnumerator Attack()
{
GameObject nearestEnemy = null;
float nearestDistance = unit.unitAttackRange;
Collider[] hitColliders = Physics.OverlapSphere(transform.position, unit.unitAttackRange,enemyLayer);
if (hitColliders!=null)
{
foreach (var hitCollider in hitColliders)
{
if ((Vector3.Distance(hitCollider.gameObject.transform.position, gameObject.transform.position) < nearestDistance))
{
nearestEnemy = hitCollider.gameObject;
nearestDistance = Vector3.Distance(hitCollider.gameObject.transform.position, gameObject.transform.position);
}
}
if (nearestEnemy != null)
{
transform.LookAt(nearestEnemy.transform);
anim.Play("Attack");
nearestEnemy.GetComponent<SoldierStats>().TakeDamage(unit.unitDamage, unit.unitType);
yield return new WaitForSeconds(unit.unitAttackSpeed);
if (isRangedUnit)
GetComponent<FireProjectile>().LooseProjectile();
}
else
{
//Debug.Log("error, no enemy found for " + gameObject.name);
}
}
attackAvailable = true;
yield return null;
}
I'm at a total loss for what's going on here. How can I identify what is causing this to happen? Any ideas would be greatly appreciated and thanks for reading this far!
Your answer
Follow this Question
Related Questions
Face direction of a Vector 3 1 Answer
How do I make my player jump? 1 Answer
Networked movement using navmesh agent 0 Answers
Imported 3D Model doesn't react to Rigidbody Movement Script 0 Answers
achieveing half-life like surfing 0 Answers