Четверг, 26 Декабря 2024, 19:53

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

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

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

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

    Сообщение отредактировал QWER56 - Вторник, 26 Июля 2011, 20:54
  • allodsДата: Суббота, 30 Августа 2014, 14:48 | Сообщение # 6461
    почти ветеран
    Сейчас нет на сайте
    помогите плиз занести ники игроков в SelectionGrid

    Код
    foreach (PhotonPlayer playersInRoom in PhotonNetwork.playerList)    
           {
            /*if(GUILayout.Button(playersInRoom.name))
            {
               
            }*/
           }
           playerSelect = GUILayout.SelectionGrid(playerSelect, playersNames, 1);///////////выбор  игрока


    Раньше это было кнопкой, но мне понадобилось сделать SelectionGrid с никами.

    Пытался по разному замутить. Пытался их добавить в Лист а потом в SelectionGrid через for i

    Можно ли это вообще сделать ?

    Добавлено (30.08.2014, 14:48)
    ---------------------------------------------
    Кто может подсказать

    как проверить все переменные в массиве и если все переменные true то едем дальше?

    У меня есть bool список, при нажатии на кнопку если все переменные true в списке то загружаем уровень . Вроде просто, но я не помню как делал


    Сообщение отредактировал allods - Суббота, 30 Августа 2014, 14:48
    GantZ_YakaДата: Суббота, 30 Августа 2014, 16:27 | Сообщение # 6462
    почетный гость
    Сейчас нет на сайте
    Цитата allods ()
    как проверить все переменные в массиве и если все переменные true то едем дальше?

    Код
    bool ok = true;
    foreach (bool a in List)
    {
         if (!a) ok = false;
    }

    if (ok) ...


    так еще можно:
    if (!list.Contains(false)) // если список не содержит false


    Сообщение отредактировал GantZ_Yaka - Суббота, 30 Августа 2014, 16:38
    allodsДата: Суббота, 30 Августа 2014, 19:31 | Сообщение # 6463
    почти ветеран
    Сейчас нет на сайте
    Блин не выходит не фига .
    Получаю переменную у каждого игрока bool , если у всех true то грузим уровень .

    Код
    for(p=0;p<playersInRoom.Length;p++)
            {

             ArrayList trueGO = new ArrayList();
             trueGO.Add((bool)playersInRoom[p].customProperties["rdy"]);
             if(!trueGO.Contains(false))
             {
              load=true;
              Hashtable someCustomPropertiesToSet = new Hashtable() {{"load", load}};
              playersInRoom[p].SetCustomProperties(someCustomPropertiesToSet);
             }
            }


    По разному пробовал. Грузит у тех у кого true забив на тех у кого false.


    Сообщение отредактировал allods - Суббота, 30 Августа 2014, 19:33
    GantZ_YakaДата: Суббота, 30 Августа 2014, 20:23 | Сообщение # 6464
    почетный гость
    Сейчас нет на сайте
    Значит ошибка где-то... через debug ищи smile
    После вот этого: trueGO.Add((bool)playersInRoom[p].customProperties["rdy"]);
    можно написать foreach bool вывестии в дебаг значение, и посмотреть в консоле, что там за список получется trueGO для каждого игрока.
    allodsДата: Суббота, 30 Августа 2014, 21:13 | Сообщение # 6465
    почти ветеран
    Сейчас нет на сайте
    выводит все правильно 1 true и 1 false если два игрока.
    И запускает только у того у кого true cry
    MANMANAДата: Суббота, 30 Августа 2014, 23:55 | Сообщение # 6466
    почти ветеран
    Сейчас нет на сайте
    }//
    Цитата allods ()
    И запускает только у того у кого true

    и правильно делает:
    "ArrayUtility.Contains
    Determines if the array contains the item."
    Итого:

    if(!trueGO.Contains(false)) //если элемент массива != "false" (т.е. он равен "true"), то для него выполняем следующий код (по сути код будет выполнен для каждого элемента массива, который = true):
    {
    //твой код
    }

    итого - грузим только тех, кто true

    вот код для демонстрации работы Contains:

    Код
    using UnityEngine;
    using System.Collections;

    public class myContains : MonoBehaviour {
         public string[]   playersInRoom = {"Петя", "Миша", "Петро", "Василь", "Монстр", "Зомби", "ХСГ", "ДД", "ПолныйП"};
         public bool vari;
         // Use this for initialization
         void Start () {
          for (int p=0; p<playersInRoom.Length; p++)
          {
           ArrayList trueGO = new ArrayList();     
           if (Random.Range (0,10)>5)
           {
            vari = true;
           } else vari = false;
           trueGO.Add(vari);     
           if(!trueGO.Contains(false))     
           {     
            print(p+"ЛОЖЬ!");
           } else print(p+"ИСТИННО ТАК!");
          }
         }     
    }


    результатом будет
    1ИСТИННО ТАК
    2ИСТИННО ТАК
    3ЛОЖЬ!
    и т.д., в зависимости от Random.Range...

    так что нужно делать через перебор foreach(), как предложил в первый раз GantZ_Yaka

    перебираешь весь массив через foreach()

    bool ok = true; //true значит то, что в массиве нет ни одного false
    foreach (bool a in List)
    {
    if (!a) ok = false; //в массиве попался хоть один элемент false, то смотри по проверке if(ok)
    }

    if (ok) //если в массиве нет ни одного элемента false, то
    {
    //тут грузи все элементы из массива игроков playersInRoom, или устанавливай для них проперти, как ты делал в свое коде. Cоответственно, не забывай для всех элементов массива это сделать
    ...
    }

    как-то так

    Код
    for(p=0;p<playersInRoom.Length;p++)   
              {   

               ArrayList trueGO = new ArrayList();   
               trueGO.Add((bool)playersInRoom[p].customProperties["rdy"]);   
              }

    foreach (bool a in trueGO)   
    {   
           if (!a) load = false;   
    }   

    if (load) {
        if (int i=0; i<playersInRoom.Length; i++)
        {
                Hashtable someCustomPropertiesToSet = new Hashtable() {{"load", load}}; //за эти две строки не скажу, т.к. не знаю, чего ты здесь добиваешься : )
                playersInRoom[i].SetCustomProperties(someCustomPropertiesToSet); //
        }
    }


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

    Последнее:

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

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


    Сообщение отредактировал MANMANA - Воскресенье, 31 Августа 2014, 00:06
    allodsДата: Понедельник, 01 Сентября 2014, 06:25 | Сообщение # 6467
    почти ветеран
    Сейчас нет на сайте
    Теперь как только хоть один игрок rdy то у всех сразу грузит уровень .

    Код
    playersInRoom=PhotonNetwork.playerList;
          for(p=0;p<playersInRoom.Length;p++)     
          {     
           ArrayList trueGO = new ArrayList();     
           trueGO.Add((bool)playersInRoom[p].customProperties["rdy"]);   
           load=true;
           foreach (bool a in trueGO)     
           {     
            if (!a) load = false;    
           }
          }     
          if (load)   
          {   
           for (i=0;i<playersInRoom.Length;i++)   
           {   
            if(creator)
            {
             Hashtable someCustomPropertiesToSet = new Hashtable() {{"load", true}};
             playersInRoom[i].SetCustomProperties(someCustomPropertiesToSet);   
            }
           }   
          }

    Добавлено (01.09.2014, 06:25)
    ---------------------------------------------
    не все работает, все ок все норм biggrin Спасибо

    Сообщение отредактировал allods - Воскресенье, 31 Августа 2014, 08:38
    kinoooshnikДата: Понедельник, 01 Сентября 2014, 10:51 | Сообщение # 6468
    почетный гость
    Сейчас нет на сайте
    Привет!
    У меня вопрос, можно ли сделать в коде что то похожее на это:
    Код
    void Update(){
    if(z == false){
            void OnMouseDown(){
            n = 1;
    }
    }
    }

    ???
    NEBRДата: Понедельник, 01 Сентября 2014, 13:30 | Сообщение # 6469
    почти ветеран
    Сейчас нет на сайте
    OnMouseDown() по моему вызывается только по клику мышкой на объект с коллайдером, сомневаюсь что можно его вызвать таким способом. Опиши что нужно

    King Size #Gamiron12

    Сообщение отредактировал NEBR - Понедельник, 01 Сентября 2014, 13:32
    GeorgeThreeD2Дата: Понедельник, 01 Сентября 2014, 13:33 | Сообщение # 6470
    частый гость
    Сейчас нет на сайте
    kinoooshnik, Ну да, просто поменять местами и немного изменить:
    Код


    void Update()
    {
           if(Input.GetMouseButtonDown(0) && !z)
           {
               n=1;
           }
    }



    А если нужно выполнение по нажатии мышкой на объекте, тогда не нужен Update...
    Код

    void OnMouseDown()
    {
           if(!z)
           {
               n=1;
           }
    }

    А если хочешь чтобы повторялось при условии, что мышка наведена и нажата, и при этом все было в update, тогда посылай луч в позицию мыши, проверяй пересечение и по примеру выше выставляй условия и действия в update


    Сообщение отредактировал GeorgeThreeD2 - Понедельник, 01 Сентября 2014, 13:38
    kinoooshnikДата: Понедельник, 01 Сентября 2014, 21:49 | Сообщение # 6471
    почетный гость
    Сейчас нет на сайте
    GeorgeThreeD2, второй способ помог, спасибо!
    DantorSДата: Вторник, 02 Сентября 2014, 00:28 | Сообщение # 6472
    заслуженный участник
    Сейчас нет на сайте
    1. Если у меня есть гг, как определить на сколько он повернулся по оси x от изначальной позиции (t-pose)?
    2. Как получить значение от 0 до 360 градусов?
    3. Если у меня есть анимированный объект и пустить от него рэйкаст, как можно этот рэйкаст сделать "независимым"? Т.е. чтоб он не вращался вместе с объектом.
    error111Дата: Вторник, 02 Сентября 2014, 05:15 | Сообщение # 6473
    заслуженный участник
    Сейчас нет на сайте
    Ребят, где-то натыкался на ссылку на сайт на который можно быстро выложить web-версии своих проектов в разработке чтобы поделиться с общественностью и получить фидбек. Никто не поможет вспомнить? Сайт - не Woogli.

    [Shmup/RPG] Fantasy Shmup!
    allodsДата: Вторник, 02 Сентября 2014, 07:08 | Сообщение # 6474
    почти ветеран
    Сейчас нет на сайте
    DantorS,

    1- Mathf.DeltaAngle

    2- Transform.eulerAngles

    3- Пускать этот рейкаст из точки которая не в чилдрен , но с кодом меняет позицию
    IlyaGolubtsovДата: Вторник, 02 Сентября 2014, 11:18 | Сообщение # 6475
    был не раз
    Сейчас нет на сайте
    Подскажите пожалуйста какая будет ссылка на volume из AudioManager-а для скрипта?
    NEBRДата: Вторник, 02 Сентября 2014, 11:22 | Сообщение # 6476
    почти ветеран
    Сейчас нет на сайте
    IlyaGolubtsov,

    AudioSource имеет свойство volume.
    Обращаться к нему можно так

    Код
    public AudioSource as;

    void ChangeVolume()
    {
    as.volume = 0.5f;
    }


    King Size #Gamiron12
    IlyaGolubtsovДата: Вторник, 02 Сентября 2014, 11:26 | Сообщение # 6477
    был не раз
    Сейчас нет на сайте
    а как это на яве будет?так же?У меня уже просто весь проект на нём,переписывать проблематично
    NEBRДата: Вторник, 02 Сентября 2014, 11:56 | Сообщение # 6478
    почти ветеран
    Сейчас нет на сайте
    IlyaGolubtsov, вроде так будет

    Код
    AudioSource as;  

    function ChangeVolume()  
    {  
    as.volume = 0.5f;  
    }


    King Size #Gamiron12
    DantorSДата: Вторник, 02 Сентября 2014, 12:54 | Сообщение # 6479
    заслуженный участник
    Сейчас нет на сайте
    allods, спсаибо, с меня +.
    По поводу 3 вопроса.
    Цитата DantorS ()
    3. Если у меня есть анимированный объект и пустить от него рэйкаст, как можно этот рэйкаст сделать "независимым"? Т.е. чтоб он не вращался вместе с объектом.

    Забыл добавить, что этот рэйкаст должен перемещаться с объектом, но не должен поворачиваться. Т.е просто тотвязать от объекта не получится. Вопрос всё тот же.
    allodsДата: Вторник, 02 Сентября 2014, 14:53 | Сообщение # 6480
    почти ветеран
    Сейчас нет на сайте
    DantorS, Получится , можно перемещать его за объектом

    к примеру objForRay.transform.position = transform.position
    Поиск:

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