Почему моя башня перестает стрелять в AI-игроков? - PullRequest
0 голосов
/ 18 октября 2018

В настоящее время работаю над чем-то для моих промежуточных курсов, но я застрял в одной конкретной части. Персонаж ИИ должен следовать по пути, используя точки пути, а затем остановиться на вершине круга, чтобы выстрелить (разрушить) стену, чтобы добраться доконечная точка пути.ИИ-персонаж должен сделать это до того, как Башня, находящаяся рядом, стреляет и уничтожает ее.Персонаж AI имеет 3 очка здоровья и умирает, если выстрелил три раза.После каждого выстрела у Башенки происходит охлаждение, поэтому она дает персонажу ИИ время, чтобы сбить стену.

Часть, в которой я застрял, - это когда персонаж ИИ достигает точки пути, чтобы сбить стену (что я еще не реализовал). Турель стреляет один раз и больше не стреляет.Тем не менее, Raycast работает, потому что он смотрит на AI, пока он находится в диапазоне.

Вот моя башня. Сценарий:

using UnityEngine;
using System.Collections;

public class TurretScript : MonoBehaviour {
public float rangeToPlayer;
public GameObject bullet;
public GameObject spawn;
private GameObject player;
private bool firing = false;
private float fireTime;
private float coolDown = 0.5F;

void Start () {
    player = GameObject.FindWithTag("Player");
}

void Update () {
    if ( PlayerInRange() ) {
        transform.LookAt(player.transform.position);
        RaycastHit hit;
        if( Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out hit )) {
            Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * 20.0F, Color.red);
            if (hit.transform.gameObject.tag == "Player") {
                if ( firing == false )
                {       
                    firing = true;
                    fireTime = Time.time;
                    GameObject.Instantiate(bullet, spawn.transform.position, transform.rotation);
                }
            }
        }
    }
    if ( firing && fireTime + coolDown <= Time.time )
        firing = true;
}

bool PlayerInRange() {
    return ( Vector3.Distance(player.transform.position, transform.position) <= rangeToPlayer );
}
}

1 Ответ

0 голосов
/ 18 октября 2018

Вы должны установить переменную «стрельба» обратно в «ложь» после того, как время восстановления истекло.Также предположим, что вы не выполняете Raycast во время перезарядки, чтобы сэкономить процессор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...