Суббота, 28 Декабря 2024, 17:37

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

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

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

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

    Сообщение отредактировал QWER56 - Вторник, 26 Июля 2011, 20:54
  • allodsДата: Понедельник, 18 Апреля 2016, 16:17 | Сообщение # 7761
    почти ветеран
    Сейчас нет на сайте
    Ребят, есть проблема с рендерингом.
    Есть плашка с любым полупрозрачным шейдером, над ней другая тоже с любым полупрозрачным шейдером шейдером.(партикл шейдеры, транспарент всякие, спрайт шейдер не важно)
    Проблема в том что когда та плашка что выше находится с лева на экране (левее центра) то она становится темнее как если бы она рендерилась за той что с низу, а когда правее то светлее как еслибы она рендерилась по верху той что с низу. Менял высоту плашки что выше разницы нету. Кто скажет что за херня

    ладно, уже сделал по другому


    Сообщение отредактировал allods - Понедельник, 18 Апреля 2016, 17:07
    nik3122Дата: Понедельник, 18 Апреля 2016, 19:45 | Сообщение # 7762
    почетный гость
    Сейчас нет на сайте
    Есть скрипт при нажатии на кнопку T свет через секунду включатся и выключаться, но проблема в том что свет моргает не так как нужно.
    Код

    using UnityEngine;
    using System.Collections;

    public class BLight : MonoBehaviour {
        public Light Test;
        public bool TTT;

    void Update () {
      if (Input.GetKey (KeyCode.T)) {
       TTT = !TTT;
    }
        StartCoroutine(Test4());    
        }
        IEnumerator Test4(){
      if (TTT) {
       while (true) {
           yield return new WaitForSeconds (1f);
           Test.enabled = false;
           yield return new WaitForSeconds (1f);
           Test.enabled = true;
       }
    }
    }
    }


    Проект друзей: Lost World Online – хардкорная многопользовательская онлайн-игра по мотивам книги братьев Стругацких "Пикник на Обочине".

    Сообщение отредактировал nik3122 - Понедельник, 18 Апреля 2016, 19:47
    LertmindДата: Понедельник, 18 Апреля 2016, 20:31 | Сообщение # 7763
    заслуженный участник
    Сейчас нет на сайте
    nik3122, естественно, ты каждый Update() запускаешь корутину и их становится несколько. Вот так можно написать:
    Код
    using UnityEngine;
    using System.Collections;

    public class BLight : MonoBehaviour
    {
        public Light Test;
        public bool isRunning;

        void Update()
        {
            if (Input.GetKeyDown(KeyCode.T))
            {
                isRunning = !isRunning;
                if (isRunning)
                {
                    StartCoroutine(Test4());
                }
            }
        }

        IEnumerator Test4()
        {
            while (true)
            {
                yield return new WaitForSeconds(1f);
                if (!isRunning)
                    break;
                Test.enabled = !Test.enabled;
            }
        }
    }

    При нажатии на T через секунду меняется состояние, если нажать ещё раз, то состояние остаётся.
    nik3122Дата: Понедельник, 18 Апреля 2016, 20:36 | Сообщение # 7764
    почетный гость
    Сейчас нет на сайте
    Lertmind, Большое спасибо smile

    Проект друзей: Lost World Online – хардкорная многопользовательская онлайн-игра по мотивам книги братьев Стругацких "Пикник на Обочине".
    LertmindДата: Понедельник, 18 Апреля 2016, 20:51 | Сообщение # 7765
    заслуженный участник
    Сейчас нет на сайте
    nik3122, сделал поправку в коде, иначе при быстром нажатии кнопки будут запускаться несколько корутин:
    Код
    using UnityEngine;
    using System.Collections;

    public class BLight : MonoBehaviour
    {
        public Light Test;
        public bool isRunning;
        private Coroutine current;

        void Update()
        {
            if (Input.GetKeyDown(KeyCode.T))
            {
                isRunning = !isRunning;
                if (isRunning)
                {
                    current = StartCoroutine(Test4());
                }
                else if (current != null)
                {
                    StopCoroutine(current);
                }
            }
        }

        IEnumerator Test4()
        {
            while (true)
            {
                yield return new WaitForSeconds(1f);
                Test.enabled = !Test.enabled;
            }
        }
    }

    Получилось как-то не очень, но работает.

    Добавлено (18 апреля 2016, 20:51)
    ---------------------------------------------
    Там выше сделал последнюю правку, чтобы корутин не зависел от isRunning, так лучше.


    Сообщение отредактировал Lertmind - Понедельник, 18 Апреля 2016, 20:51
    БозингарДата: Суббота, 23 Апреля 2016, 22:40 | Сообщение # 7766
    почетный гость
    Сейчас нет на сайте
    А можно как-нибудь двигать объект по координатам, не прибегая к точкам пути? Например, высчитываю координаты объекта, по ним задаю новые - и объект движется (при помощи физики) к новым координатам?

    #Хийвэл бүү ай, айвал бүү хий.
    LertmindДата: Суббота, 23 Апреля 2016, 23:19 | Сообщение # 7767
    заслуженный участник
    Сейчас нет на сайте
    Бозингар, стоит объяснить подробней. Координаты это и есть точки пути, или ты хочешь поиск пути между препятствиями?
    EchoITДата: Суббота, 23 Апреля 2016, 23:20 | Сообщение # 7768
    старожил
    Сейчас нет на сайте
    Бозингар, эм, new Vector3(x,y,z)?

    Долгожданный анонсик: State of War
    8Observer8Дата: Воскресенье, 24 Апреля 2016, 00:06 | Сообщение # 7769
    заслуженный участник
    Сейчас нет на сайте
    Бозингар, если нужен поиск пути, то я могу кинуть реализацию алгоритма поиска пути A*:



    Сообщение отредактировал 8Observer8 - Воскресенье, 24 Апреля 2016, 00:07
    sirtooДата: Вторник, 26 Апреля 2016, 16:23 | Сообщение # 7770
    был не раз
    Сейчас нет на сайте
    Помогите нубу.

    Как настроить "MonoDevelop-Unity" что в нем работало "IntelliSense", то есть подсказки предопределенных методов, например после "Input.", в js.

    В VisualStudio все еще мрачнее, он выделяет как ошибку такое определение переменных например:

    "var build : Transform;"

    P.S. Примеры взяты с видеокурса Часть 1 - Туториал Unity3D


    Сообщение отредактировал sirtoo - Вторник, 26 Апреля 2016, 16:33
    8Observer8Дата: Вторник, 26 Апреля 2016, 16:31 | Сообщение # 7771
    заслуженный участник
    Сейчас нет на сайте
    Цитата sirtoo ()
    Примеры взяты с видеокурса Часть 1 - Туториал Unity3D

    Там написано, что видео не существует
    sirtooДата: Вторник, 26 Апреля 2016, 16:32 | Сообщение # 7772
    был не раз
    Сейчас нет на сайте
    Руководство UnityСкриптинг Инструменты Скриптинга MonoDevelop

    мне не помогло, а хотелось бы, что все работало как у человека в видео курсе.

    Добавлено (26 апреля 2016, 16:32)
    ---------------------------------------------
    Цитата 8Observer8 ()
    Там написано, что видео не существует


    вот https://www.youtube.com/watch?v=T78_si40uhI


    Сообщение отредактировал sirtoo - Вторник, 26 Апреля 2016, 16:34
    LertmindДата: Вторник, 26 Апреля 2016, 17:08 | Сообщение # 7773
    заслуженный участник
    Сейчас нет на сайте
    sirtoo, я погуглил, в Unity 5.3 удалили поддержку автодополнения кода для JS http://answers.unity3d.com/questio....ng.html.
    Мой совет - не используй JS, пиши на C#, тут так принято, а JS для отщепенцев. Но если ты не хочешь следовать разумным советам, то есть способ в установки дополнительно старой версии Unity, чтобы использовать прошлую версию MonoDevelop:
    В Unity 5.3 перешли на MonoDevelop 5, так что тебе надо установить старую версию, например Unity 5.2.4, для этого выбираешь другую папку для установки, например C:\Program Files\Unity524\, потом в новой версии Unity в меню Edit > Preferences > External Tools > External Script Editor ставишь "MonoDevelop (built-in)" на "Browse...", где вручную выбираешь папку до старого MonoDevelop, т. е. C:\Program Files\Unity524\MonoDevelop\bin\MonoDevelop.exe и отмечаешь опцию "Add .unityproj's to .snl". Теперь будет открываться старый MonoDevelop 4 с автодополнением. Ещё возможно потребуется удалить сгенерированные файлы в проекте - удаляешь всё кроме Assets и ProjectSettings.


    Сообщение отредактировал Lertmind - Вторник, 26 Апреля 2016, 17:17
    sirtooДата: Вторник, 26 Апреля 2016, 17:31 | Сообщение # 7774
    был не раз
    Сейчас нет на сайте
    Lertmind, спасибо за подробный ответ, понял куда копать ...

    а писать на JS просто муветон, или действительно скрипт на C# даст в перспективе профит по производительности ?
    SkorpyXДата: Вторник, 26 Апреля 2016, 17:39 | Сообщение # 7775
    участник
    Сейчас нет на сайте
    Цитата sirtoo ()

    а писать на JS просто муветон, или действительно скрипт на C# даст в перспективе профит по производительности ?

    Я пишу на JS в UnityDevelop 4, автодополнение работает. JS компилируется в C# код. Это можно увидеть открыв Assembly-UnityScript в ILSpy


    Сообщение отредактировал SkorpyX - Вторник, 26 Апреля 2016, 17:44
    LertmindДата: Вторник, 26 Апреля 2016, 18:01 | Сообщение # 7776
    заслуженный участник
    Сейчас нет на сайте
    sirtoo, просто моветон. Большинство обучалок как раз на C# и есть ограничения для JS. Кроме этого, были проблемы если смешивать скрипты на разных языках - лучше начинать писать C# с самого начала.

    Добавлено (26 апреля 2016, 18:01)
    ---------------------------------------------

    Цитата SkorpyX ()
    JS компилируется в C# код
    Скорее компилируется в СIL-код.
    SkorpyXДата: Вторник, 26 Апреля 2016, 18:04 | Сообщение # 7777
    участник
    Сейчас нет на сайте
    Цитата Lertmind ()
    Скорее компилируется в СIL-код.

    Ну смысл в том, что они компилируются в одно и тоже, а следовательно производительность практически одинаковая
    LertmindДата: Вторник, 26 Апреля 2016, 18:06 | Сообщение # 7778
    заслуженный участник
    Сейчас нет на сайте
    SkorpyX, с другим не спорил, так и есть)
    seamanДата: Вторник, 26 Апреля 2016, 21:47 | Сообщение # 7779
    старожил
    Сейчас нет на сайте
    Производительность отличается. Не везде и ненамного. Т.к. компиляторы разные - получается немного разный MSIL. По тому что было когда то опубликовано ( искать не буду - лень) - JS местами медленнее. Еще раз - не везде и ненамного.
    8Observer8Дата: Вторник, 26 Апреля 2016, 22:44 | Сообщение # 7780
    заслуженный участник
    Сейчас нет на сайте
    Цитата sirtoo ()
    или действительно скрипт на C# даст в перспективе профит по производительности ?

    Скорее, профит будет из-за производительности в работе, так как большинство использует C#, то вы сможете качать чужие игры из туторов, примеры из книг и ассеты из Asset Store Проще будет понимать. А вообеще это дело вкуса. Вы можете научиться читать реализацию на C# и брать идеи в свои поекты на JS и обратно. Правда, иногда бывает своя специфика привязанная к конкретному языку


    Сообщение отредактировал 8Observer8 - Вторник, 26 Апреля 2016, 22:47
    Поиск:

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