terrain, navmesh - глюки [РЕШЕНО]

Speed Tree : Terrain & Trees.

terrain, navmesh - глюки [РЕШЕНО]

Сообщение greatPretender 07 дек 2015, 20:14

Подскажите, наверняка кто-то сталкивался. У меня стандартный террейн, изменённый штатными методами unity 5 , т.е. слегка холмики сделаны, что танк мог ехать и забираться чуть на возвышенные места, сделал Bake, поставил танк, повешал бокс коллайдер, navmesh agent и навесил скрипт для движения танка на то место ,куда кликаю мышкой.
Для абсолютно плоского террейна всё работает идеально, всё ок, а для моего изменённого террейна, всё также хорошо работает, но приезжая на точку танк начинает вокруг себя немного рывками вращатся, или очень медленно куда -то смещаться, вроде бы не дрожь от шероховатостей. танк приезжает на ровное место, место выровнено широкой кистью для определённой высоты. Сам путь едет нормально, но приезжая на место, начинает куда смещаться и крутиться. В чём прикол.? что не так?
Последний раз редактировалось greatPretender 11 дек 2015, 14:52, всего редактировалось 1 раз.
greatPretender
Старожил
 
Сообщения: 526
Зарегистрирован: 23 сен 2015, 07:51

Re: terrain, navmesh - глюки

Сообщение Diab10 07 дек 2015, 20:32

Не работал с navmesh, не знаю как устроен. Но может при достижении цели просто отключать движение танка?
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: terrain, navmesh - глюки

Сообщение greatPretender 07 дек 2015, 20:37

да вроде в скрипте есть описание agent.stop, т.е. остановка движения по прибытие на место ... ((
greatPretender
Старожил
 
Сообщения: 526
Зарегистрирован: 23 сен 2015, 07:51

Re: terrain, navmesh - глюки

Сообщение lol 08 дек 2015, 09:44

У коллайдера стоит галка: isTrigger?
Если нет, то отключи коллайдер и посмотри будет ли дергаться.
lol
Старожил
 
Сообщения: 508
Зарегистрирован: 15 ноя 2009, 10:48
Откуда: Москва

Re: terrain, navmesh - глюки

Сообщение greatPretender 08 дек 2015, 10:50

у коллайдера галки нет, за этим я слежу.
попробую отключить.
танк ещё странно как-то, то по прибытию на место поворачивается на градусов так 30 через каждый 1-2сек, будто выбирая позицию и сканируя горизонт на предмет появления врагов, ничего такого в сцене ещё я не писал и не помещал.
причём перепробовал разные скрипты , написанные разными людьми из инета, и всё равно есть такое.
уже ещё раз прошёлся по террейну, выровнял кистью ещё раз, но всё равно то повороты эти странные, то лёгкое дрожание, смещающее танк от точки прибытия медленно медленно в сторону.
greatPretender
Старожил
 
Сообщения: 526
Зарегистрирован: 23 сен 2015, 07:51

Re: terrain, navmesh - глюки

Сообщение Diab10 08 дек 2015, 11:24

greatPretender писал(а):да вроде в скрипте есть описание agent.stop, т.е. остановка движения по прибытие на место ... ((


Видимо agent.stop не срабатывает.
Покажите код.
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: terrain, navmesh - глюки

Сообщение Cr0c 08 дек 2015, 12:06

Там же ещё должно быть расстояние, когда срабатывает agent.stop
Может оно сильно маленькое, из-за чего танк никак не доедет до точки назначения.
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: terrain, navmesh - глюки

Сообщение greatPretender 08 дек 2015, 19:46

вот код на танке

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class TankMove : MonoBehaviour {

    private NavMeshAgent agent;
    private Vector3 target;
    private bool b_target = false;

        // Use this for initialization
        void Start ()
    {
        agent = gameObject.GetComponent<NavMeshAgent>();
        }
       
        // Update is called once per frame
        void Update ()
    {
        if(Input.GetMouseButtonDown(0))
        {
            Ray ray;
            RaycastHit hit;

            ray = UnityEngine.Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray, out hit, 10000.0f))
            {
                target = hit.point;
                b_target = true;
            }
        }
    if(b_target)
        {
            if(Vector3.Distance(target, transform.position) > 1.0f)
            {
                agent.SetDestination(target);
                                b_target = false;
                //  потом добавить  анимации движения танка
            }
                        else
            {
                agent.Stop();
                //здесь можно потом добавить исполнение анимации остановки танка
                b_target = false;
            }
        }
        }
}
greatPretender
Старожил
 
Сообщения: 526
Зарегистрирован: 23 сен 2015, 07:51

Re: terrain, navmesh - глюки

Сообщение greatPretender 08 дек 2015, 20:18

о, сейчас отключил box collider и всё заработало как надо.
танк приехал на место ,причём даже на горку и гладко вроде приехал, и никаких вибраций, кручений на точке прибывания и прочее.
но блин, мне без коллаедра никак ведь?! нужно обрабатывать столкновения с другими танками и препятствиями.
попробовал уменьшил границы 3d коллаедра, сделал меньше чем выглядит сам танк, но это тоже плохо, едет вроде норм и вроде не дрожит, но краями текстур врезается в препятствия при проезде мимо(
greatPretender
Старожил
 
Сообщения: 526
Зарегистрирован: 23 сен 2015, 07:51

Re: terrain, navmesh - глюки

Сообщение Diab10 08 дек 2015, 20:33

greatPretender писал(а):вот код на танке

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class TankMove : MonoBehaviour {

    private NavMeshAgent agent;
    private Vector3 target;
    private bool b_target = false;

        // Use this for initialization
        void Start ()
    {
        agent = gameObject.GetComponent<NavMeshAgent>();
        }
       
        // Update is called once per frame
        void Update ()
    {
        if(Input.GetMouseButtonDown(0))
        {
            Ray ray;
            RaycastHit hit;

            ray = UnityEngine.Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray, out hit, 10000.0f))
            {
                target = hit.point;
                b_target = true;
            }
        }
    if(b_target)
        {
            if(Vector3.Distance(target, transform.position) > 1.0f)
            {
                agent.SetDestination(target);
                                b_target = false;
                //  потом добавить  анимации движения танка
            }
                        else
            {
                agent.Stop();
                //здесь можно потом добавить исполнение анимации остановки танка
                b_target = false;
            }
        }
        }
}



Так пробуйте:

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class TankMove : MonoBehaviour {

    private NavMeshAgent agent;
    private Vector3 target;
    private bool b_target = false;
    private bool b_target2 = false;

        // Use this for initialization
        void Start ()
    {
        agent = gameObject.GetComponent<NavMeshAgent>();
        }
       
        // Update is called once per frame
        void Update ()
    {
        if(Input.GetMouseButtonDown(0))
        {
            Ray ray;
            RaycastHit hit;

            ray = UnityEngine.Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray, out hit, 10000.0f))
            {
                target = hit.point;
                b_target = true;
                b_target2 = true;
            }
        }
    if(b_target)
        {
            if(Vector3.Distance(target, transform.position) > 1.0f)
            {
                agent.SetDestination(target);
                                b_target = false;
                //  потом добавить  анимации движения танка
            }
                        else
            {
                agent.Stop();
                //здесь можно потом добавить исполнение анимации остановки танка
                b_target = false;
                b_target2 = false;
            }
        }
    if(b_target2)
        {
            if(Vector3.Distance(target, transform.position) <= 1.0f)
{
                agent.Stop();
                b_target2 = false;
}
        }
        }
}
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: terrain, navmesh - глюки

