Loading...
ViktorDimitrov avatar ViktorDimitrov 0 Точки

[Unity 3D] Скрипт афектира всички обекти в сцената, за които е закачен

Колеги блъскам си глават с един доста "интересен" проблем. Имам 2-3 и повече обекти които се опитвам да местя с "влачене" по екрана (Android)....имам скрипт, с който правя Ray обект от позицията на кликването върху тъч скрийна, като по този начин намирам кой обект е кликнат, след което имам друга логика дали се влачи и тн., като променяма позицията му в пространството. Не това е проблема...проблема е следния....имам публична променлва в скрипта която репрезентира празен GameObject със Textmesh в него, който съдържа някаква информация като текст. Опитвам се през кода, когато е кликнат обекта да увеличавам фонта на буквите за да постигна ефект все едно се появяват и скриват когато е кликнат...и тук идва същинския проблем че се увеличава фонта не само на TextMesha който е на кликнатия обект а и на всички останали обекти, на които е закачен скрипта. Четох някъде че проблема идва от това, че се пуска по един Ray за всеки обект а който е закачен скрипта и селектирането на всички идва от там. Някой сблъсвал ли се е с този проблем и как би могъл да се разреши?

Тагове:
0
Unity 3D 11/07/2017 11:10:16
flareset avatar flareset 140 Точки
Best Answer

Трябва в кода, в който става промяната да се посочи точно този обект. Качи някъде кода, ако не си решил да е само за лично ползване.

0
ViktorDimitrov avatar ViktorDimitrov 0 Точки

код ->  https://pastebin.com/1cQCH03i

0
yasen.dokov avatar yasen.dokov 2 Точки

Точно такъв е проблемът какъвто предполагаш (е, +-). Скриптът се изпълнява отделно за всеки обект за който е закачен, съответно който и да кликнеш, те всичките го засичат (но само за един от тях е изпълнено target == this.gameObject) и всичките променят размера на закачения за тях текст (който е различен за всяка инстанция).

Предполагам тук е по-добре да има един общ Manager/Controller, който да прави raycast само един път (това и откъм performance е по-добре) и след като засече кликнатия обект, да му променя каквото има нужда. За по-удобно може да се закачи друг скрипт за отделните обекти и Manager-а просто да му казва какво да направи, когато засече клик/драг/нещо.

0
10/07/2017 19:22:49
flareset avatar flareset 140 Точки

Пробвах го преди малко. Досега не съм използвал textMesh, а само UI text, и може да бъркам. Направих размера на фонта да се променя през определено време, променя се но не изчезва, въпреки, че в инспектора стойността му показва нула. Ако не се лъжа, минималната стойност за фонт е 1, може би затова не изчезва. Само ако не е в плей режим изчезва при нула, не изчезва, става на едва забелижимо малко петно. За този ефект по-добре е да скалираш самият обект, вместо фонта. Но, ако ще е само появяване и скриване (както ти е кода в момента), а не плавна промяна, използвай активиране и деактивиране на обекта ( опс,колегата yasen.dokov ме е изпреварил :)).

0
10/07/2017 19:54:56
yasen.dokov avatar yasen.dokov 2 Точки

Съгласен съм с flareset, че fontsize=0 не е най-добрия начин за показване/скриване. Бих заложил на enabled=false на MeshRenderer-а на текста или SetActive(false) на обекта с TextMesh-а.

0
ViktorDimitrov avatar ViktorDimitrov 0 Точки

Супер сте колеги, мерси за бързите отговори! Интересува ме сега това което е написал колегата yasen.dokov за manager/controller който да прави raycast само вендъж...може ли някакъв прост екзампъл или туториаъл от някаъде за да захапя горе долу как да го направя? А за скриването на буквите съм пробвал всички начини и всеки път резултата е че се променя на всички, но да по-удачен ми се вижда и на мен със SetActive(false) или през MeshRenderer-a.

0
yasen.dokov avatar yasen.dokov 2 Точки

Ами, то не е нещо велико. Както е сегашният ти вариант, просто не го слагаш на няколко обекта, а само на един (отделен от тези дето ще се кликат), за да се вика само един път и да raycast-ва само един път. И в него, при засичане на кликнат обект, намираш нещата които ти трябват (разбирай infoText) спрямо кликнатия обект (target в твоя код). Мисля, че това е всичко.

Ако искаш, за по-удобно може да си направиш още един MonoBehaviour, който се слага на всеки кликаем обект и в него може вече да имаш нужните параметри за отделен обект (например референция към infoText). И така, когато засечеш кой обект е кликнат, можеш да вземеш този другия компонент и от него да вземеш infoText и каквото още ти трябва. Или пък да му кажеш на него, че е кликнат и той да се оправя.

0
11/07/2017 01:33:09
ViktorDimitrov avatar ViktorDimitrov 0 Точки

Сега имам един празен обект, за който е закачен скрипта за движението, в него достъпвам полета, чайлд обекти и тн. на кликнатия обект, като вече всичко си бачка като пич. Мерси на всички колеги за помощта.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.