Четверг, 14 Ноября 2024, 20:49

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Проблема: система простейшего патрулирования.
GrimerdieДата: Пятница, 27 Июня 2014, 17:22 | Сообщение # 1
был не раз
Сейчас нет на сайте
Сделал патрулирование территории таким образом: противник постоянно поворачивается, как только его рей контактирует с вейпоинтом, который идет по порядку, противник перестает поворачиваться и идет на вейпоинт, а потом все по новый. И все бы ничего, но т.к. хотел запилить максимальную удобность при последующем использовании - вейпоинты сделанны массивом, поэтому когда противник достигает последнего вейпоинта, происходит проверка, и если это - последний вейпоинт, то текущая вейпоинт-цель сбрасывается на самую первую (т.е. на ноль), и персонаж должен идти на нее. Но вот незадача - если я сбрасываю цель в нулевой вейпоинт, то противник продолжает вращаться, не имея возможности найти его, хотя если поставить не нулевой вейпоинт массива, а например первый, то он спокойно пинается реем об него и идет. Т.к. пытаюсь добиться максимальной удобности, то мне такой расклад не подходит, поэтому прошу вашей помощи, что здесь не так:

Код:
Цитата
var walkSpeed : float = 1.5f;
var rotateSpeed : float = 15.0f;
var waypointDetection : boolean;
var playerDetection : boolean;
var waypoint : GameObject[] ;
var currentWaypoint : int = 0;
var lastWaypoint : int;

function Update () {

var ray = new Ray(transform.position,transform.forward);
var hit : RaycastHit;
var target : Vector3 = waypoint[currentWaypoint].transform.position;
var moveDirection : Vector3 = target - transform.position;

if (Physics.Raycast(ray, hit, 10))
{

if(hit.collider == waypoint[currentWaypoint].collider)
{

waypointDetection = true;
transform.position = Vector3.MoveTowards(transform.position,waypoint[currentWaypoint].transform.position,walkSpeed * Time.deltaTime);

}
}
if(waypointDetection == false)
{
transform.Rotate(Vector3.up * Time.deltaTime * rotateSpeed);
}

if(moveDirection.magnitude < 1)
{
waypointDetection = false;
currentWaypoint++;

}
if(lastWaypoint == currentWaypoint)
currentWaypoint = 0;

}


Сообщение отредактировал Grimerdie - Пятница, 27 Июня 2014, 17:23
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг