// Update is called once per frame void Update() { displacement.x = chara.transform.position.x - transform.position.x; displacement.z = chara.transform.position.z - transform.position.z; if ((displacement.magnitude < attackDistance) || isAttacking) { if (!isAttacking) { hitCheckTimer = 0.3f; isAttacking = true; animation.wrapMode = WrapMode.Once; animation.Play("Attack"); bms.disable(); } hitCheckTimer -= Time.deltaTime; if (hitCheckTimer <= 0f) { if (Physics.Raycast(transform.position, displacement, out colCast, attackDistance)) { if (colCast.transform.gameObject == chara) { charaStats.health -= stats.damage; hitCheckTimer = 99999f; } } } if (!animation.IsPlaying("Attack")) { isAttacking = false; } } else { bms.enable(); } if (stats.health <= 0) { Destroy(gameObject); } }
void Update() { if (!stats.initialized) { initStats(); } if (stats.health <= 0) { Destroy(gameObject); } //Compute vector to character. toChar = chara.transform.position - transform.position; if (state == 0) { if (toChar.magnitude < range) { bms.disable(); float spellRoll = Random.Range(0f, 1f); if (spellRoll < 0.2f) { state = 1; } else { state = 2; } } } else if (state == 1) { if (!isAttacking) { isAttacking = true; animation.wrapMode = WrapMode.Loop; animation.Play("Attack1"); timer = castTime; (Instantiate(Resources.Load("inferno")) as GameObject).transform.position = new Vector3(chara.transform.position.x, 0.1f, chara.transform.position.z); } else { timer -= Time.deltaTime; if (timer <= 0f) { isAttacking = false; state = 0; bms.enable(); } } } else if (state == 2) { if (!isAttacking) { (Instantiate(Resources.Load("FireBall")) as GameObject).transform.position = transform.position; isAttacking = true; bms.disable(); animation.wrapMode = WrapMode.Once; animation.Play("Attack2"); } else { if (!animation.IsPlaying("Attack2")) { isAttacking = false; state = 0; bms.enable(); } } } }