Четверг, 14 Ноября 2024, 11:54

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

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

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

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

    Сообщение отредактировал QWER56 - Вторник, 26 Июля 2011, 20:54
  • AlfeДата: Четверг, 15 Сентября 2016, 22:03 | Сообщение # 8121
    старожил
    Сейчас нет на сайте
    Hugarden, Возможно поможет

    Группа нашей команды. Там есть интересная рубрика... иногда игры выходят

    Моя первая игpa - Crazy Penguin
    LertmindДата: Четверг, 15 Сентября 2016, 22:54 | Сообщение # 8122
    заслуженный участник
    Сейчас нет на сайте
    Hugarden, мда. Я бы посмотрел, как ты сделаешь из направленного света точечный.
    Самый просто тебе дал Alfe, там используется обычный свет из 3D.
    Кстати, ты ничего не сказал про тени, надеюсь ты не думаешь, что они сами появятся от света.
    Пройдёмся по хабру:
    2D магия в деталях. Часть первая. Свет
    Динамические свет и тени в моей 2d игре (не для Unity, но при желании прикрутить можно)
    2D система освещения для Unity3D, работающая на GPU

    Как-то отвечал про тени на Android http://gcup.ru/forum/59-86830-1, там есть ссылки: один, два (там ссылка на ассет).

    Есть ещё разные способы, опять же в зависимости от целей. В гугле всё есть.


    Сообщение отредактировал Lertmind - Четверг, 15 Сентября 2016, 22:56
    alexeishaidukДата: Пятница, 16 Сентября 2016, 13:18 | Сообщение # 8123
    был не раз
    Сейчас нет на сайте
    Здравствуйте. У меня такая проблемка: я создал (по видео уроку) кнопку переключения звука. А она при первом переключении действует нормально а дальше зависает. Я трижды перепроверил, нигде ли не ошибся. Всё как в уроке - до символа. В уроке она нормально, и выключает и включает. А у меня только выключает. Unity ошибок не регистрирует. Так в чём же дело?
    Код
    using UnityEngine;
    using System.Collections;
    using UnityEngine.SceneManagement;

    public class Buttons : MonoBehaviour {

        public GameObject m_on, m_off;
        public Sprite layer_green, layer_red;

        void OnMouseDown () {
            GetComponent<SpriteRenderer> ().sprite = layer_red;
        }

        void OnMouseUp () {
            GetComponent<SpriteRenderer>().sprite = layer_green;
        }

        void OnMouseUpAsButton () {
            switch (gameObject.name) {
                case "Play":
                    SceneManager.LoadScene ("play");
                    break;
                case "Rating":
                    Application.OpenURL ("http://google.com");
                    break;
                case "Replay":
                    SceneManager.LoadScene ("play");
                    break;
                case "Home":
                    SceneManager.LoadScene ("main");
                    break;
                case "Facebook":
                    Application.OpenURL ("http://facebook.com");
                    break;
                case "How To":
                    SceneManager.LoadScene("howTo");
                    break;
                case "Close":
                    SceneManager.LoadScene("main");
                    break;
                case "Music":
                      if (PlayerPrefs.GetString("Music") != "no")
                      {
                          PlayerPrefs.GetString("Music", "no");
                          m_on.SetActive(false);
                          m_off.SetActive(true);
                      }
                      else
                      {
                          PlayerPrefs.GetString("Music", "yes");
                          m_off.SetActive(false);
                          m_on.SetActive(true);
                      }
                    break;
            }
        }
    }


    Сообщение отредактировал alexeishaiduk - Пятница, 16 Сентября 2016, 13:25
    LertmindДата: Пятница, 16 Сентября 2016, 14:58 | Сообщение # 8124
    заслуженный участник
    Сейчас нет на сайте
    alexeishaiduk, косяк в GetString - SetString:
    Код
    if (PlayerPrefs.GetString("Music") != "no")
    {
        PlayerPrefs.SetString("Music", "no");
        m_on.SetActive(false);
        m_off.SetActive(true);
    }
    else
    {
        PlayerPrefs.SetString("Music", "yes");
        m_off.SetActive(false);
        m_on.SetActive(true);
    }
    Ошибки не было, потому что GetString может принимать второй необязательный аргумент.


    Сообщение отредактировал Lertmind - Пятница, 16 Сентября 2016, 14:59
    alexeishaidukДата: Пятница, 16 Сентября 2016, 20:02 | Сообщение # 8125
    был не раз
    Сейчас нет на сайте
    А как исправить? Вроде можно использовать GetInt - SetInt, но я в этом деле ещё новичок, и не знаю как это реализовать(

    Сообщение отредактировал alexeishaiduk - Пятница, 16 Сентября 2016, 20:04
    LertmindДата: Пятница, 16 Сентября 2016, 20:18 | Сообщение # 8126
    заслуженный участник
    Сейчас нет на сайте
    alexeishaiduk, я привёл исправленный код... Зачем ты говоришь о GetInt и SetInt? Можно конечно истину и ложь хранить как 1 и 0, но это ничего не меняет.
    alexeishaidukДата: Пятница, 16 Сентября 2016, 20:32 | Сообщение # 8127
    был не раз
    Сейчас нет на сайте
    Спасибо большое. По чесноку пришлось каждую строку со своей сравнивать, и то не сразу разницу заметил. Вот я лопух. Извините. И ещё раз огромное спасибо!
    usluciferДата: Вторник, 20 Сентября 2016, 16:29 | Сообщение # 8128
    постоянный участник
    Сейчас нет на сайте
    Создал проект, создал скрипт со статическим классом.
    из пользовательских скриптов создаваемых в проекте класс виден.
    добавил в проект ассеты камеры и персонажа, попробовал получить доступ к переменным статического класса из скриптов ассетов и не получается.
    подскажите как подключить к коду загружаемых ассетов классы проекта?
    -------------------
    решено
    ===========
    Отвечаю на свой же вопрос.
    Оказывается необходимо создавать свои скрипты в папке Standard Assets, в то время как я создавал скрипты в корневой папке ассетов.
    В этом случае все работает.

    Добавлено (20 сентября 2016, 15:56)
    ---------------------------------------------
    А вот еще вопрос.
    На канвасе я создал панель меню с кнопками, но отключил ее в инспекторе.
    как теперь ее включить из скрипта?

    Добавлено (20 сентября 2016, 16:29)[/size]
    ---------------------------------------------
    [size=10]отчасти разобрался.
    Все объекты являются потомками GameObject, и наследуют метод SetActive(bool);
    получив доступ к объекту по имени, в моем случае это панель Menu, можно манипулировать его параметрами.
    Код

    GameObject menu;
    menu = GameObject.Find("Menu");  
    menu.SetActive(true);

    но вот незадача, если при старте сцены объект является неактивным, то есть не отображается на экране, то результатом поиска объекта будет NULL.

    Подскажите, каким образом возможно получить ссылку на неактивный объект в сцене?


    Сообщение отредактировал uslucifer - Вторник, 20 Сентября 2016, 16:31
    EchoITДата: Вторник, 20 Сентября 2016, 16:32 | Сообщение # 8129
    старожил
    Сейчас нет на сайте
    Цитата
    Подскажите, каким образом возможно получить ссылку на неактивный объект в сцене?

    Оставить его активным, найти через скрипт, задать и выключить. Или занести в инспекторе в переменную.


    Долгожданный анонсик: State of War

    Сообщение отредактировал EchoIT - Вторник, 20 Сентября 2016, 16:32
    usluciferДата: Вторник, 20 Сентября 2016, 17:05 | Сообщение # 8130
    постоянный участник
    Сейчас нет на сайте
    EchoIT,
    так и сделал, просто думал есть иной способ. А вот про переменную в инспекторе как то и не подумал.
    Спасибо!
    LertmindДата: Вторник, 20 Сентября 2016, 22:16 | Сообщение # 8131
    заслуженный участник
    Сейчас нет на сайте
    uslucifer, есть другой способ, не знаю единственный ли. С помощью SceneManager.GetActiveScene().GetRootGameObjects() получаем все GameObject в корне, включая неактивные, а потом проходим по всем потомкам. Этот код находит любой GameObject на сцене:
    Код
    using UnityEngine;
    using UnityEngine.SceneManagement;

    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;

    public class SceneHelper : MonoBehaviour
    {
        void Start()
        {
            var go = SceneHelper.FindAny("Sphere");
            print(go);
        }
        
        public static GameObject FindAny(string name)
        {
            GameObject[] rootGO = SceneManager.GetActiveScene().GetRootGameObjects();
            Queue<Transform> queue = new Queue<Transform>(rootGO.Select(x => x.transform));

            while (queue.Count > 0)
            {
                Transform current = queue.Dequeue();
                if (current.name == name)
                {
                    return current.gameObject;
                }

                for (int i = 0; i < current.childCount; i++)
                {
                    queue.Enqueue(current.GetChild(i));
                }
            }
            return null;
        }
    }

    Насколько это медленно, надеюсь не стоит говорить.


    Сообщение отредактировал Lertmind - Вторник, 20 Сентября 2016, 22:33
    usluciferДата: Среда, 21 Сентября 2016, 07:56 | Сообщение # 8132
    постоянный участник
    Сейчас нет на сайте
    Lertmind, верно. медленно не то слово. Но все же этот подход универсален, и будет незаменим в другом случае.
    Спасибо!
    LertmindДата: Среда, 21 Сентября 2016, 17:35 | Сообщение # 8133
    заслуженный участник
    Сейчас нет на сайте
    uslucifer, ещё у меня код не оптимальный: добавляются элементы следующего уровня вложенности до проверки текущего. Не буду переписывать, выложил для примера, так как лучше адаптировать код для конкретных случаев, например поиска только на одном уровне вложенности или на одном объекте.
    EchoITДата: Среда, 21 Сентября 2016, 18:48 | Сообщение # 8134
    старожил
    Сейчас нет на сайте
    Lertmind, способ напоминает поездку из Москвы в Питер через Китай на ПАЗике при сообщении о том, что Сапсан сломался.

    Долгожданный анонсик: State of War

    Сообщение отредактировал EchoIT - Суббота, 24 Сентября 2016, 11:54
    Cyborg777Дата: Суббота, 24 Сентября 2016, 11:42 | Сообщение # 8135
    был не раз
    Сейчас нет на сайте
    Как его правильно вращать???
    Код
    aim = Input.mousePosition;
    target = cam.ScreenToWorldPoint(new Vector3(aim.x, aim.y, 100));
    Quaternion rot = Quaternion.LookRotation(target-transform.position);
    transform.rotation = Quaternion.Slerp(transform.rotation, rot, rotspeed * Time.deltaTime);

    При 90 градусах по Х, крутится вокруг оси Y как камера от первого лица..


    Сообщение отредактировал Cyborg777 - Суббота, 24 Сентября 2016, 11:43
    valera_zaДата: Среда, 28 Сентября 2016, 20:26 | Сообщение # 8136
    участник
    Сейчас нет на сайте
    Ребят ,запускается сцена, в сцене не активный объект на нем этот скрипт ,надо подождать 2 сек активировать его, подождать еще 4 секунды и скрыть
    у меня чего то не получается где не так?
    Код

    public GameObject herolala2;

    void Start () {
    StartCoroutine(A());
    }
    IEnumerator A(){

    yield return new WaitForSeconds(2.5f);
    herolala2.SetActive(true);
    yield return new WaitForSeconds(4.5f);
    herolala2.SetActive(false);

    }
    }



    Сообщение отредактировал valera_za - Среда, 28 Сентября 2016, 21:55
    LertmindДата: Среда, 28 Сентября 2016, 23:27 | Сообщение # 8137
    заслуженный участник
    Сейчас нет на сайте
    valera_za, у неактивного объекта не вызывается Start(), пока он не активируется. Также Update(), FixedUpdate(), OnGUI() не вызываются пока он неактивный, а отключение GameObject прерывает сопрограммы. Так что надо управлять объектом через другой активный объект. В общем-то, в твоём коде нет ошибки, просто в herolala2 нельзя указывать объект на котором этом скрипт и нельзя держать это скрипт на неактивном объекте.

    Сообщение отредактировал Lertmind - Среда, 28 Сентября 2016, 23:43
    valera_zaДата: Среда, 28 Сентября 2016, 23:59 | Сообщение # 8138
    участник
    Сейчас нет на сайте
    Lertmind, а можно на этом же объекте создать еще один активированный объект,(пустышку)и на нем повесить этот скрипт для активации моего herolala2?так это как то да? то есть пустышка активированная дочерний в ней herolala2?

    Добавлено (28 сентября 2016, 23:59)
    ---------------------------------------------
    Lertmind, да работает как надо спасибо !


    Сообщение отредактировал valera_za - Четверг, 29 Сентября 2016, 00:01
    PuniДата: Четверг, 29 Сентября 2016, 18:29 | Сообщение # 8139
    был не раз
    Сейчас нет на сайте
    Как можно реализовать ragdoll-ходьбу? (Как в пьяном режиме в GTA4 например).
    usluciferДата: Воскресенье, 02 Октября 2016, 17:55 | Сообщение # 8140
    постоянный участник
    Сейчас нет на сайте
    Подскажите что делать.
    у меня есть префаб объекта с аниматором.
    создаю его через скрипт, но по окончанию анимации желаю удалить его со сцены.

    каким образом отловить окончание анимации?
    Поиск:

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