Сделайте так, чтобы враги могли атаковать 2 разных объекта - PullRequest
0 голосов
/ 02 апреля 2019

Я создаю игру на выживание в волне, в которой вы можете создать оборону, и я хочу сделать так, чтобы враги атаковали объекты, которые вы положили, чтобы сломать их и напасть на вас. Я хочу знать, есть ли способ найти, если враг не движется с определенной скоростью, поэтому он застрял за стеной, пытаясь добраться до игрока. И используйте это, чтобы заставить их атаковать ближайшую стену, если они застряли.

using UnityEngine;
using System.Collections;

namespace CompleteProject
{
    public class EnemyMovement : MonoBehaviour
    {
        // Reference to the player's position.
        Transform player;               
        Transform wall;

        // Reference to the player's health.
        PlayerHealth playerHealth;  

        // Reference to this enemy's health.    
        EnemyHealth enemyHealth;  

        // Reference to the nav mesh agent.      
        UnityEngine.AI.NavMeshAgent nav;               

        void Awake ()
        {
            // Set up the references.
            player = GameObject.FindGameObjectWithTag ("Player").transform;
            playerHealth = player.GetComponent <PlayerHealth> ();
            enemyHealth = GetComponent <EnemyHealth> ();
            nav = GetComponent <UnityEngine.AI.NavMeshAgent> ();
            wall = GameObject.FindGameObjectWithTag("Wall").transform;
        }

        void Update ()
        {
            // If the enemy and the player have health left...
            if(enemyHealth.currentHealth > 0 && playerHealth.currentHealth > 0)
            {
                // ... set the destination of the nav mesh agent to the player.
                nav.SetDestination(player.position);
            }
            // Otherwise...
            else
            {
                // ... disable the nav mesh agent.
                nav.SetDestination(player.position);
            }
        }
    }
}

Я добавил скрипт здоровья на стены игрока и твердого тела

1 Ответ

0 голосов
/ 02 апреля 2019

Предполагая, что у ваших врагов есть твердые тела, вы можете использовать величину компонента скорости твердого тела, чтобы определить его скорость.С этим вы можете сделать что-то вроде ...

Rigidbody2D rbody;

void Start()
{
    rbody = GetComponent<Rigidybody2D>();
}

void Update()
{
    if (rbody.velocity.magnitude < 1f)
    {
        // change target to wall or do some logic here
    }
    else
    {
       // target is player, 
    }
}
...