Четверг, 14 Ноября 2024, 21:26

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

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

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

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

    Сообщение отредактировал QWER56 - Вторник, 26 Июля 2011, 20:54
  • AizenДата: Воскресенье, 27 Декабря 2015, 10:39 | Сообщение # 7501
    был не раз
    Сейчас нет на сайте
    Доброго времени суток! Помогите, пожалуйста, новичку.
    Проблема такова: не могу применить вращение к персонажу. При чем тем же самым способом другой объект вращается нормально
    Код

    void throwPortal(GameObject portal, bool isItFirst) {
            int x = Screen.width / 2;
            int y = Screen.height / 2;
            Ray ray = player.GetComponent<Camera>().ScreenPointToRay(new Vector3(x, y));
            RaycastHit hit;

            if (Physics.Raycast(ray, out hit)) {
                if (isItFirst) firstDirection = hit.normal;
                else secondDirection = hit.normal;
                portal.transform.position = hit.point;
                portal.transform.rotation = Quaternion.LookRotation(hit.normal); //здесь вращение применяется
            }
        }

    А вот здесь почему-то нет
    Код

    void OnTriggerEnter(Collider other) {
            if (other.tag == "Player") {
                other.transform.position = otherPortal.transform.position + otherPortal.transform.forward*1;
                if (isFirst) direction = other.GetComponent<ThrowPortal>().getDirectionSecond();
                else direction = other.GetComponent<ThrowPortal>().getDirectionFirst();
                player.transform.rotation = Quaternion.LookRotation(direction); // не работает. Вектор direction тот же самый, что и выше
                //player.transform.position += direction * 5; // кстати, вот это работало, то есть вектор все-таки до этого метода добрался
            }
        }
    MaxplantДата: Среда, 30 Декабря 2015, 11:57 | Сообщение # 7502
    был не раз
    Сейчас нет на сайте
    Помогите пожалуйста с решением проблемы. Пишу AI, сейчас он может патрулировать местность и атаковать врага. И все было бы хорошо, если бы не одна странность: Когда проект собран под ПК или Android, то бот почему-то перестает патрулировать территорию. Он стоит у стартовой точки патруля, ну и собственно все. Гоняется за игроком, возвращается обратно к точке старта и снова стоит. Совершенно непонятно в чем дело. Код в порядке, в Юнити все работает. Помогите разобраться, если кто знает решение этой проблемы, буду благодарен!
    8Observer8Дата: Среда, 30 Декабря 2015, 11:59 | Сообщение # 7503
    заслуженный участник
    Сейчас нет на сайте
    Maxplant, вы AI делали через встроенный NevMesh?

    Сообщение отредактировал 8Observer8 - Среда, 30 Декабря 2015, 12:54
    MaxplantДата: Среда, 30 Декабря 2015, 12:10 | Сообщение # 7504
    был не раз
    Сейчас нет на сайте
    Цитата 8Observer8 ()
    вы AI делали через встроенный NevMash?
    нет, простой скрипт и объекты в качестве точек патруля.
    skripkaДата: Четверг, 31 Декабря 2015, 19:44 | Сообщение # 7505
    был не раз
    Сейчас нет на сайте
    Помогите
    1 Нужно сделать камеру, которая поворачивается при поворачивании мыши и двигается синхронно мыши при зажатой ПКМ
    2 Не могу понять, как сделать, чтобы в самой игре при нажатии динамически появлялся объект из префаба
    скрипты нужны на языке C# (как правильно называть документы со скриптом, чтобы не было ошибки?)
    Заранее благодарю
    allodsДата: Четверг, 31 Декабря 2015, 23:15 | Сообщение # 7506
    почти ветеран
    Сейчас нет на сайте
    Цитата skripka ()
    Помогите
    1 Нужно сделать камеру, которая поворачивается при поворачивании мыши и двигается синхронно мыши при зажатой ПКМ
    2 Не могу понять, как сделать, чтобы в самой игре при нажатии динамически появлялся объект из префаба
    скрипты нужны на языке C# (как правильно называть документы со скриптом, чтобы не было ошибки?)
    Заранее благодарю


    Создай пустой скрипт и посмотри как он называется и что написано в скрипте и "как правильно называть документы со скриптом, чтобы не было ошибки?" уже спрашивать не будешь

    1-посмотри стандартный скрипт камеры их там много
    8Observer8Дата: Пятница, 01 Января 2016, 10:51 | Сообщение # 7507
    заслуженный участник
    Сейчас нет на сайте
    Цитата skripka ()
    2 Не могу понять, как сделать, чтобы в самой игре при нажатии динамически появлялся объект из префаба

    Ответ здесь: http://docs.unity3d.com/Manual/InstantiatingPrefabs.html
    skripkaДата: Суббота, 02 Января 2016, 00:01 | Сообщение # 7508
    был не раз
    Сейчас нет на сайте
    Статью я читал. У меня получились блоки, при начале игры разлетающиеся во все стороны.
    Если можете, расскажите кто-нибудь поподробнее, как сделать, чтобы при нажатии лкм по полю появлялся блок, который префаб.
    Желательно, чтобы он ставился по определенной сетке.

    Добавлено (02 января 2016, 00:01)
    ---------------------------------------------
    Скачал скрипт, теперь ставятся блоки, отлетающие друг на друга, изменение массы не помогает.
    Буду искать ответы дальше.

    ivan2009Дата: Вторник, 05 Января 2016, 18:57 | Сообщение # 7509
    частый гость
    Сейчас нет на сайте
    Доброго времени суток...Тут такая ситуация... в методе динамически объявлял обобщенную коллекцию,после определенного события добавлял в эту коллекцию объект.
    И вот тогда у меня вылетала ошибка NullReferenceException: Object reference not set to an instance of an object - это как я понимаю не был указан параметр в методе List<>.Add();
    Решить проблему у меня получилось...но причину я как то не уловил....собственно чего и начал писать тут, объясните мне неучу почему этот вариант коллекции выдавал ошибку -
    List<GameObject> activeAllPoints = null;
    а вот этот не выдавал и все у меня заработало - List<GameObject> activeAllPoints = new List<gameObject>();
    Буду очень благодарен если объясните в чем разница между этими вариантами...

    ниже кусок скрипта где все это происходило.
    Код
    if (GameObject.FindGameObjectWithTag (ChipTag)) {
        //если значения кубов больше нуля.
        if (dice1 > (int)0 || dice2 > (int)0) {
         //собираем все активные фишки в коллекцию.
         List<GameObject> allChip = GameObject.FindGameObjectsWithTag (ChipTag).ToList ();
         //вызываем метод возвращающий фишку с наибольшим приоритетом.
         activeChip = ai.getMaxPriorityChip (allChip);
         //вызываем метод определения активных поинтов, в зависимости от значений кубов.
         ai.Move (activeChip.GetComponent<ChipButton> ().currentPosIndex, pointsCol, activeChip,
               GameObject.FindGameObjectsWithTag (ChipTag));
         List<GameObject> activeAllPoints = new List<GameObject>();
        
         //Debug.Log ("Значение куба1 >>>> " + dice1 + "  Зачение куба2 >>>> " + dice2);
         foreach (GameObject point in pointsCol) {
          if (point.transform.FindChild ("Spotlight").GetComponent<Light> ().enabled) {
           //собираем все активные поинты в коллекцию.
           activeAllPoints.Add(point);[b] Вот тут  я через дэбаг режим смотрел  у меня вылетало с первым вариантом обьявления коллекции[/b]
           //Debug.Log ("Поинт  с мндексом " + pointsCol.IndexOf (point) + " активен!!!");
          }
         }
         //вызываем метод возвращающий поинт с максимальным приоритетом.
         GameObject activePoint = ai.checkPriorityPoint (activeAllPoints, pointsCol);
         activePoint.GetComponent<PointButton1> ().moveAIChip (activeChip, pointsCol);
        } else {
         endPlay ();
        }
       }


    что то я посидел подумал....в первом варианте я создавал просто ссылку на коллекцию но не саму коллекцию, а во втором варианте уже создавал саму коллекцию....Правильно ли я понял?)


    Сообщение отредактировал ivan2009 - Вторник, 05 Января 2016, 19:43
    berilДата: Четверг, 07 Января 2016, 01:42 | Сообщение # 7510
    Я не ленивый, я — энергосберегающий
    Сейчас нет на сайте
    Почитай что делает null и new и что такое ссылочный тип :)

    Ты ведь не делаешь так?

    Код
    class MyClass
    {
    public int i;
    }

    class MyClass2
    {
    MyClass my = null
    my.i что там....
    а делаешь вот так вот
    MyClass my = new MyClass()
    }




    Накодил? Убери за собой!
    Инвентарь в Unity(UI)
    Инвентарь в Unity(GUI)
    ivan2009Дата: Четверг, 07 Января 2016, 17:07 | Сообщение # 7511
    частый гость
    Сейчас нет на сайте
    Цитата beril ()
    Ты ведь не делаешь так?

    Обычно присваивал уже существующие объекты
    как то так :
    Код

    class MyClass{
    public string s;
    }

    class MyClass1{
    string s1 = MyClass.s;
    }

    ну или что то подобное...потому и на тупил...

    Тут вот такой вопрос.Как мне при помощи метода Vector.Lerp переместить объект по каждой позиции объектов находящихся в коллекции.
    Сколько объектов в коллекции определяется динамически. И текущая позиция перемещаемого объекта будет постоянно изменятся и определятся динамически.
    пробовал сделать что то такое.
    Код
    //метод для плавного перемещения фишки по поинтам.
        private void myLerp(GameObject chip, List<GameObject> allPoints){
      //получаем индекс последней позиции фишки.
      int lastIndex = chip.GetComponent<ChipButton> ().currentPosIndex;
      //колекция для  поинтов в промежутке между последней позицией фишки и будущей.
      List<GameObject> activeRangePoint = new List<GameObject> ();
      //вспомогательная переменная.
      int countPoint = allPoints.IndexOf (gameObject) - lastIndex;
      //заполняем коллекцию поинтами.
      activeRangePoint.AddRange (allPoints.GetRange (lastIndex, countPoint));
      //перемещаем фишку по каждому поинту.
      foreach (GameObject point in activeRangePoint) {
       chip.transform.position = Vector3.Lerp(chip.transform.position, point.transform.position, Time.deltaTime* rools.getChipSpeed());
      }

        }


    но тут получается косяк в том что в цикле foreach не дожидаясь окончательного перемещения объекта на указанную позицию происходит переход к следующему элементу коллекции...
    и получается так что весь цикл отрабатывает а перемещаемый объект не становится даже на первую позицию...
    zisXДата: Воскресенье, 10 Января 2016, 01:48 | Сообщение # 7512
    Neto Zis
    Сейчас нет на сайте
    На сервер посылаю запрос на пинг при этом упаковываю 1 параметр ( DateTime.Now.Ticks )
    На сервере обрабатываю запрос ( Создаю новую переменную и вычитаю из DateTime.Now.Ticks параметр переданный клиентом ). Потом посылаю евент на сервер с параметром ( пинг в тиках ) и в конце концов на клиенте конвертирую из тиков в миллисекунды.

    Пинг 15-30.

    P.S. Но это все происходит на моем домашнем пк, мб я не так считаю?

    P.S.S Photon Server


    ExcelsiorerДата: Среда, 13 Января 2016, 01:43 | Сообщение # 7513
    частый гость
    Сейчас нет на сайте
    Создаю интерфейс не через скрипт, а через канвас, сразу на сцене. Как мне применить к кнопкам, созданным таким способом, GUI skin?
    8Observer8Дата: Среда, 13 Января 2016, 15:27 | Сообщение # 7514
    заслуженный участник
    Сейчас нет на сайте
    Цитата allods ()
    Может кто сказать возможно ли и как назначить другого игрока на роль сервера если игрок в роли сервера тот отключится или еще что похуже

    http://docs.unity3d.com/Manual/UNetHostMigration.html
    STRATEG766Дата: Четверг, 14 Января 2016, 20:53 | Сообщение # 7515
    частый гость
    Сейчас нет на сайте
    Скажите пожалуйста, как вместо текста "Кнопка1" добавить переменную целочисленного типа? Хотел бы, чтобы там выводились какие-то числа.
    GUI.Button(new Rect(Screen.width - 80, Screen.height - 65, 80, 50), "Кнопка1");


    Сообщение отредактировал STRATEG766 - Четверг, 14 Января 2016, 20:58
    berilДата: Четверг, 14 Января 2016, 21:09 | Сообщение # 7516
    Я не ленивый, я — энергосберегающий
    Сейчас нет на сайте
    Цитата STRATEG766 ()
    GUI.Button(new Rect(Screen.width - 80, Screen.height - 65, 80, 50), "Кнопка1");

    GUI.Button(new Rect(Screen.width - 80, Screen.height - 65, 80, 50), "Кнопка1" + число.ToString())




    Накодил? Убери за собой!
    Инвентарь в Unity(UI)
    Инвентарь в Unity(GUI)
    8Observer8Дата: Четверг, 14 Января 2016, 21:14 | Сообщение # 7517
    заслуженный участник
    Сейчас нет на сайте
    Цитата STRATEG766 ()
    GUI.Button(new Rect(Screen.width - 80, Screen.height - 65, 80, 50), "Кнопка1");

    Код
    int number = 1;
    GUI.Button(new Rect(Screen.width - 80, Screen.height - 65, 80, 50), string.Format("Запустить ракету номер {0} в небо :)", number));


    Сообщение отредактировал 8Observer8 - Четверг, 14 Января 2016, 21:59
    STRATEG766Дата: Четверг, 14 Января 2016, 21:15 | Сообщение # 7518
    частый гость
    Сейчас нет на сайте
    Цитата beril ()
    GUI.Button(new Rect(Screen.width - 80, Screen.height - 65, 80, 50), "Кнопка1" + число.ToString())

    Спасибо!!

    Добавлено (14 января 2016, 21:15)
    ---------------------------------------------

    Цитата 8Observer8 ()
    int number = 1;
    GUI.Button(new Rect(Screen.width - 80, Screen.height - 65, 80, 50), string.Format("Запустить ракету номер {0} в небо :)", number));

    Спс))
    Storm54Дата: Пятница, 15 Января 2016, 07:37 | Сообщение # 7519
    постоянный участник
    Сейчас нет на сайте
    Цитата zisX ()
    P.S. Но это все происходит на моем домашнем пк, мб я не так считаю?


    Насколько я помню, в Photon Sever по-умолчанию выставлена небольшая задержка перед обработкой пакетов. Этот параметр можно изменить в конфиге сервера.
    zisXДата: Пятница, 15 Января 2016, 17:19 | Сообщение # 7520
    Neto Zis
    Сейчас нет на сайте
    Storm54, Я тоже так сначала думал, но походу его куда то перенесли т.к. в конфиге его нету.
    Проверил ещё раз, не нашел точно такого же названия параметра задержки как в инете, но нашел что-то похожее, поменял на 0, свой кастомный класс выдает 5-10 пинг, стандартный параметр пинга у пира выдает 0 пинг.


    Поиск:

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