Враг стреляет слишком быстро. Что делать?

Форум для всего, что связано с ИИ.

Враг стреляет слишком быстро. Что делать?

Сообщение Frosmen 16 авг 2021, 21:33

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

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class EnemyGunForForum : MonoBehaviour
{
public GameObject player;
public GameObject fighter;
public Transform bullet;
public int BulletForce = 5000;
public AudioClip Fire;
public GameObject fireBoom;
public float Dist;
public float Radius = 50;
public int HPenemy = 100;
public float ShootTime = 0f;
public float WaitingSeconds;
public GameObject EnemyDead;
public GameObject head;
public GameObject body;
public GameObject leg1;
public GameObject leg2;
public GameObject hands;
public GameObject weapon;
NavMeshAgent nav;

void Start()
{
nav = GetComponent<NavMeshAgent>();
fireBoom.SetActive(false);
}

void OnTriggerEnter(Collider other)
{
if (other.tag == "Damage")
{
HPenemy = HPenemy - 20;
}
}
void Update()
{
ShootTime += Time.deltaTime;

Dist = Vector3.Distance(player.transform.position, transform.position);
if (Dist > Radius)
{
nav.enabled = false;
}
if (Dist < Radius && Dist > 35)
{
nav.enabled = true;
nav.SetDestination(player.transform.position);
nav.GetComponent<Animator>().SetTrigger("EnemyWalkDesertEagle");
}
if (Dist <= 35 && ShootTime >= WaitingSeconds)
{
nav.enabled = false;
EnemyDesertEagleShoot();
}
if (Dist > 35)
{
fighter.GetComponent<Animator>().ResetTrigger("EnemyShootDesertEagle");
fighter.GetComponent<Animator>().SetTrigger("EnemyWalkDesertEagle B");
}
if (Dist >= 50)
{
fighter.GetComponent<Animator>().SetTrigger("EnemyIdleDesertEagle");
fighter.GetComponent<Animator>().ResetTrigger("EnemyWalkDesertEagle B");
}
if (HPenemy < 1)
{
nav.enabled = false;
GetComponent<CapsuleCollider>().enabled = false;
EnemyDead.SetActive(true);
head.SetActive(false);
body.SetActive(false);
leg1.SetActive(false);
leg2.SetActive(false);
hands.SetActive(false);
weapon.SetActive(false);
}
}
public void EnemyDesertEagleShoot()
{
fighter.GetComponent<Animator>().SetTrigger("EnemyShootDesertEagle");
fireBoom.SetActive(true);
Transform BulletInstance = (Transform)Instantiate(bullet, GameObject.Find("EnemySpawnDesertEagle").transform.position, Quaternion.identity);
BulletInstance.GetComponent<Rigidbody>().AddForce(transform.forward * BulletForce);
GetComponent<AudioSource>().PlayOneShot(Fire);
}
}

Я надеюсь, проблема решится.
Frosmen
UNец
 
Сообщения: 20
Зарегистрирован: 16 авг 2021, 20:48

Re: Враг стреляет слишком быстро. Что делать?

Сообщение samana 16 авг 2021, 22:14

Возможно я не заметил, но где обнуление переменной ShootTime после выстрела?
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Враг стреляет слишком быстро. Что делать?

Сообщение Frosmen 17 авг 2021, 12:09

samana писал(а):Возможно я не заметил, но где обнуление переменной ShootTime после выстрела?


Спасибо, всё заработало. Я просто забыл добавить эту строку кода.
Frosmen
UNец
 
Сообщения: 20
Зарегистрирован: 16 авг 2021, 20:48


Вернуться в Искуственный Интеллект

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1