Суббота, 16 Ноября 2024, 02:56

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

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

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

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

    Сообщение отредактировал QWER56 - Вторник, 26 Июля 2011, 20:54
  • MyACTДата: Воскресенье, 15 Апреля 2012, 07:00 | Сообщение # 1901
    C# CODERS
    Сейчас нет на сайте
    pixeye, можешь объяснить мне как включать WaitForSecond в коде для отнятия переменной:
    Code

    void Update () {
       if(Input.GetMouseButton(0))
       {  
      yield WaitForSeconds(1.0);   
      Ammo-=1;
    }

    Но он не хочет так действовать,объясни что добавить smile


    3дэшечки: https://sketchfab.com/myactyindie
    Курентли воркс он: https://myacty.itch.io/raskopnik
    pixeyeДата: Воскресенье, 15 Апреля 2012, 12:00 | Сообщение # 1902
    Red Winter Software
    Сейчас нет на сайте
    Quote (MyACT)
    Но он не хочет так действовать,объясни что добавить


    Это связано с тем, что нельзя в Update сувать yield. Тебе нужно это делать через сопрограммы. Вообще по хорошему надо отучаться писать в Update - а делать все через сопрограммы.

    Как эт овыглядит.

    Code
    IEnumerator CountAmmo(){

    while(true){

    if(Input.GetMouseButton(0))
    {
    yield return new WaitForSeconds(1.0);
    Ammo-=1;
    }

    yield return 0;
    }

    }


    Теперь обращаешься так

    Code
    void Start() {

    StartCoroutine(CountAmmo());

    }

    Добавлено (15.04.2012, 12:00)
    ---------------------------------------------

    Quote (mrResident)
    1) Назначение параметра distance в GetLinePoint. Не могу понять как и где можно использовать GetLinePoint.


    Поиск точки по длине отрезка, насколько мне известно. Я этим непользовался. В любом случае это позволяет выявлять отдельно взятые точки отрезков, а GetLineLength - величину длины.

    Quote (mrResident)
    2) Хочу сделать такую вещь, при наведении курсора на один из сегментов линии (например 3 точки, 2 линии) подкрасить линию на котором находиться курсор другим цветом. Как это можно сделать?

    Первое что нужно сделать, это добавить коллайдеры к твоим отрезкам.

    Это выглядит так

    Code
    line.vectorObject.AddComponent<MeshCollider>();
    line.vectorObject.GetComponent<MeshCollider> ().isTrigger = true;


    Что у нас тут - line, это уже созданная линия - .vectorObject - это игровой объект линии. Тут следует понимать что надо чертить "3d линии" - они являются игровыми объектами и с ними можно взаимодействоваться.
    .AddComponent<MeshCollider>(); - добавляем мешколайдер
    line.vectorObject.GetComponent<MeshCollider> ().isTrigger = true; - делаем его тригером, чтобы взаимодействовать только с мышкой.

    Дальше дело техники;-) можно хоть как кнопку использовать.
    Однако у нас задача по сложнее. Я ее не решал, однако пару мыслей есть.

    Первое,
    VectorLine line = new VectorLine ("Line", linePoints, cols[globalScript.use.levelMode], lineMaterial, 10f, LineType.Continuous, Joins.Weld); когда ты объявляешь линию выставляй на LineType.Discrete - это будут тогда рванные не соединенные отрезки.

    Сохраняй свои отрезки в массив. Каждому новому созданному отрезку приписывай id, (это нужно для индекса в массиве линий ) , каждый раз когда жмешь линию, вытаскивай айдишник линии и по нему линию из массива и меняй ей цвет.

    Как линии присвоить айдишник или вообще код.

    Создаешь скрипт.

    Code
    public class lineHandler : MonoBehaviour {
    public int selfID;
    }


    Теперь добавляешь его как и коллайдер
    line.vectorObject.AddComponent<lineHandler>();

    Все это пособие к действию и общий ход работ. Я бы начал с такого варианта. Если возникнут более конкретные вопросы по ходу этого сценария попробую ответить.

    1. Создавать массивы линий присваивая им коллайдер и скрипт, прописывая индекс
    2. Обработка нажатия мыши по линии и вытаскивания индекса
    3. Обращение в массиве по индексу и смене цвета.

    Сразу предостерегаю вопрос о том, а что будет если линию удалить.
    Чтож в таком случае тебе нужен List линий а не просто массив, и нужно позаботится о том, чтобы линии своевременно меняли свой индекс в случае изменений, либо по новой им все прописывать.


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



    Сообщение отредактировал pixeye - Воскресенье, 15 Апреля 2012, 11:31
    MyACTДата: Воскресенье, 15 Апреля 2012, 14:44 | Сообщение # 1903
    C# CODERS
    Сейчас нет на сайте
    pixeye, у меня он не понимает команды WaitForSecond()

    3дэшечки: https://sketchfab.com/myactyindie
    Курентли воркс он: https://myacty.itch.io/raskopnik
    Nekit_AutДата: Воскресенье, 15 Апреля 2012, 15:52 | Сообщение # 1904
    The Dizziness - Man
    Сейчас нет на сайте
    Кто-нибудь знает, как сделать сохранение игры игроком. То есть в любой момент залез в меню и сохранил её. А потом можно было загрузить.

    pixeyeДата: Воскресенье, 15 Апреля 2012, 16:58 | Сообщение # 1905
    Red Winter Software
    Сейчас нет на сайте
    Quote (MyACT)
    pixeye, у меня он не понимает команды WaitForSecond()


    Все он понимает.

    yield return new WaitForSeconds(0.1f); я забыл в примере после значения f добавить .

    Так же yield будет работать только в Итераторе (IEnumerator) а не обычном методе void

    IEnumerator CountAmmo(){
    while(true){
    if(Input.GetMouseButton(0))
    {
    yield return new WaitForSeconds(1.0f);
    Ammo-=1;
    }
    yield return 0;
    }
    }

    И обязательно вызывать такие функции через StartCoroutine(CountAmmo());

    Добавлено (15.04.2012, 16:58)
    ---------------------------------------------

    Quote (Nekit_Aut)
    Кто-нибудь знает, как сделать сохранение игры игроком. То есть в любой момент залез в меню и сохранил её. А потом можно было загрузить.


    знает. Впринципе моего плохого настроения должно хватит чтобы сказать что я ответил на твой вопрос;-) Но мне кажется правильнее было бы спросить как сделать?')

    Способов много и строго зависит от типа игры.

    В самом базовом случае хватит преференсов.

    PlayerPrefs.SetInt("score", 0);
    PlayerPrefs.GetInt("score");

    Это самый простой метод, не очень эффективный и не позволяет сохранять многие значения такие как вектор или булево значение например. (Хотя есть скрипты которые позволяют это делать).
    Другой вариант это xml документы.


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

    MyACTДата: Воскресенье, 15 Апреля 2012, 17:21 | Сообщение # 1906
    C# CODERS
    Сейчас нет на сайте
    pixeye, я уже с проблемой разобрался,но все равно спасибо smile

    3дэшечки: https://sketchfab.com/myactyindie
    Курентли воркс он: https://myacty.itch.io/raskopnik
    Nekit_AutДата: Воскресенье, 15 Апреля 2012, 17:31 | Сообщение # 1907
    The Dizziness - Man
    Сейчас нет на сайте
    Quote (pixeye)
    Это самый простой метод, не очень эффективный и не позволяет сохранять многие значения такие как вектор или булево значение например. (Хотя есть скрипты которые позволяют это делать).
    Другой вариант это xml документы.

    Хммм... Мне кажется, что через PlayerPrefs не получиться сделать нормальное сохранение (ведь там можно сохранять только числа и строки), а хмл я просто не умею создавать (а точнее - пользоваться).


    pixeyeДата: Воскресенье, 15 Апреля 2012, 17:36 | Сообщение # 1908
    Red Winter Software
    Сейчас нет на сайте
    Если знаешь английский
    http://unitynoobs.blogspot.com/2011/02/xml-loading-data-from-xml-file.html - читай здесь.

    Если нет, то постараюсь в ближайшие дни составить тутор, это не на один короткий ответ вопрос увы(.


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

    Nekit_AutДата: Воскресенье, 15 Апреля 2012, 17:38 | Сообщение # 1909
    The Dizziness - Man
    Сейчас нет на сайте
    Quote (pixeye)
    Если нет, то постараюсь в ближайшие дни составить тутор, это не на один короткий ответ вопрос увы(.

    Буду очень благодарен) Так как с английским очень туго...


    mrResidentДата: Воскресенье, 15 Апреля 2012, 17:53 | Сообщение # 1910
    постоянный участник
    Сейчас нет на сайте
    pixeye, огромное спасибо за выбор направления "куда копать дальше" :), лови за это +. Вопросы конечно будут еще smile

    Укроп головного мозга - болезнь тяжелая, но излечимая!
    andarkyДата: Понедельник, 16 Апреля 2012, 11:34 | Сообщение # 1911
    старожил
    Сейчас нет на сайте
    почему в Unity 3.5.1 не работает то что работало в версии 3.4 ?

    мне надо всего лишь изменить переменную в скрипте другого объекта:

    Code
    var eo=GameObject.Find("fp").GetComponent("oro");
    eo.cv=xn;


    oro.js:
    Code
    var cv:float=0;

    function Update () {
    transform.Rotate(0,cv,0);
    }


    почему?



    Моя страничка по дизайну
    GameDev//Design//3D
    Ютубчик
    seamanДата: Понедельник, 16 Апреля 2012, 13:26 | Сообщение # 1912
    старожил
    Сейчас нет на сайте
    Что значит "не работает"?
    Предположу.
    GetComponent - возвращает "Component". Он не содержит Ваших переменных. Нужно приведение типов:
    Code
    var eo=GameObject.Find("fp").GetComponent("oro") as oro;
    eo.cv=xn;

    PS^ Если раньше работало - значит сделали более четкий контроль типов, что имхо правильно. В C# подобный код никогда не работал.
    andarkyДата: Понедельник, 16 Апреля 2012, 13:39 | Сообщение # 1913
    старожил
    Сейчас нет на сайте
    seaman,
    возможно надо указать...

    я обычно никак не указывал тип, сразу писал:
    Code

    var XX=0;

    function Update()
    {
    var oo=GameObject.Find("fp");
    ....
    }

    ну и т.д.
    в 3.4. все работало, проекты сдал давно - возврата не было



    Моя страничка по дизайну
    GameDev//Design//3D
    Ютубчик
    seamanДата: Понедельник, 16 Апреля 2012, 13:49 | Сообщение # 1914
    старожил
    Сейчас нет на сайте
    Это
    Code
    var oo=GameObject.Find("fp");

    и это
    Code
    var eo=GameObject.Find("fp").GetComponent("oro");

    разные вещи.
    GameObject он и в Африке GameObject. А вот от Component наследуются все скрипты. И у них обязательно нужно указывать верный тип - не просто Component, а oro.
    Quote
    возможно надо указать...

    Вы попробовали, как я написал?
    ЗЫ: чтобы было проще тем, кто хочет помочь - все же приводите какую ошибку пишет. Не хочется гадать на кофейной гуще.


    Сообщение отредактировал seaman - Понедельник, 16 Апреля 2012, 13:52
    andarkyДата: Понедельник, 16 Апреля 2012, 14:01 | Сообщение # 1915
    старожил
    Сейчас нет на сайте
    я пока тупо через промежуточные объекты сделал,
    но это временно,
    буду теперь везде тип писать и переписывать как положено.




    Моя страничка по дизайну
    GameDev//Design//3D
    Ютубчик
    pixeyeДата: Понедельник, 16 Апреля 2012, 14:09 | Сообщение # 1916
    Red Winter Software
    Сейчас нет на сайте
    Quote (andarky)
    так JS стремится стать таким же строгим ка C#...

    Quote (andarky)
    почему в Unity 3.5.1 не работает то что работало в версии 3.4 ?


    Потому что читать надо ченджлоги. Давно уже было сказано, что теперь US в юнити по умолчанию работает с строгой типизацией данных - так как это единственный способ на US писать игры на айфоны и андроиды.

    Так что да, такого безобразия как ты делал больше не будет.


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

    BazketДата: Понедельник, 16 Апреля 2012, 14:58 | Сообщение # 1917
    участник
    Сейчас нет на сайте
    как сделать таймер? при старте уровня запускаем таймер с 0:00 и выводим его вверху экрана. нуб вообще в юнити

    Требуется художник, для рисования множества вещей, персонажей и прочего. Оплата приветствуется.
    ViskonteДата: Понедельник, 16 Апреля 2012, 15:57 | Сообщение # 1918
    частый гость
    Сейчас нет на сайте
    Подскажите, интересует создание видео роликов на движке юнити. Допустим я создал 3д модель со скелетом в blender, экспортировал ее в юнити, что дальше? Как строится анимация моделей в юнити и можно ли после создания сцены с анимацией сохранить ее в видео формате? Конечно, все это проще создать в самом blender, но все же интересует unity.
    PingwinofДата: Понедельник, 16 Апреля 2012, 19:18 | Сообщение # 1919
    почетный гость
    Сейчас нет на сайте
    Ребят, как мне сделать так, что бы платформа1 двигалась от платформы2 к платформе3 и обратно?
    Ответы в ЛС


    все нах больше с игроделом даже связываться не буду! пошло оно все в ЖОПУ!!!!!!
    Nekit_AutДата: Понедельник, 16 Апреля 2012, 20:02 | Сообщение # 1920
    The Dizziness - Man
    Сейчас нет на сайте
    Bazket, Юзай числовые переменные и Time.deltaTime;
    Viskonte, Window => Animation и записывай. А воспроизводи через скрипт.
    Pingwinof, Почему ж ток в ЛС? Тут не один способ. Можно сделать старыми-добрыми вейпоинтами. Можно перемещением позиции через Translate(); а можно прибавлять позицию... Как тебе удобнее?


    Поиск:

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