Вопрос-[ответ] по Unity
| |
QWER56 | Дата: Понедельник, 09 Августа 2010, 10:58 | Сообщение # 1 |
старожил
Сейчас нет на сайте
| Вопрос-[Ответ] по Unity3d
База скриптов Unity3d Курс Уроков по Unity 3D от Alcatraz
ConsMark - поисковик по интернет магазинам.
Сообщение отредактировал QWER56 - Вторник, 26 Июля 2011, 20:54 |
|
| | |
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 |
постоянный участник
Сейчас нет на сайте
| Подскажите что делать. у меня есть префаб объекта с аниматором. создаю его через скрипт, но по окончанию анимации желаю удалить его со сцены.
каким образом отловить окончание анимации?
|
|
| |
|