Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Unity > Общие вопросы

Общие вопросы вопросы не попадающие ни в один из доступных разделов

Ответ
 
Опции темы
Старый 18.11.2013, 09:08   #1
Azamat
AnyKey`щик
 
Аватар для Azamat
 
Регистрация: 13.11.2013
Сообщений: 11
Написано одно полезное сообщение
Радость Поднятие пожарника по пожарной лестнице

Всем привет.
Нужен ваш совет.
Необходимо реализовать поднятие пожарника по пожарной лестнице на спец. технике.

Пока я это вижу так, но возможно я ошибаюсь:
1.Машина подъезжает в любое место, поднимается лестница до уровня 2го этажа, затем она двигается влево, вправо.
2.Дается команда пожарнику, и он подходит к лестнице.
3.Заходит в зону тригера (прим. navmesh не взаимодействует с тригером)и направляется на первую ступень
4.Передвигается navmeshagent до последней ступени, и в это же время парралельно проигрывается анимация "взбирания"
5.Пожарник на этаже

Условия:
1.Машина имеет разное расположение, лестница также разный угол поворота.
2.Используется navmesh

Вопросы:
1.Правильно ли использовать тригер?
2.Может использовать анимацию сразу для двух объектов? (машина и пожарник), только как это будет я не представляю.

Спасибо, буду рад любым советам


Последний раз редактировалось Azamat, 18.11.2013 в 09:36. Причина: +картинка
(Offline)
 
Ответить с цитированием
Старый 18.11.2013, 09:27   #2
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Поднятие пожарника по пожарной лестнице

Картинку бы показал как это выглядит...
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 18.11.2013, 23:29   #3
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Поднятие пожарника по пожарной лестнице

Заметил картинку только сейчас, Честно говоря не очень понятно как должен пожарник забираться сначала на машину, а потом на лестницу. А что навмэш на лестнице есть? Как предвигать по навмешу агента прям по лестнице, которая двигается?
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 19.11.2013, 07:53   #4
Azamat
AnyKey`щик
 
Аватар для Azamat
 
Регистрация: 13.11.2013
Сообщений: 11
Написано одно полезное сообщение
Ответ: Поднятие пожарника по пожарной лестнице

Сообщение от pax Посмотреть сообщение
Заметил картинку только сейчас, Честно говоря не очень понятно как должен пожарник забираться сначала на машину, а потом на лестницу. А что навмэш на лестнице есть? Как предвигать по навмешу агента прям по лестнице, которая двигается?
Возможно сразу его перенести на лестницу, чтобы было меньше телодвижений=)
Навмеша нет на лестнице, этот вопрос вызывает затруднение.
Как вариант,пробую отключить навмеш при входе в тригер, и по достижению конечной ступени включить навмеш.
__________________
Предел в твоей голове.
(Offline)
 
Ответить с цитированием
Старый 19.11.2013, 09:22   #5
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Поднятие пожарника по пожарной лестнице

Если сразу переносить, то можно скрыть текущего пожарника, отобразить модель взбирающуюся по лестнице, а когда поднимется - сделать обратное, но уже сместив агента в нужное место.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 25.12.2013, 15:26   #6
Azamat
AnyKey`щик
 
Аватар для Azamat
 
Регистрация: 13.11.2013
Сообщений: 11
Написано одно полезное сообщение
Ответ: Поднятие пожарника по пожарной лестнице

Сообщение от pax Посмотреть сообщение
Если сразу переносить, то можно скрыть текущего пожарника, отобразить модель взбирающуюся по лестнице, а когда поднимется - сделать обратное, но уже сместив агента в нужное место.
в принципе так и сделал
все руки не доходили отписаться

В общем, если пожарник попадает в тригер и на лестнице никого нет, то:
тригер трансформирует его к первой позиции на лестнице,
с этого времени начинает проигрывать анимация,
и самое важное - отключается агент

по достижению второй позиции :
он трансморфмируется на этаж
и необходимые свойства компонентов запускаются

Код прилагается
public class ClimbTrigger : MonoBehaviour
{
    private Fireman fireman;
    private NavMeshAgent agent;
    private Zil zil;                   //обратиться к зилу, сказав, что пожарник на лестнице
    private Passenger passenger;       //по пути в машину, не попасть в тригер лестницы

    public List<GameObject> InClimb =new List<GameObject>(); 

    private GameObject unit;
    private GameObject stage1;         //первая ступень, должна быть на первой лестнице
    private GameObject stage2;         //вторая ступень, должна быть на последней лестнице
    private GameObject stage3;         //третья ступень, относительно второй ступени

    private Vector3 startPosition;
    private Vector3 firstPosition;      //позиция первой ступени
    private Vector3 secondPosition;
    private Vector3 thirthPosition;

    private float startTime;
    private float duration = 10;        //чем выше значение, тем меньше скорость поднятия

    private bool to2stage = false;

    void OnTriggerEnter(Collider unitCollider)
    {
        stage1 = GameObject.Find("Stage1");
        stage2 = GameObject.Find("Stage2");
        stage3 = GameObject.Find("Stage3");

        zil = GameObject.Find("zil").GetComponent<Zil>();
        passenger = this.transform.GetComponent<Passenger>();

        firstPosition = stage1.transform.position;
        secondPosition = stage2.transform.position;
        thirthPosition = stage3.transform.position;

        if (unitCollider.CompareTag("Unit") && unitCollider.gameObject.GetComponent("Fireman") && InClimb.Count==0)
        {
            //Debug.Log("Зашел в ClimbTrigger!");
            InClimb.Add(unitCollider.gameObject);                               //добавили в список, чтобы другие не лазали
            fireman = unitCollider.gameObject.GetComponent<Fireman>();
            agent = unitCollider.gameObject.GetComponent<NavMeshAgent>();

            unit = unitCollider.gameObject;                                     //для обращения в Update
            fireman.Target = null;                                              //отключить цель передвижения
            fireman.transform.rotation = stage1.transform.rotation;             //повернуть лицом

            agent.enabled = false;                                             //отключить агент
            unitCollider.gameObject.rigidbody.isKinematic = true;

            unitCollider.gameObject.transform.position = firstPosition;        //трансформация к первой ступепни

            if (unitCollider.gameObject.transform.position == firstPosition)   //если достиг первой позиции
            {
                //Debug.Log("Выполняется..");
                startPosition = unitCollider.gameObject.transform.position;
                startTime = Time.time;
                to2stage = true;                                               //подниматься ко второй ступени
            }
        }
    }
    
    void Update()
    {
       
        if (to2stage)
        {
            //Debug.Log("Пожарник взбирается по лестнице");
            unit.transform.position = Vector3.Lerp(startPosition, secondPosition, (Time.time - startTime) / duration);
            fireman.OnClimb();                                            //анимация "взбирания"

            if (unit.transform.position == secondPosition)
            {
                unit.transform.position = thirthPosition;                 //трансформируется на этаж
                InClimb.Clear();
                to2stage = false;
                agent.enabled = true;
            }
           
        }
    }
}
__________________
Предел в твоей голове.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (25.12.2013)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 19:29.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com