Hỏi đáp
Chia sẻ kiến thức, cùng nhau phát triển
void Die()
{
Debug.Log("Enemy died!");
animator.SetBool("IsDead", true); // die animation
// Làm sao để mình thêm dòng lệnh tạm dừng khoảng vài giây rồi mới thực hiện lệnh tiếp theo vậy ạ? mà không ảnh hướng tới các bộ mã khác á do lúc trước em thử cái thread.sleep thì nó dừng toàn bộ nhân vật lun chứ ko có làm chậm thời gian thực thi lệnh được ạ.
Attack();
animator.SetBool("GoHell", true);
// Disable the enemy
Bạn đọc Coroutine thử nhé.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Enemy : MonoBehaviour
{
public Animator animator;
public int maxHealth = 100;
int currentHealth;
//
public Transform attackPoint;
public LayerMask playerLayers;
public float attackRange = 0.5f;
public int attackDamage = 40;
//
//
public float attackRate = 2f;// giới hạn số lần tấn công trong 1 giây;
float nextAttackTime = 0f;
//
void Start()
{
currentHealth = maxHealth;
}
public void TakeDamage(int damage)
{
currentHealth -= damage;
animator.SetTrigger("Hurt"); // play hurt animation
if(currentHealth <=0)
{
Die();
}
}
void Die()
{
Debug.Log("Enemy died!");
animator.SetBool("IsDead", true); // die animation
// khi IsDead chạy thành công ta lập tức tấn công
Attack();
animator.SetBool("GoHell", true);
// Disable the enemy
GetComponent<Collider2D>().enabled = false;
this.enabled = false;
}
// mã nỗ bom tự sát khi chết của vịt gây sát thương cho địch
void Attack()
{
// phát hiện kẻ thù trong vùng tấn công.
Collider2D[] hitplayers = Physics2D.OverlapCircleAll(attackPoint.position, attackRange, playerLayers);
// tiêu diệt kẻ thù
foreach (Collider2D player in hitplayers)
{
//Debug.Log("We hit" = enemy.name);
player.GetComponent<Player>().TakeDamage(attackDamage);
}
}
void OnDrawGizmosSelected()
{
if (attackPoint == null)
return;
Gizmos.DrawWireSphere(attackPoint.position, attackRange);
}
//
}