• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed [C#] Problem ze skryptem patrolowania Unity 3D

0 głosów
74 wizyt
pytanie zadane 11 grudnia 2018 w C# i .NET przez misterbrow Nowicjusz (120 p.)
zamknięte 11 grudnia 2018 przez misterbrow

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.

komentarz zamknięcia: Podczas pisania pytania znalazłem swój błąd dlatego chce zablokować

Podobne pytania

0 głosów
0 odpowiedzi 67 wizyt
pytanie zadane 24 października 2018 w C# i .NET przez koyoo Początkujący (340 p.)
0 głosów
0 odpowiedzi 27 wizyt
pytanie zadane 13 maja w C# i .NET przez cyrus33 Użytkownik (610 p.)
0 głosów
0 odpowiedzi 98 wizyt
pytanie zadane 4 maja 2017 w C# i .NET przez Patryk8090 Początkujący (440 p.)
Porady nie od parady
Odznacz odpowiedź zieloną fajką, jeśli uważasz, że jest ona najlepsza ze wszystkich i umożliwiła ci rozwiązanie problemu.Najlepsza odpowiedź

67,233 zapytań

114,194 odpowiedzi

242,038 komentarzy

45,643 pasjonatów

Przeglądających: 353
Pasjonatów: 8 Gości: 345

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...