Воскресенье, 28 Апреля 2024, 17:50

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

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

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

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

    Сообщение отредактировал QWER56 - Вторник, 26 Июля 2011, 20:54
  • WPhoeniXWДата: Четверг, 09 Октября 2014, 20:40 | Сообщение # 6561
    участник
    Сейчас нет на сайте
    gazik54, audio.Stop() - останавливает всё аудио
    Может
    aduioSource . Stop ();
    gazik54Дата: Четверг, 09 Октября 2014, 20:47 | Сообщение # 6562
    был не раз
    Сейчас нет на сайте
    Дело в том, что если делать Source, то он будет играться один, то есть, дано 2 клавиши, на них какие то 2 звука и если нажимаю сразу 2 играется только тот который был последним нажат, а мне надо чтобы, я нажимаю 2 клавиши, должно играться 2 звука, а когда например отпущу одну, то останавливается тот звук который был на клавише которую отпустил
    WPhoeniXWДата: Четверг, 09 Октября 2014, 20:59 | Сообщение # 6563
    участник
    Сейчас нет на сайте
    Ааа так ты видимо неправильно пишешь
    GetKeyDown действие при нажатии, НО НЕ ЗАЖАТИИ, то есть нажал-отпустил

    А вот GetKey Returns true while the user holds down the key identified by name. Think auto fire.


    " Кто в страхе живет, тот и гибнет от страха. "
    Леонардо Да Винчи
    gazik54Дата: Четверг, 09 Октября 2014, 21:31 | Сообщение # 6564
    был не раз
    Сейчас нет на сайте
    Проще говоря, я пишу пианино, если я напишу гет кей, то будет постоянно проигрываться звук, а мне надо, именно нажатие, но при отпускании, звук останавливается

    Добавлено (09.10.2014, 21:31)
    ---------------------------------------------
    Всё разобрался, в AudioSource надо скинуть звук, а потом уже можно реализовать в коде, дальше всё просто z.Play(); z.Stop();Спасибо WPhoeniXW хоть за какую то помощь)

    WPhoeniXWДата: Четверг, 09 Октября 2014, 21:51 | Сообщение # 6565
    участник
    Сейчас нет на сайте
    Да не за что, я же ничем не помог) Только вот теперь у меня вопрос к тебе, разве есть функции Play() и Stop() для конкретного объекта? Я сам тут попробовал и действительно останавливались все звуки, а нужно то конкретный. Скинь скрипт или идея в том что скрипт на разные объекты ?
    ------------------------------------------------------------------
    а не я тоже разобрался) сам себя запутал, простейшая же задача)))


    " Кто в страхе живет, тот и гибнет от страха. "
    Леонардо Да Винчи


    Сообщение отредактировал WPhoeniXW - Четверг, 09 Октября 2014, 21:57
    allodsДата: Четверг, 09 Октября 2014, 23:47 | Сообщение # 6566
    почти ветеран
    Сейчас нет на сайте
    Кто может помочь с UI scrоllbar? Как мне двигать UI картинки если нельзя изменять компоненты которые отвечают за координаты ?

    Добавлено (09.10.2014, 23:47)
    ---------------------------------------------
    ScrollRect вот оно

    kinoooshnikДата: Суббота, 11 Октября 2014, 00:10 | Сообщение # 6567
    почетный гость
    Сейчас нет на сайте
    Персонаж проходил через колайдер капсулы, но не должен. На самом персонаже также стоит капсульный колайдер. Не проходит только при условии, что на первого повешен Rigidbody. Но физика мне не нужна, так как это дерево. Если что, то персонаж передвигается с помощью transform.position. Помогите!
    MANMANAДата: Суббота, 11 Октября 2014, 20:54 | Сообщение # 6568
    почти ветеран
    Сейчас нет на сайте
    жаль, что у тебя дерево не является физическим объектом.
    а персонаж является физическим объектом? на персонаже ригидбади стоит? поставь, тогда при движении персонажа на объекты будет работать ригитбади персонажа.
    Ежели же у тебя дерево бежит (лестница, яблоко, ведро, танк падает) на персонажа, то поставь на него (дерево, ведро) ригидбади. Если не хочешь чтобы оно у тебя падало в разные стороны, то ограничь его осям через Constraints в инспекторе.
    Если работаешь без ригидбади, то проверяй столкновение коллайдеров и при их взаимодействии друг с другом работай через if и collider.isTrigger = true; , OnTriggerEnter, OnTriggerExit and OnTriggerStay в Scripting API и Manuals найдешь много полезного по этой теме.


    http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
    VKонтакте 3Dbuffer

    Последнее:

    Новый раздел "Текстуры"

    Как запатентовать, защитить техническое решение, игру, идею
    kinoooshnikДата: Суббота, 11 Октября 2014, 23:28 | Сообщение # 6569
    почетный гость
    Сейчас нет на сайте
    MANMANA, да, персонаж физ. объектом является. Если я ограничиваю дерево по всем осям(мне нужно, что бы оно вообще не двигалось), то персонаж начинает проходить через него. А про код я что-то совсем не подумал. Спасибо!
    MANMANAДата: Суббота, 11 Октября 2014, 23:53 | Сообщение # 6570
    почти ветеран
    Сейчас нет на сайте
    Персонаж должен остановиться около дерева по дефолту если: у персонажа есть ригидбади, и у дерева есть коллайдер. НО если у дерева или персонажа ОТКЛЮЧЕН коллайдер и/или ВЫБРАНА галка IsTrigger (не забывай, что эту галку, как и отключить коллайдер, можно в коде, это особенно незаметно, если код писал не сам/забыл, что написал, и не смотришь в редакторе не поменялась ли галка в процессе работы приложения), ТО персонаж будет проходить сквозь дерево. Возможен такой вариант в коде: если есть ригидбади на объекте - включать коллайдер, если нет - отключать.

    Поэкспериментируй на дефолтной сцене: создай два куба. Один размасштабируй по XZ (дай имя, например, CubeTerr), второй оставь дефолтным (дай имя, например, CubePlayer) и размести его над CubeTerr. Запускай. Куб должен упасть на плоскость, а не пройти сквозь нее.
    Ты можешь также отключить гравитацию у CubePlayer (зелененький кружок на рисунке) и создать скрипт*, повесив его на CubePlayer.
    * Скрипт
    Код
    public class move : MonoBehaviour {
             void Update () {
              transform.Translate(Vector3.down * Time.deltaTime);
             }
    }


    Ссылка на картинку (осторожно трафик): http://s1.uploadpics.ru/images/by_9FJr2V.jpg
    Сама картинка (осторожно трафик):


    http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
    VKонтакте 3Dbuffer

    Последнее:

    Новый раздел "Текстуры"

    Как запатентовать, защитить техническое решение, игру, идею


    Сообщение отредактировал MANMANA - Суббота, 11 Октября 2014, 23:56
    MR_BorgДата: Воскресенье, 12 Октября 2014, 00:04 | Сообщение # 6571
    участник
    Сейчас нет на сайте
    Всем привет, интересует вопрос по формированию массива через FindGameObjectsWithTag(), а конкретно как мне самому указать порядок заполнения.
    Допустим я создал 2 ГО, так же есть кнопки(список-зависит от ГО). 1- ГО_1, 2- ГО_2. Но, если я добавлю ГО_3, то кнопка вклинивается между 1 и 2. Как можно контролировать заполнение как мне надо?


    Изучаю C++ попутно пишу игру.
    MANMANAДата: Воскресенье, 12 Октября 2014, 03:26 | Сообщение # 6572
    почти ветеран
    Сейчас нет на сайте
    Сортировкой массива и/или отлавливанием инстанса объекта на сцене.
    В твоем случае неизвестно, в каком порядке FindGameObjectsWithTag() найдет элементы на сцене. Да в любом случае неизвестно, это зависит от положения объектов на сцене - т.е. откуда начинает алгоритм поиска объекта и кем заканчивает - сие невозможно предсказать.
    При добавлении нового элемента можешь прибавлять к его имени по 1, 01Obj, 02Obj и т.д., что будет соответствовать порядку добавления объектов на сцену. Перед выводом элементов на сцену можешь отсортировать элементы массива из FindGameObjectsWithTag() (например, respawns = GameObject.FindGameObjectsWithTag("Respawn");), вот respawns и сортируй. Только не каждый раз при появлении объекта сортировать массив - ресурсожратвенно получается. Можешь вместо массива, записывать объекты в хеш-таблицу (смотри ниже).
    Также можешь искать по одному объекту на сцене через myObject = GameObject.FindWithTag();, перед добавлением в свой массив объектов проверять, на какое место его поставить.

    Вывод элементов из массива происходит с 0 элемента и до последенго. Таким образом ОТСОРТИРОВАННЫЕ элементы в массиве будут выводить по порядку их появления на сцене.
    Также можешь после старта сцены найти все инстанциированные объекты, отсортировать их и добавить в свой List. Далее отслеживать каждый инстанциированный объект и добавлять его в конец Листа.
    Топик про List и как он работает на http://habrahabr.ru/post/128269/
    например:
    Код
    ArrayList<GameObject> myList = new ArrayList<GameObject>();//объявление массива игровых объектов      
    myList.add(myObject);//добавляем элемент в конец списка. данную строку можно ставить сразу после Instantiate(...);


    Можешь использовать хеш-таблицу, где ключом будет выступать номер "появления" твоего объекта на сцене. Т.е.е не нужно прибавлять ничего к имени, просто создаешь счетчик и каждый раз прибавляешь к нему 1, как только на сцене появляется новый объект.

    Можешь в качестве ключа для хеш-таблицы (или для сортировки в массиве) использовать время, прошедшее с момента создания игровой сцены до момента создания инстанса/экземпляра объекта.

    Ежели тебе известен начальный порядок определенного набора объектов (например, количество пустых мест в списке для игроков), ты можешь хранить их в List'е в необходимом тебе порядке. Как только будет создан новый объект, добавляй в Лист.

    Вместо Листа можешь использовать обычный массив, но тогда тебе необходимо знать его размер. т.е. создать массив в полной уверенности, что количество игроков не будет превышать 100 человек. Обычный массив работает намного БЫСТРЕЕ Листа (отличие в скорости пропорционально количеству элементу в массиве).
    Увеличивать размер обычного массива на лету довольно грустное дело, но если очень нужно, то можно, но не очень часто, поскольку при увеличении количества элементов массива, по сути, создается новый массив взамен старого, так что если уж количество игроков/объектов на сцене превысило 100, то спрогнозируй наперед, когда тебе придется увеличивать массив еще раз и насколько.
    Выбери оптимум между частотой увеличения элементов массива и количеством элементов, на которое увеличивать массив.
    ДЕЛО В ТОМ, что под обычный массив память выделяется СРАЗУ при создании массива из пустых элементов, в отличии от List'а.


    http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
    VKонтакте 3Dbuffer

    Последнее:

    Новый раздел "Текстуры"

    Как запатентовать, защитить техническое решение, игру, идею


    Сообщение отредактировал MANMANA - Воскресенье, 12 Октября 2014, 04:51
    Pe4enkaДата: Воскресенье, 12 Октября 2014, 19:09 | Сообщение # 6573
    почетный гость
    Сейчас нет на сайте
    Привет всем ! Начал изучать Photon , уже можно создать комнату и подключатся к ней. Вот вопрос , как сделать так что-бы при создании комнаты сцена выбиралась рандомно ? А клиент подключался к тому серверу где играет сервер ? Если что пишите в лс там напишу подробней. Или здеся.

    Бадабум!
    FroSTDSДата: Понедельник, 13 Октября 2014, 12:58 | Сообщение # 6574
    почетный гость
    Сейчас нет на сайте
    Привет! Делаю небольшую презентацию по 3д моделированию. Нужно показать как создаются персонажи: как моделируются, текстурируются, ригаются и т.п. Так же нужно показать их дальнейшее применение: анимация и видеоигры. Решил сделать это в юнити в виде платформера. Может кто поделиться качественной информацией в виде уроков или рассказов о создании платформера? Анимация будет играть особую роль, и картинка должны быть красивой. Все это правтически устроенно, теперь нужно все это передать под управление игрока, что бы без косяков. Нужно самому понять как все это работает и рассказать. От балды делать не хочется smile С кубиками уроки я не стал смотреть - надеюсь есть что то получше.
    MANMANAДата: Понедельник, 13 Октября 2014, 14:40 | Сообщение # 6575
    почти ветеран
    Сейчас нет на сайте
    в самом верху раздела http://gcup.ru/forum/59 смотрел?
    ну просто куча уроков в сети. не знаю, что посоветовать... сайт Unity3d.com


    http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
    VKонтакте 3Dbuffer

    Последнее:

    Новый раздел "Текстуры"

    Как запатентовать, защитить техническое решение, игру, идею
    Amigos466Дата: Четверг, 16 Октября 2014, 21:39 | Сообщение # 6576
    был не раз
    Сейчас нет на сайте
    Великие, помогите с 2d, делаю анимацию через меканим, контроль анимации на GetAxis, есть три состояния : стойка, бег лево-право. Хочу чтоб лево-право менялись мгновенно, но через них проскакивает стойка, я знаю что это связано с плавной сменой GetAxis от -1 до 1, но как решить проблему не знаю, помогите, уже неделю спать не могу.
    ArtanielДата: Четверг, 16 Октября 2014, 22:13 | Сообщение # 6577
    частый гость
    Сейчас нет на сайте
    Я б подпер костылем. Сделал бы отдельный управляющий скрипт. Он помнит состояние GetAxis в прошлом фрейме и отсылает контроллеру анимаций ноль, только если в прошлом фрейме на осях был ноль и в текущем ноль.

    Код
    private float LastAxisStatus = 0;

    void Update(){
        float CurrentAxisState = Input.GetAxis("Horizontal");//или какая там нужна ось
        if (CurrentAxisState<0){
          //отсылаем контроллеру анимации переменную чтобы бежал влево
        }else if (CurrentAxisState>0){
          //тоже самое вправо
        }else if (CurrentAxisState == 0 && LastAxisStatus  == 0){
          //говорим стать в стойку
        }
       LastAxisStatus  = CurrentAxisState;
    }


    Сообщение отредактировал Artaniel - Четверг, 16 Октября 2014, 22:15
    Amigos466Дата: Пятница, 17 Октября 2014, 00:46 | Сообщение # 6578
    был не раз
    Сейчас нет на сайте
    Спасибо за оперативный ответ, сейчас мозги сухи, завтра перемудрую в JS и буду пытаться)
    allodsДата: Суббота, 18 Октября 2014, 19:06 | Сообщение # 6579
    почти ветеран
    Сейчас нет на сайте
    Помогите с CharacterController

    Измеряю скорость передвижения таким образом

    CharacterController controller = GetComponent<CharacterController>();

    float overallSpeed = controller.velocity.magnitude;

    Все норм но когда пациент останавливается скорость не обновляется, то есть показывает скорость до остановления вместо 0.

    В чем проблема ?
    MANMANAДата: Суббота, 18 Октября 2014, 19:28 | Сообщение # 6580
    почти ветеран
    Сейчас нет на сайте
    Известная фича.
    Если бы ты в стенку врезался и остановился, то скорость была бы = 0.
    А при самостоятельной остановке скорость будет равна разнице с последнего вызова CharacterController.Move или CharacterController.SimpleMove.
    http://forum.unity3d.com/threads....r.71153

    Код из ответа Ricks

    Код
    // Use this for initialization
         void Start () {
             c = GameObject.Find("Player").GetComponent<CharacterController>();
             target = GameObject.Find("Target").transform;
             
             current_pos = transform.position;
             last_pos = transform.position;
         }
         
         // Update is called once per frame
         void Update () {
             if(Vector3.Distance(target.position,transform.position)>4)
             {
                 modifiedTarget = target.position;
                 modifiedTarget.y = 1;
                 
                 Vector3 relativePos = modifiedTarget - transform.position;
                 Quaternion rotation = Quaternion.LookRotation(relativePos);
                 transform.rotation = rotation;
                 
                 Vector3 forward = transform.forward;
                 c.SimpleMove(forward * 5);
             }
             
             // this is the important part
             current_pos = transform.position;
             float speed = (current_pos - last_pos).magnitude/Time.deltaTime;
             print(speed);
             last_pos = current_pos;
         }
    }


    http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
    VKонтакте 3Dbuffer

    Последнее:

    Новый раздел "Текстуры"

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

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