Witam Wszystkich dopiero uczę się programować i tworze system SI dla swojej gry składająca się z wielu skryptów ale system patrolowania nie chce działać.
using UnityEngine;
using System.Collections;
public class PatrolState : IenemyAI
{
EnemyState enemy;
int nextWayPoint = 0;
public PatrolState(EnemyState enemy)
{
this.enemy = enemy;
}
public void UpdateActions()
{
Watch();
Patrol();
}
void Watch()
{
RaycastHit hit;
if(Physics.Raycast(enemy.transform.position, -enemy.transform.forward, out hit, enemy.patrolRange))
{
if (hit.collider.CompareTag("Player"))
{
Debug.Log("Zauważyłem wroga!");
enemy.chaseTarget = hit.transform;
ToChaseState();
}
}
}
void Patrol()
{
enemy.navMeshAgent.destination = enemy.waypoints[nextWayPoint].position;
enemy.navMeshAgent.Resume();
if(enemy.navMeshAgent.remainingDistance <= enemy.navMeshAgent.stoppingDistance
&& !enemy.navMeshAgent.pathPending)
{
nextWayPoint = (nextWayPoint + 1) % enemy.waypoints.Length;
}
}
public void OnTriggerEnter(Collider enemy)
{
if (enemy.gameObject.CompareTag("Player"))
{
ToAlertState();
}
}
public void ToPatrolState()
{
Debug.Log("I'm already patrolling!");
}
public void ToAttackState()
{
enemy.currentState = enemy.attackState;
}
public void ToAlertState()
{
enemy.currentState = enemy.alertState;
}
public void ToChaseState()
{
enemy.currentState = enemy.chaseState;
}
}
Oto ten Skrypt. Wiem że coś nie chce działać naliczanie się tych waypoint ale nie wiem dlaczego bo domyślnie jest 0 po to żeby brał pierwszy element który jest waypointem niestety linijka gdzie wykrywa czy dotarł na miejsce i naliczyć kolejny punkt nie idzie do niego i dalej jest w tym samym miejscu a jak go przesunę za pomocą silnika wraca na miejsce. jest jeszcze inny skrypt który odpowiada za zmianę stanów i jest tam zdefiniowana publiczna wartość waypoint.
using UnityEngine;
using UnityEngine.AI;
using System.Collections;
public class EnemyState : MonoBehaviour
{
public Transform[] waypoints;
To jest początek tego skryptu gdzie jest zdefiniowana ta wartość. Z góry dzięki za pomoc.