Jump to content
stobolewski

Unity3d: ukrycie wielu obiektów jednocześnie

Recommended Posts

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.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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ą.

Share this post


Link to post
Share on other sites

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").

Edited by stobolewski

Share this post


Link to post
Share on other sites

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ć ?

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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 :).

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

We are using cookies. Read about our Privacy Policy