проблема с AI

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

проблема с AI

Сообщение NeProUser 30 июн 2018, 22:34

у меня есть скрипт ии :



using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class MEDIAVEL_AI : MonoBehaviour {
public GameObject Point;//Объект внимания АI
private Transform target;//точка куда двиется АI
NavMeshAgent agent;
public float seeDistance = 5f;//поле зрения AI
public float attackDistance =2f;//зона атаки AI
public GameObject Enem;//модель AI
public bool command;
public bool AS;//фракция и принодлежность к ней
public bool RU;//фракция и принодлежность к ней
public bool EU;//фракция и принодлежность к ней
public bool NO;//фракция и принодлежность к ней
public bool DR;//фракция и принодлежность к ней
public bool batle;//идёт ли бой
public Transform un1;//юнит 1 степени
public Transform un2;//юнит 2 степени
public Transform un3;//юнит 3 степени
public Transform un4;//юнит 4 степени
public Transform un5;//юнит 5 степени
public Transform unBOSS;//юнит степени босс
public GameObject attachka;//триггер на оружии AI
public GameObject spwn1;//точка появления юнитов 1 степени
public GameObject spwn2;//точка появления юнитов 2 степени
public GameObject spwn3;//точка появления юнитов 3 степени
public GameObject spwn4;//точка появления юнитов 4 степени
public GameObject spwn5;//точка появления юнитов 5 степени
public GameObject spwnBOSS;//точка появления юнитов степени босс
public int UnitsAll;//Всего юнитов в запасе у AI
public int Units1st;//всего юнитов 1 степени
public int Units2st;//всего юнитов 2 степени
public int Units3st;//всего юнитов 3 степени
public int Units4st;//всего юнитов 4 степени
public int Units5st;//всего юнитов 5 степени
public int BOSS;//всего юнитов степени босс
public int UnitsAllba;//Всего юнитов в запасе у AI во время боя
public int Units1stba;//всего юнитов 1 степени во время боя
public int Units2stba;//всего юнитов 2 степени во время боя
public int Units3stba;//всего юнитов 3 степени во время боя
public int Units4stba;//всего юнитов 4 степени во время боя
public int Units5stba;//всего юнитов 5 степени во время боя
public int BOSSba;//всего юнитов степени босс во время боя
public int Units1stb;//всего юнитов 1 степени в НАЧАЛЕ боя
public int Units2stb;//всего юнитов 2 степени в НАЧАЛЕ боя
public int Units3stb;//всего юнитов 3 степени в НАЧАЛЕ боя
public int Units4stb;//всего юнитов 4 степени в НАЧАЛЕ боя
public int Units5stb;//всего юнитов 5 степени в НАЧАЛЕ боя
public int BOSSb;//всего юнитов степени босс в НАЧАЛЕ боя
public int HP;// здоровье AI
// Use this for initialization
void Start () {
Point = GameObject.FindGameObjectWithTag ("Player");
agent = GetComponent<NavMeshAgent> ();
if(EU == true){
Units1st = 10;
}
if(RU == true){
Units1st = 15;
}
if(AS == true){
Units1st = 30;
}
if(NO == true){
Units1st = 18;
}
if(DR == true){
Units1st = 24;
}
}

// Update is called once per frame
void Update () {
if (HP > 0) {
if (batle == false) {
Units1stb = Units1st;
Units2stb = Units2st;
Units3stb = Units3st;
Units4stb = Units4st;
Units5stb = Units5st;
BOSSb = BOSS;
Units1stba = Units1st;
Units2stba = Units2st;
Units3stba = Units3st;
Units4stba = Units4st;
Units5stba = Units5st;
BOSSba = BOSS;
}
UnitsAll = Units1st + Units2st + Units3st + Units4st + Units5st + BOSS;
UnitsAllba = Units1stba + Units2stba + Units3stba + Units4stba + Units5stba + BOSSba;
if (UnitsAll <= (Units1st + Units2st + Units3st + Units4st + Units5st + BOSS) / 10) {
command = false;
Units1st = 0;
Units2st = 0;
Units3st = 0;
Units4st = 0;
Units5st = 0;
BOSS = 0;
Units1stb = 0;
Units2stb = 0;
Units3stb = 0;
Units4stb = 0;
Units5stb = 0;
BOSSb = 0;
}

if (UnitsAllba <= 0) {
command = false;
Units1st = 0;
Units2st = 0;
Units3st = 0;
Units4st = 0;
Units5st = 0;
BOSS = 0;
Units1stb = 0;
Units2stb = 0;
Units3stb = 0;
Units4stb = 0;
Units5stb = 0;
BOSSb = 0;
}

if (Vector3.Distance (transform.position, Point.transform.position) < seeDistance) {
if (command == true) {
if (Units1stb >= 0) {
Transform BulletInstance = (Transform)Instantiate (un1, spwn1.transform.position, Quaternion.identity);
Units1stb -= 1;
}

if (Units2stb >= 0) {
Transform BulletInstance = (Transform)Instantiate (un2, spwn2.transform.position, Quaternion.identity);
Units2stb -= 1;
}
if (Units3stb >= 0) {
Transform BulletInstance = (Transform)Instantiate (un3, spwn3.transform.position, Quaternion.identity);
Units3stb -= 1;
}
if (Units4stb >= 0) {
Transform BulletInstance = (Transform)Instantiate (un4, spwn4.transform.position, Quaternion.identity);
Units4stb -= 1;
}
if (Units5stb >= 0) {
Transform BulletInstance = (Transform)Instantiate (un5, spwn5.transform.position, Quaternion.identity);
Units5stb -= 1;
}
if (BOSSb >= 0) {
Transform BulletInstance = (Transform)Instantiate (unBOSS, spwnBOSS.transform.position, Quaternion.identity);
BOSSb -= 1;
}
}
if (Vector3.Distance (transform.position, Point.transform.position) > attackDistance) {
transform.LookAt (Point.transform);
target = Point.transform;
agent.SetDestination (target.transform.position);
Enem.GetComponent <Animator> ().SetTrigger ("MOVE");
} else {
Enem.GetComponent <Animator> ().SetTrigger ("ATTAKA");


}
} else {
Enem.GetComponent <Animator> ().SetTrigger ("IDLE");
target = gameObject.transform;
}
} else {
gameObject.GetComponent <MEDIAVEL_AI> ().enabled =false;
gameObject.GetComponent <NavMeshAgent> ().enabled=false;
Enem.GetComponent<Animator> ().SetTrigger ("DEATH");
attachka.SetActive (false);
Destroy (gameObject, 10);
}
}
}


