Автор Тема: 1 версия, ИИ моба под РПГ.  (Прочитано 2240 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Июль 15, 2013, 14:01:11 pm
Прочитано 2240 раз

breNn0r-

  • Новичок

  • Оффлайн
  • *

  • 8
  • Репутация:
    3
    • Просмотр профиля
Делать было нечего, решил написать скрипт, скрипт ИИ для моба под РПГ и вроде получилось.
вот видео.
<a href="http://www.youtube.com/watch?v=g2Ie6TwSlVk" target="_blank">http://www.youtube.com/watch?v=g2Ie6TwSlVk</a>
вот скрипт.
using UnityEngine;
using System.Collections;

public class TESTENEMY : MonoBehaviour
{
public bool FRIEND;//if 0 yes if 1 neutral
public bool AGRRESSIVE;
public bool MOVING;
private bool COMBAT = false;

private GameObject player;
private NavMeshAgent NMAGENT;

private Vector3 START_POSITION;
public GameObject[] IDLE_MOVING;
public Vector3[] IDLE_MOVING_POS;

public float TIMER_WAITING;
public float MinSEC_RAND_POS;
public float MaxSEC_RAND_POS;

public float ENEMY_VIEW_DISTANCE;

int i;


void Awake()
{
NMAGENT = GetComponent<NavMeshAgent>();

player = GameObject.FindGameObjectWithTag("Player");
}

void Start()
{
START_POSITION = gameObject.transform.position;
CHECKER_IDLE_MASSIVES ();
}

void Update()
{
if (!COMBAT)
{
if (TIMER_WAITING > 0)
TIMER_WAITING -= 1 * Time.deltaTime;
}

if (FRIEND)//друг
{
AGRRESSIVE = false;
if (!COMBAT)
{
if (TIMER_WAITING <= 0)
{
if (MOVING)
{
RANDOM_IDLE_POSITION ();
if (i != 0)
NMAGENT.SetDestination(IDLE_MOVING[i].transform.position);
}
else
{
NMAGENT.enabled = false;
}
}
}
}
else//если не друг
{
if (AGRRESSIVE)//агрессор
{
if (Vector3.Distance(transform.position, player.transform.position)< ENEMY_VIEW_DISTANCE)
{
NMAGENT.SetDestination(player.transform.position);
COMBAT = true;
}
else
{
//NMAGENT.SetDestination(START_POSITION);
COMBAT = false;
}

if (!COMBAT)
{
if (TIMER_WAITING <= 0)
{
if (MOVING)
{
RANDOM_IDLE_POSITION ();
if (i != 0)
NMAGENT.SetDestination(IDLE_MOVING[i].transform.position);
}
else
{
NMAGENT.SetDestination(START_POSITION);
}
}
}
}
else//нейтрал
{
if (!COMBAT)
{
if (TIMER_WAITING <= 0)
{
if (MOVING)
{
RANDOM_IDLE_POSITION ();
if (i != -1)
NMAGENT.SetDestination(IDLE_MOVING[i].transform.position);
}
else
{
NMAGENT.enabled = false;
}
}
}
}
}
}
void RANDOM_IDLE_POSITION ()
{
i = -1;
i = Random.Range(0, IDLE_MOVING.Length);
TIMER_WAITING = Random.Range(MinSEC_RAND_POS, MaxSEC_RAND_POS);
}

void CHECKER_IDLE_MASSIVES()
{
for (int j = 0; j < IDLE_MOVING.Length; j++)
{
IDLE_MOVING_POS[j] = new Vector3(IDLE_MOVING[j].transform.position.x, IDLE_MOVING_POS[j].y, IDLE_MOVING[j].transform.position.z);
}
}
}

« Последнее редактирование: Июль 31, 2013, 13:52:43 pm от Mimi Neko »

Июль 15, 2013, 15:32:54 pm
Ответ #1

Mimi Neko

  • Администратор
  • Старожил форума

  • Оффлайн
  • *****

  • 2456
  • Репутация:
    153
    • Просмотр профиля
Полезная вещь! Думаю обязательно кому-нибудь пригодится,

Июль 18, 2013, 22:55:34 pm
Ответ #2

Captious

  • Пользователь

  • Оффлайн
  • **

  • 31
  • Репутация:
    3
    • Просмотр профиля
Спасибо большое мне пригодилось.

Сентябрь 13, 2013, 03:20:44 am
Ответ #3

ilyakos

  • Частный гость

  • Оффлайн
  • ***

  • 206
  • Репутация:
    3
  • Подпись под аватаром
    Зеленый
    • Просмотр профиля
А я так и не понял, повешал на моба скрипт, настроил, он не реагирует ни в какую...

Сентябрь 13, 2013, 10:17:45 am
Ответ #4

Mimi Neko

  • Администратор
  • Старожил форума

  • Оффлайн
  • *****

  • 2456
  • Репутация:
    153
    • Просмотр профиля
Потому что нужно понять самое главное: Нужно учиться писать свои скрипты!
Потому что нужно писать свои скрипты, чтобы их понимать. А без понимания, чужие тебе всё равно безполезны.

Сентябрь 14, 2013, 11:37:30 am
Ответ #5

ilyakos

  • Частный гость

  • Оффлайн
  • ***

  • 206
  • Репутация:
    3
  • Подпись под аватаром
    Зеленый
    • Просмотр профиля
Я как бы сам пишу скрипты для своего "проекта", просто, понимаете, бывают такие случаи, когда реально, например, приходит неплохая мысль, но не знаешь, каким путем это реализовать :)