Czy Unity ma problem z AI?

Ogólne pytania na temat Unity3D

Czy Unity ma problem z AI?

Postprzez Skatton » 24 Lis 2018, 10:39

Witam,

Mam problem i nie rozumiem do końca jego przyczyn. Stworzyłem prosty skrypt, który każe NPCom podążać za graczem. W skrócie. Na widok gracza, NPC zmienia stan, idzie w jego kierunku, następnie zatrzymuje się w odpowiedniej odległości. Gracz rusza - NPC idzie za nim, gracz staje, NPC również, i tak dalej. Każdy z NPC ma dodany NAV Mesh Agent. Wszystko działa doskonale, jeśli teren/plane, po którym poruszają się NPC jest płaski. W terenie, na którym występuje rzeźba, pagórki, doliny, inne przeszkody, całość zawodzi. Część NPCów rusza za graczem, część stoi, często zatrzymują się, zostawiając gracza, i trzeba się zbliżyć, aby ich "aktywować", po czym znów z niewiadomych powodów zatrzymują się, choć powinni iść za graczem. Problem, jak już zaznaczyłem, nie występuje na zupełnie płaskim terenie.
Czy ktoś zna przyczynę tego problemu? Czy może to być błąd samego silnika, czy chodzi o bardziej prozaiczne przyczyny? Dodam, że problem występuje na obszarze, który w oknie nawigacji jest oznaczony na niebiesko jako "dostępny" dla agentów.
Będę wdzięczny za każdą pomoc.
Skatton
 
Posty: 30
Rejestracja: 30 Cze 2016, 10:44
Has thanked: 0 time
Been thanked: 0 time

Re: Czy Unity ma problem z AI?

Postprzez Hostur » 24 Lis 2018, 11:59

To twój skrypt, co ma Unity do Twojego systemu AI?
Czy wykrywanie masz zrobione na raycastach? jeśli tak to teren blokuje Ci raycast i masz jakiś logiczny problem w kodzie, ot cała magia.

Możesz ignorować teren przy raycascie albo wymyslec jak chcesz obslugiwac ai w takich przypadkach
Hostur
 
Posty: 663
Rejestracja: 05 Sie 2015, 07:36
Has thanked: 0 time
Been thanked: 0 time

Re: Czy Unity ma problem z AI?

Postprzez Skatton » 24 Lis 2018, 13:13

Dziękuję za szybką odpowiedź. Wykrywanie mam w raycastach. Rzeczywiście teren może blokować, bo problem występuje tylko wtedy, gdy występują na nim różnice wysokości. Na razie nie wiem jak to obejść, być może sam kod jest tutaj winien :/
Zresztą wkleję go poniżej:


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FollowNPC : MonoBehaviour {

public GameObject ThePlayer;
public float TargetDistance;
public float AllowedDistance = 5;
public GameObject TheNPC;
public float FollowSpeed;
public RaycastHit Shot;

void Update () {
transform.LookAt(ThePlayer.transform);
if(Physics.Raycast(transform.position,transform.TransformDirection(Vector3.forward), out Shot))
{
TargetDistance = Shot.distance;
if(TargetDistance >= AllowedDistance)
{
FollowSpeed = 0.25f;
TheNPC.GetComponent<Animator>().Play("WalkFWD");
transform.position = Vector3.MoveTowards(transform.position, ThePlayer.transform.position, FollowSpeed);
}
else
{
FollowSpeed = 0;
TheNPC.GetComponent<Animator>().Play("Idle_Neutral_1");
Skatton
 
Posty: 30
Rejestracja: 30 Cze 2016, 10:44
Has thanked: 0 time
Been thanked: 0 time

Re: Czy Unity ma problem z AI?

Postprzez Hostur » 24 Lis 2018, 15:26

Nie będę analizować tego kodu ale
https://docs.unity3d.com/ScriptReferenc ... ycast.html
może przyjąć też maskę w postaci maski bitowej
Tzn, że możesz ustawić sobie
Kod: Zaznacz wszystko
[SerializeField]
private LayerMask _terrainMask;

ustawić tam z inspektora maskę terrain i przy raycascie podać "~_terrainMask" co wykluczy tą maskę z raycastu
Hostur
 
Posty: 663
Rejestracja: 05 Sie 2015, 07:36
Has thanked: 0 time
Been thanked: 0 time

Re: Czy Unity ma problem z AI?

Postprzez Skatton » 24 Lis 2018, 21:39

Hej, dzięki za pomoc!
Okazało się, że wystarczyło zmienić w oknie inspektora terenu "Layer" z "Default" na ""Ignore Raycast" - i wszystko zaczęło działać bez zarzutu.
Skatton
 
Posty: 30
Rejestracja: 30 Cze 2016, 10:44
Has thanked: 0 time
Been thanked: 0 time


Wróć do Wsparcie Unity

Kto jest na forum

Użytkownicy przeglądający to forum: Brak zarejestrowanych użytkowników oraz 11 gości