unity敌人自动寻路碰撞掉血
时间: 2023-07-11 12:35:23 浏览: 123
Unity自动寻路
以下是一个简单的实现敌人自动寻路、碰撞掉血的示例代码:
```csharp
using UnityEngine;
using UnityEngine.AI;
public class Enemy : MonoBehaviour
{
public int maxHealth = 100;
public int attackDamage = 10;
public float attackDelay = 1f;
private int currentHealth;
private float attackTimer = 0f;
private GameObject targetPlayer = null;
private NavMeshAgent agent;
private void Start()
{
currentHealth = maxHealth;
agent = GetComponent<NavMeshAgent>();
}
private void Update()
{
// 如果有玩家,则自动寻路到玩家
if (targetPlayer != null)
{
agent.SetDestination(targetPlayer.transform.position);
}
// 如果在攻击范围内,则攻击玩家
if (Vector3.Distance(transform.position, targetPlayer.transform.position) <= agent.stoppingDistance)
{
attackTimer += Time.deltaTime;
if (attackTimer >= attackDelay)
{
Attack(targetPlayer);
attackTimer = 0f;
}
}
}
private void OnTriggerEnter(Collider other)
{
// 如果碰到玩家,则设置为攻击目标
if (other.CompareTag("Player"))
{
targetPlayer = other.gameObject;
}
}
private void OnTriggerExit(Collider other)
{
// 如果离开玩家,则取消攻击目标
if (other.CompareTag("Player"))
{
targetPlayer = null;
}
}
private void Attack(GameObject player)
{
// 对玩家造成伤害
PlayerHealth playerHealth = player.GetComponent<PlayerHealth>();
playerHealth.TakeDamage(attackDamage);
}
public void TakeDamage(int damage)
{
// 扣除生命值
currentHealth -= damage;
if (currentHealth <= 0)
{
Die();
}
}
private void Die()
{
// 死亡处理
Destroy(gameObject);
}
}
```
该代码首先定义了敌人的最大生命值、攻击伤害和攻击延迟等属性。在 `Start` 函数中初始化生命值和寻路组件。在 `Update` 函数中,如果有玩家,则使用寻路组件自动寻路到玩家,如果在攻击范围内,则不断攻击玩家。
碰撞检测则通过 `OnTriggerEnter` 和 `OnTriggerExit` 函数实现。当敌人碰到标签为 "Player" 的碰撞体时,将玩家设为攻击目标;当敌人离开玩家时,则取消攻击目标。
攻击行为通过 `Attack` 函数实现,该函数获取玩家脚本并调用 `TakeDamage` 函数对其造成伤害。另外在 `TakeDamage` 函数中扣除生命值,并在生命值小于等于0时调用 `Die` 函数进行死亡处理。
阅读全文