Суббота, 04 Мая 2024, 02:11

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Вопрос-[ответ] по Unity (Задаём свои вопросы)
Вопрос-[ответ] по Unity
QWER56Дата: Понедельник, 09 Августа 2010, 10:58 | Сообщение # 1
старожил
Сейчас нет на сайте
Вопрос-[Ответ] по Unity3d

  • База скриптов Unity3d
  • Курс Уроков по Unity 3D от Alcatraz

    ConsMark - поисковик по интернет магазинам.

    Сообщение отредактировал QWER56 - Вторник, 26 Июля 2011, 20:54
  • pixeyeДата: Вторник, 16 Июня 2015, 20:45 | Сообщение # 7021
    Red Winter Software
    Сейчас нет на сайте
    Цитата JaJaBinks ()
    ЧТо значит проверка на тег?


    У тебя в первом скрипте идет проверка объекта по тэгу во время коллизии.
    Код оч стандартный и так с ходу понять почему на андроидах это не работает мне сложно. Поэтому будет здорово по отдельности каждый элемент проверить. Наверняка не срабатывает на этапе проверки.


    ACTORS - мой фреймворк на Unity
    Until We Die - игра над которой работаю

    GupiДата: Среда, 17 Июня 2015, 19:28 | Сообщение # 7022
    был не раз
    Сейчас нет на сайте
    Здравствуйте.
    Вопрос, наверное, задавался не раз, в поиске находил парочку тем по моему вопросу, но следуя инструкциям, так и не смог добиться желаемого результата...
    Есть 2 координаты, "а" и "б": мне нужно, чтобы куб по команде передвинулся из точки "а" в точку "б", повернувшись "лицом" в сторону передвижения. Необходимо, чтобы движение было медленным.
    Как реализовать сею функцию?
    Пробовал следующее:
    Код
    Vector3 startm = new Vector3(px - 0.5f, 0.5f, py - 0.5f);
    Vector3 finm = new Vector3(cx - 0.5f, 0.5f, cy - 0.5f);
    Player.transform.position = Vector3.MoveTowards (startm, finm, Time.deltaTime);

    При использовании сего куска кода куб сдвигается на чуть-чуть по нужной траектории и остаётся на месте. Если домножить Time.deltaTime на 100, то на практике куб мгновенно перемещается в конечную точку по команде.
    С поворотом пока не разбирался.
    Заранее благодарен за помощь.
    berilДата: Среда, 17 Июня 2015, 19:45 | Сообщение # 7023
    Я не ленивый, я — энергосберегающий
    Сейчас нет на сайте
    Цитата Gupi ()
    Time.deltaTime на 100,

    Умножай не на 100, а на меньшее число smile




    Накодил? Убери за собой!
    Инвентарь в Unity(UI)
    Инвентарь в Unity(GUI)
    GupiДата: Среда, 17 Июня 2015, 19:47 | Сообщение # 7024
    был не раз
    Сейчас нет на сайте
    Цитата beril ()
    Умножай не на 100, а на меньшее число

    Пробовал. Куб так же мгновенно перемещается, но не доходит до конечной точки...
    berilДата: Среда, 17 Июня 2015, 20:08 | Сообщение # 7025
    Я не ленивый, я — энергосберегающий
    Сейчас нет на сайте
    Ну нужно найти вектор направления Vector3 vec = target.position - player.position;
    И по нему уже двигаться




    Накодил? Убери за собой!
    Инвентарь в Unity(UI)
    Инвентарь в Unity(GUI)
    pixeyeДата: Среда, 17 Июня 2015, 20:23 | Сообщение # 7026
    Red Winter Software
    Сейчас нет на сайте
    Цитата Gupi ()
    Здравствуйте.
    Вопрос, наверное, задавался не раз, в поиске находил парочку тем по моему вопросу, но следуя инструкциям, так и не смог добиться желаемого результата...
    Есть 2 координаты, "а" и "б": мне нужно, чтобы куб по команде передвинулся из точки "а" в точку "б", повернувшись "лицом" в сторону передвижения. Необходимо, чтобы движение было медленным.
    Как реализовать сею функцию?
    Пробовал следующее:


    Скачиваешь и ставишь в проект это -> https://github.com/prime31/GoKit

    Далее в коде:

    Go.to(YOUROBJECT.transform, TIME, new GoTweenConfig().position(POS).setEaseType(GoEaseType.SineOut));

    Где YOUROBJECT.transform - трансформ передвигаемого объекта, TIME время передвижения типа float, POS vector позиции на которую надо сместиться.
    Покопавшись на гитхабе разберешься как таким же способом сделать вращение в нужную точку.

    Для любых строго заданных перемещений из точки А в точку Б рекомендую использовать систему твинов.


    ACTORS - мой фреймворк на Unity
    Until We Die - игра над которой работаю

    GupiДата: Среда, 17 Июня 2015, 20:57 | Сообщение # 7027
    был не раз
    Сейчас нет на сайте
    pixeye, а как установить плагин?
    pixeyeДата: Среда, 17 Июня 2015, 23:27 | Сообщение # 7028
    Red Winter Software
    Сейчас нет на сайте
    Цитата Gupi ()
    pixeye, а как установить плагин?


    В реадми все написано, просто скачать все файлы и распаковать их в ассетах проекта

    Ассеты


    ACTORS - мой фреймворк на Unity
    Until We Die - игра над которой работаю



    Сообщение отредактировал pixeye - Среда, 17 Июня 2015, 23:38
    GupiДата: Четверг, 18 Июня 2015, 09:30 | Сообщение # 7029
    был не раз
    Сейчас нет на сайте
    Цитата pixeye ()
    В реадми все написано, просто скачать все файлы и распаковать их в ассетах проекта

    При компиляции 113 ошибок в скриптах этого плагина. smile
    pixeyeДата: Четверг, 18 Июня 2015, 10:18 | Сообщение # 7030
    Red Winter Software
    Сейчас нет на сайте
    Цитата Gupi ()
    При компиляции 113 ошибок в скриптах этого плагина.


    Скорее всего у тебя юнити5, на него правится плагин


    ACTORS - мой фреймворк на Unity
    Until We Die - игра над которой работаю

    GupiДата: Четверг, 18 Июня 2015, 12:34 | Сообщение # 7031
    был не раз
    Сейчас нет на сайте
    Цитата pixeye ()
    Скорее всего у тебя юнити5, на него правится плагин

    Есть какие-нибудь ещё идеи, как решить поставленные задачи?
    pixeyeДата: Четверг, 18 Июня 2015, 13:26 | Сообщение # 7032
    Red Winter Software
    Сейчас нет на сайте
    Цитата Gupi ()
    Есть какие-нибудь ещё идеи, как решить поставленные задачи?


    Написать свои твины. Простейший из:

    Код

    public IEnumerator moveByTime (Transform obTransform, Vector3 end, float time)
        {   
         

          Vector3 start = obTransform.localPosition;
          float t = 0.0f;   
          while (t < 1.0f) {
            t += Time.deltaTime * (1.0f / time);
            obTransform.localPosition = Vector3.Lerp (start, end, t);
            yield return 0;
          }   
          
          
        }


    Дальше вызываешь его как
    Код
    StartCoroutine(moveByTime(transform, position, time));

    где трансформ эт трансформ объекта, позиция эт вектор куда, а время это за сколько он доберется до точки.

    Настоятельно рекомендую изначально покурить на тему твинов чтобы либо собрать свою библиотеку. Либо посмотреть в гугле - таких библиотек помимо праймовских для юнити туча.


    ACTORS - мой фреймворк на Unity
    Until We Die - игра над которой работаю



    Сообщение отредактировал pixeye - Четверг, 18 Июня 2015, 15:01
    GupiДата: Четверг, 18 Июня 2015, 14:42 | Сообщение # 7033
    был не раз
    Сейчас нет на сайте
    pixeye, не понял как записывается первый аргумент. Что именно туда вписывается?
    pixeyeДата: Четверг, 18 Июня 2015, 14:45 | Сообщение # 7034
    Red Winter Software
    Сейчас нет на сайте
    Цитата Gupi ()
    pixeye, не понял как записывается первый аргумент. Что именно туда вписывается?


    transform объекта которого ты двигаешь.


    ACTORS - мой фреймворк на Unity
    Until We Die - игра над которой работаю

    GupiДата: Четверг, 18 Июня 2015, 14:50 | Сообщение # 7035
    был не раз
    Сейчас нет на сайте
    Цитата pixeye ()
    transform объекта которого ты двигаешь.

    Можно пример пожалуйста? Чего-то никак не догоняю...
    pixeyeДата: Четверг, 18 Июня 2015, 15:00 | Сообщение # 7036
    Red Winter Software
    Сейчас нет на сайте
    Цитата Gupi ()
    Можно пример пожалуйста? Чего-то никак не догоняю...


    Без обид, но если ты такие вещи недогоняешь то тебе курить мануалы и учебники по юнити еще долго.

    Код
    void Start(){

    Transform myTransform = transform;
    Vector3 moveToPos = new Vector3(100,100,100);
    float moveTime = 2.0f;

    StartCoroutine(moveByTime(myTransform, moveToPos, moveTime));
    }


    Во время выполнения метода Старт запустится код, что скидывал выше. myTransform - переменная хранящая трансформ игрового объекта к которому привязан твой скрипт. Можно просто использовать transform - но это плохая практика так как за ней идет поиск трансформа. Лучше сохранять в переменной.

    мувТуПос - переменная типа вектор, от балды поставил позицию в x 100, y 100, z 100
    мувТайм - время за которое из точки А в точку Б пройдет твой объект - чем больше время тем медленнее двигается соответсвенно.


    ACTORS - мой фреймворк на Unity
    Until We Die - игра над которой работаю

    GupiДата: Четверг, 18 Июня 2015, 15:07 | Сообщение # 7037
    был не раз
    Сейчас нет на сайте
    pixeye, блин, а мне нужно передвинуть не тот объект, к которому привязан скрипт... smile
    Как бы я кликаю по клеточке и на неё должен переместится персонаж (кубик), т.е. скрипт я к клеточке привязываю.


    Сообщение отредактировал Gupi - Четверг, 18 Июня 2015, 15:10
    pixeyeДата: Четверг, 18 Июня 2015, 15:19 | Сообщение # 7038
    Red Winter Software
    Сейчас нет на сайте
    Цитата Gupi ()
    pixeye, блин, а мне нужно передвинуть не тот объект, к которому привязан скрипт...
    Как бы я кликаю по клеточке и на неё должен переместится персонаж (кубик), т.е. скрипт я к клеточке привязываю.


    Вешаешь этот скрипт на пустой объект на сцене

    переменную трансформа выносишь за метод

    Код
    public Transform TargetTransorm = transform;   

    void Start(){   

    Vector3 moveToPos = new Vector3(100,100,100);   
    float moveTime = 2.0f;   

    StartCoroutine(moveByTime(TargetTransorm, moveToPos, moveTime));   
    }


    В инспекторе выставляешь любой трансформ. ( кликаешь по объекту который содержит этот скрипт и там появится выбор TargetTransorm

    - однако это очень неуклюже и конечно в реальной практике где у тебя объекты будут динамически создаваться/убиваться такое ты использовать не сможешь. Но тут уже надо изучать что такое синглтон, работать с массивами, делать проверки - в общем, этим надо отдельно заниматься и расписывать.

    Тут немного о простейших корутинах


    ACTORS - мой фреймворк на Unity
    Until We Die - игра над которой работаю



    Сообщение отредактировал pixeye - Четверг, 18 Июня 2015, 15:20
    GupiДата: Четверг, 18 Июня 2015, 16:11 | Сообщение # 7039
    был не раз
    Сейчас нет на сайте
    Цитата pixeye ()
    public Transform TargetTransorm = transform;  

    "Assets\Scripts\Square.cs(36,36): Error CS0120: Для нестатического поля, метода или свойства "UnityEngine.Component.transform.get" требуется ссылка на объект (CS0120) (Assembly-CSharp)"

    Спасибо за статью, которую скинули... Полистал её и нашёл там про движение. Немного адаптировал код под свой скрипт и всё получилось как надо. smile
    Ещё раз огромное спасибо!


    Сообщение отредактировал Gupi - Четверг, 18 Июня 2015, 16:47
    pixeyeДата: Четверг, 18 Июня 2015, 17:08 | Сообщение # 7040
    Red Winter Software
    Сейчас нет на сайте
    Цитата Gupi ()
    "Assets\Scripts\Square.cs(36,36): Error CS0120: Для нестатического поля, метода или свойства "UnityEngine.Component.transform.get" требуется ссылка на объект (CS0120) (Assembly-CSharp)"


    Ну уж совсем копипастить то что я пишу не надо : (


    ACTORS - мой фреймворк на Unity
    Until We Die - игра над которой работаю

    Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Вопрос-[ответ] по Unity (Задаём свои вопросы)
    Поиск:

    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг