Skocz do zawartości

Unity3d: ukrycie wielu obiektów jednocześnie


stobolewski

Rekomendowane odpowiedzi

Witam,

 

jako że z unity nie jestem jakoś specjalnie obyty chciałbym was zapytać, w jaki sposób mogę za pomoca jednego kliknięcia ukryć / pokazać wiele obiektów jednocześnie.

Chodzi o to, że mam salę z 300 krzesłami, które muszę wyświetlać w różnych ustawieniach.

Próbowałem wcielić wszystkie krzesełka pod box, i w nim włączać / wyłączać opcje renderowania ścian, ale to działa tylko na tego boxa :/.

 

Jeśli ktoś wie jak to zrobić, proszę o pomoc :)

 

pozdrawiam.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Odpowiedzi 7
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Top Posters In This Topic

Zamiast włączać/wyłączać MeshRenderera możesz dezaktywować cały obiekt (od Unity 4 dzieci dziedziczą status "Active"). Możesz jeszcze wyszukać sobie wszystkie MeshRenderery w dzieciach za pomocą gameObject.GetComponentsInChildren(), a potem pojechać po wszystkich elementach zwróconej tablicy i je wyłączyć. Aktywacja obiektu nadrzędnego będzie chyba najprostsza.

Odnośnik do komentarza
Udostępnij na innych stronach

Wrócę do domu to będę szukał i kombinował (tak na szybko wiem tylko że mój obiekt nadrzędy to ściany sali, reszta wypozażenia to stoły, krzesła, framugi itp. :/.

 

Ps. czy w unity jest coś takiego jak nature painter w Quest3d ? Chodzi o stworzenie wielu obiektów, które sa ... instancjami istniejącego obiektu. Problem w tym, że z tymi 300 krzesełkami scena ma 50 mb :/

To troche za dużo jak na web playera ;p.

 

Pozdr.

Odnośnik do komentarza
Udostępnij na innych stronach

Możesz zrobić jeszcze jeden obiekt nadrzędny - rodzica, który będzie trzymał tylko krzesła.

Przy wrzucaniu na scenę kopii jednego modelu Unity zapisuje tylko współrzędne obiektu. Pozostałe dane istnieją tylko jako referencja do pliku źródłowego. Czy 50 MB to już wielkość builda webowego, czy wersji PC? Przy eksporcie do WebPlayera zwykle zasoby dość mocno się kompresują.

Odnośnik do komentarza
Udostępnij na innych stronach

arev dzięki kurde wielkie... kompilowałem sobie exe, popaczyłem na rozmiar i zonk. Po kompilacji dla weba 2 mb xD

Dzięki chłopie, bo bym tak siedział i myślał co jest nie tak xD

 

Teraz będe "znikał" obiekty...

 

 

Poradziłem sobie (wujek google pomógł)

 

var ObjectToDeactivate = GameObject.Find("nazwaObiektuRodzica");

ObjectToDeactivate.gameObject.SetActive(false); // false grupa zniknie, true - pojawi sie (wraz z "potomkami").

Edytowane przez stobolewski
Odnośnik do komentarza
Udostępnij na innych stronach

No niestety, ale muszę prosić o pomoc :/.

 

W scene unity mam:

2x GUI texture, które robią za przyciski (podpinam pod nie 2 skrypty):

 

showKinowo

function OnMouseDown () {

var OTD2 = GameObject.Find("ustawieniaKinowe");

OTD2.gameObject.SetActive(true);

var OTD3 = GameObject.Find("ustawieniaSzkolne");

OTD3.gameObject.SetActive(false);

}

 

oraz

 

showSzkolnie

function OnMouseDown () {

var OTD2 = GameObject.Find("ustawieniaKinowe");

OTD2.gameObject.SetActive(false);

var OTD3 = GameObject.Find("ustawieniaSzkolne");

OTD3.gameObject.SetActive(true);

}

 

Po uruchomieniu sceny gdy kikam ikone z podpiętym sktyptem showSzkolnie wszystko działa, w 2 przypadku nic sie nie dzieje :/.

Próbowałem wywołać tę funkcję w onUpdate, ale też nic z tego nie wyszło ;p.

 

Czy ktoś może mi coś podpowiedzieć ?

Odnośnik do komentarza
Udostępnij na innych stronach

Hej,

 

Przede wszytkim bardzo nie wydajnie jest to napisane - powinienes sobie referencje zcashowac podczas inicjacji. Takze lepiej wylaczac samo guiTexture. Tutaj masz jakby to moglo wygladac IMHO (C#):

 

using UnityEngine;
using System.Collections;

public class ShowHideButtons : MonoBehaviour 
{
   private GUITexture _buttonKinowe;
   private GUITexture _buttonSzkolne;

   void Awake ()
   {
       _buttonKinowe = GameObject.Find("ustawieniaKinowe").guiTexture;
       _buttonSzkolne = GameObject.Find("ustawieniaSzkolne").guiTexture;
   }

   void OnMouseDown () 
   {
       _buttonKinowe.enabled = ! _buttonKinowe.enabled;
       _buttonSzkolne.enabled = ! _buttonSzkolne.enabled;
   }
}

 

Ten skrypt umiesc na buttonie, ale tylko na jednym, wowczas on bedzie wylaczal jedna teksture a wlaczal druga. Na poczatku w scenie powinna byc jedna GUITexture wylaczona a druga wlaczona, aby na zamiane sie wlaczaly.

 

Pozdrawiam.

Odnośnik do komentarza
Udostępnij na innych stronach

bolitic, dzięki za pomoc :)

Co prawda już sobie poradziłem z problemem poprzez zamianę GUI Texture na normalne buttony. Dodałem też kilka GUI Text (tak to się chyba zwie) i klika check boxów, tak że w sumie wyszło całkiem ładne "małe" menu.

 

Obecnie mam już tylko jeden skrypt ze zdefionowanymi "stałymi", do których podpięte są poszczególne ustawienia sal.

Trochę googlowania i poszło :).

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się



×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności