- Home /
Unity Mechanim playing default layer state animation when gameObject is duplicated in the scene
I have set up an enemy AI system in my game. When i only have one enemy the animations and code work as intended with no issues at all. However, if i duplicate the enemy, the original will still play the animations correctly and transition between them as intended but the duplicated game Object will only play the default layer state animation. Why is it the one plays the animations but the other doesn't?!
Here is the code that i have attached to the enemy object (It works with the duplicate object as well just doesnt play the animations. Does however play the animations with the original gameObject)
using UnityEngine;
using System.Collections;
public class chase : MonoBehaviour {
public Transform player;
public static Animator anim;
private Animation damage;
public bool isDamage;
public float health;
public float time;
void Start () {
anim = GetComponent<Animator>();
isDamage = false;
damage = GetComponent<Animation>();
health = 100;
time = 5;
}
// Update is called once per frame
void Update()
{
if(health < 0)
{
health = 0;
}
if (health == 0)
{
anim.SetBool("isIdle", false);
anim.SetBool("isWalking", false);
anim.SetBool("isAttacking", false);
anim.SetBool("isDamage", false);
anim.SetBool("isDead", true);
time -= 1 * Time.deltaTime;
}
if (time <= 0) {
Destroy (gameObject);
}
if (health > 0)
{
if (isDamage == true)
{
anim.SetBool("isIdle", false);
anim.SetBool("isWalking", false);
anim.SetBool("isAttacking", false);
anim.SetBool("isDamage", true);
anim.SetBool("isDead", false);
}
if (isDamage == false)
{
if (Vector3.Distance(player.position, this.transform.position) < 10)
{
Vector3 direction = player.position - this.transform.position;
direction.y = 0;
this.transform.rotation = Quaternion.Slerp(this.transform.rotation, Quaternion.LookRotation(direction), 0.1f);
anim.SetBool("isIdle", false);
if (direction.magnitude > 3)
{
this.transform.Translate(0, 0, 0.02f);
anim.SetBool("isWalking", true);
anim.SetBool("isAttacking", false);
anim.SetBool("isDamage", false);
anim.SetBool("isDead", false);
}
else
{
anim.SetBool("isAttacking", true);
anim.SetBool("isWalking", false);
}
}
else
{
anim.SetBool("isIdle", true);
anim.SetBool("isWalking", false);
anim.SetBool("isAttacking", false);
anim.SetBool("isDamage", false);
anim.SetBool("isDead", false);
}
}
}
}
void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "bullet")
{
isDamage = true;
anim.SetBool("isIdle", false);
anim.SetBool("isWalking", false);
anim.SetBool("isAttacking", false);
anim.SetBool("isDamage", true);
anim.SetBool("isDead", false);
health -= 10;
}
}
void OnTriggerExit(Collider other)
{
if (other.gameObject.tag == "bullet")
{
isDamage = false;
}
}
}
Your answer
Follow this Question
Related Questions
Animator is not playing an AnimatorController 1 Answer
root motion on in place animation 0 Answers
Dynamic way to adjust animated sprite length 0 Answers
Check Animator State Animation Completed 0 Answers