и он должен при каждом создании нового ии (выделено цветом) вычитать из Units1stb один , но это происходит только один раз, а ии создаются бесконечно. ВОПРОС : "как нужно изменить скрипт чтобы при каждом создании ии происходило вычитание?"
Очередной новичок
Аватара пользователя
NeProUser
UNIт
 
Сообщения: 121
Зарегистрирован: 29 апр 2018, 20:22

Re: проблема с AI

Сообщение 1max1 30 июн 2018, 22:55

видимо эти условия не соблюдаются, проверь дебагом что именно

if (Vector3.Distance (transform.position, Point.transform.position) < seeDistance) {
if (command == true) {
if (Units1stb >= 0) {
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: проблема с AI

Сообщение NeProUser 01 июл 2018, 11:52

спасибо за помощь ! а проблема заключалась вот в чём (цветная строка):
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class MEDIAVEL_AI : MonoBehaviour {
public GameObject Point;//Объект внимания АI
private Transform target;//точка куда двиется АI
NavMeshAgent agent;
public float seeDistance = 5f;//поле зрения AI
public float attackDistance =2f;//зона атаки AI
public GameObject Enem;//модель AI
public bool command;
public bool AS;//фракция и принодлежность к ней
public bool RU;//фракция и принодлежность к ней
public bool EU;//фракция и принодлежность к ней
public bool NO;//фракция и принодлежность к ней
public bool DR;//фракция и принодлежность к ней
public bool batle;//идёт ли бой
public Transform un1;//юнит 1 степени
public Transform un2;//юнит 2 степени
public Transform un3;//юнит 3 степени
public Transform un4;//юнит 4 степени
public Transform un5;//юнит 5 степени
public Transform unBOSS;//юнит степени босс
public GameObject attachka;//триггер на оружии AI
public GameObject spwn1;//точка появления юнитов 1 степени
public GameObject spwn2;//точка появления юнитов 2 степени
public GameObject spwn3;//точка появления юнитов 3 степени
public GameObject spwn4;//точка появления юнитов 4 степени
public GameObject spwn5;//точка появления юнитов 5 степени
public GameObject spwnBOSS;//точка появления юнитов степени босс
public int UnitsAll;//Всего юнитов в запасе у AI
public int Units1st;//всего юнитов 1 степени
public int Units2st;//всего юнитов 2 степени
public int Units3st;//всего юнитов 3 степени
public int Units4st;//всего юнитов 4 степени
public int Units5st;//всего юнитов 5 степени
public int BOSS;//всего юнитов степени босс
public int UnitsAllba;//Всего юнитов в запасе у AI во время боя
public int Units1stba;//всего юнитов 1 степени во время боя
public int Units2stba;//всего юнитов 2 степени во время боя
public int Units3stba;//всего юнитов 3 степени во время боя
public int Units4stba;//всего юнитов 4 степени во время боя
public int Units5stba;//всего юнитов 5 степени во время боя
public int BOSSba;//всего юнитов степени босс во время боя
public int Units1stb;//всего юнитов 1 степени в НАЧАЛЕ боя
public int Units2stb;//всего юнитов 2 степени в НАЧАЛЕ боя
public int Units3stb;//всего юнитов 3 степени в НАЧАЛЕ боя
public int Units4stb;//всего юнитов 4 степени в НАЧАЛЕ боя
public int Units5stb;//всего юнитов 5 степени в НАЧАЛЕ боя
public int BOSSb;//всего юнитов степени босс в НАЧАЛЕ боя
public int HP;// здоровье AI
// Use this for initialization
void Start () {
Point = GameObject.FindGameObjectWithTag ("Player");
agent = GetComponent<NavMeshAgent> ();
if(EU == true){
Units1st = 10;
}
if(RU == true){
Units1st = 15;
}
if(AS == true){
Units1st = 30;
}
if(NO == true){
Units1st = 18;
}
if(DR == true){
Units1st = 24;
}
}

// Update is called once per frame
void Update () {
if (HP > 0) {
if (batle == false) {
Units1stb = Units1st;
Units2stb = Units2st;
Units3stb = Units3st;
Units4stb = Units4st;
Units5stb = Units5st;
BOSSb = BOSS;
Units1stba = Units1st;
Units2stba = Units2st;
Units3stba = Units3st;
Units4stba = Units4st;
Units5stba = Units5st;
BOSSba = BOSS;
}
UnitsAll = Units1st + Units2st + Units3st + Units4st + Units5st + BOSS;
UnitsAllba = Units1stba + Units2stba + Units3stba + Units4stba + Units5stba + BOSSba;
if (UnitsAll <= (Units1st + Units2st + Units3st + Units4st + Units5st + BOSS) / 10) {
command = false;
Units1st = 0;
Units2st = 0;
Units3st = 0;
Units4st = 0;
Units5st = 0;
BOSS = 0;
Units1stb = 0;
Units2stb = 0;
Units3stb = 0;
Units4stb = 0;
Units5stb = 0;
BOSSb = 0;
}

if (UnitsAllba <= 0) {
command = false;
Units1st = 0;
Units2st = 0;
Units3st = 0;
Units4st = 0;
Units5st = 0;
BOSS = 0;
Units1stb = 0;
Units2stb = 0;
Units3stb = 0;
Units4stb = 0;
Units5stb = 0;
BOSSb = 0;
}

if (Vector3.Distance (transform.position, Point.transform.position) < seeDistance) {
if (command == true) {
batle = true;
if (Units1stb >= 0) {
Transform BulletInstance = (Transform)Instantiate (un1, spwn1.transform.position, Quaternion.identity);
Units1stb -= 1;
}
if (Units2stb >= 0) {
Transform BulletInstance = (Transform)Instantiate (un2, spwn2.transform.position, Quaternion.identity);
Units2stb -= 1;
}
if (Units3stb >= 0) {
Transform BulletInstance = (Transform)Instantiate (un3, spwn3.transform.position, Quaternion.identity);
Units3stb -= 1;
}
if (Units4stb >= 0) {
Transform BulletInstance = (Transform)Instantiate (un4, spwn4.transform.position, Quaternion.identity);
Units4stb -= 1;
}
if (Units5stb >= 0) {
Transform BulletInstance = (Transform)Instantiate (un5, spwn5.transform.position, Quaternion.identity);
Units5stb -= 1;
}
if (BOSSb >= 0) {
Transform BulletInstance = (Transform)Instantiate (unBOSS, spwnBOSS.transform.position, Quaternion.identity);
BOSSb -= 1;
}
}
if (Vector3.Distance (transform.position, Point.transform.position) > attackDistance) {
transform.LookAt (Point.transform);
target = Point.transform;
agent.SetDestination (target.transform.position);
Enem.GetComponent <Animator> ().SetTrigger ("MOVE");
} else {
Enem.GetComponent <Animator> ().SetTrigger ("ATTAKA");


}
} else {
Enem.GetComponent <Animator> ().SetTrigger ("IDLE");
target = gameObject.transform;
}
} else {
gameObject.GetComponent <MEDIAVEL_AI> ().enabled =false;
gameObject.GetComponent <NavMeshAgent> ().enabled=false;
Enem.GetComponent<Animator> ().SetTrigger ("DEATH");
attachka.SetActive (false);
Destroy (gameObject, 10);
}
}
}

эта строка не даёт бесконечно прибавлять 24 к Units1stb => всё работает как должно!
Очередной новичок
Аватара пользователя
NeProUser
UNIт
 
Сообщения: 121
Зарегистрирован: 29 апр 2018, 20:22


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

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

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