Сообщение Cr0c 08 дек 2015, 20:39

docs.unity3d.com/ScriptReference/NavMeshAgent-stoppingDistance.html
А если это использовать вместо проверки расстояния и ручной остановки?
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: terrain, navmesh - глюки

Сообщение greatPretender 08 дек 2015, 20:43

К сожалению, этот скрипт не помогает. Вы вели там доп. переменную, и получается, что когда я тыкаю мышкой , он едет на то место, пока он едет я могу ещё тыкать другие места назанчения и он едет в другие, но если он приезжает на место назначения, то потом куда бы я не тыкал мышкой - он стоит и никуда не едет.
увы, я этот свой скрипт нашёл в видео уроке, он тоже был почему-то не совершенен и у меня также глючно работал ,пока я не прописал перед else "остановку" и всё ок, заработал.
а после вашего изменения танк вроде останавливается и не вибрирует и никуда не едет ,но через секунд 4-7 вдруг начинается смещаться куда-то медленно (
greatPretender
Старожил
 
Сообщения: 526
Зарегистрирован: 23 сен 2015, 07:51

Re: terrain, navmesh - глюки

Сообщение greatPretender 08 дек 2015, 20:47

Cr0c писал(а):docs.unity3d.com/ScriptReference/NavMeshAgent-stoppingDistance.html
А если это использовать вместо проверки расстояния и ручной остановки?


а как мне это вписать? я не слишком пока ещё соображаю. я не понимаю, там нет примера ( как это? что это?
greatPretender
Старожил
 
Сообщения: 526
Зарегистрирован: 23 сен 2015, 07:51

Re: terrain, navmesh - глюки

Сообщение Cr0c 08 дек 2015, 20:56

Это расстояние, на котором автоматически останавливается агент и выставляет состояние "достигнуто"
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: terrain, navmesh - глюки

Сообщение greatPretender 08 дек 2015, 20:59

ааа, которое в инспекторе, ну да, там стоит 0, нужно другое поставить чтоли?
greatPretender
Старожил
 
Сообщения: 526
Зарегистрирован: 23 сен 2015, 07:51

След.

Вернуться в Земля и деревья.

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4