Skocz do zawartości

Unity3d


Ardeni

Rekomendowane odpowiedzi

  • Odpowiedzi 595
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Pomocy. :( Unity szaleje ze zwielokrotnianiem polycountu do nieprzyzwoitych ilości. Mam na ekranie obiekt który ma około 3 tysięcy vertów (w blenderze i inspektorze unity jest ok) a unity pokazuje nawet 30 tysięcy vertów w statystykach grafiki. Jeden direct light, obiekt bez uv, standardowy materiał z unity, ustawienia grafy w unity na fastest. Ja rozumiem że seamy i hardedge dublują werty ale nie ma możliwości żeby 3k trisów wyprodukowało 30k vertów. Guglałem temat ale wszędzie albo piszą oczywiste rzeczy o seamach albo o ustawieniach iphona, my robimy gre na webplayer. Ma ktoś jakieś pomysł?

 

Po odpaleniu nowego projektu w unity cube ma 12 tris i 24 verty.

W naszym projekcie cube ma 280 trisów i 480 werteksów. Na scenie na której mamy trochę planeów i z 15 obietków po 1k tri pokazuje nam pół miliona trisów a karta grafiki się grzeje. WHY!?! :(

 

------------------------------------------------------------------------------

Winowajca się odnalazł. Tak jakby ktoś miał kiedyś z tym problem to podpowiem że całe zamieszanie przez Blobshadow. W unity free które nie ma sensownego batchowania każdy blob jest traktowany jak oddzielny renderpass całej sceny. Dlatego zmultipikowało nam geometrie i statystyki grafy oszalały. Bez unity pro nie polecam z blobami szaleć. ;)

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

Cześć, mam takie małe pytanie - czy ktoś wie może jak wyexportowac do unity vertex painting, a następnie przypisać odpowiednie texturki?

 

Generalnie to potrzebuję jakoś otexturowac(kilkoma mieszającymi się texturami) mesh terenu. Czyli generalnie coś jak landscape tylko na static meshu.

 

Pozdrawiam

Odnośnik do komentarza
Udostępnij na innych stronach

Gość Chrupek3D

da się użyć color na channel UV1 i normal mape na channel UV2?

Z tego co się zdążyłem zorientować, Unity czyta 2 kanały UV dla materiału Lightmap, a ja potrzebuje normalmapy.

 

no chyba, że ktoś poradzi... mam ostre krawędzie w obiekcie i jak wiadomo, trzeba w tym miejscu rozciąć UV, żeby się normalka ładnie wypaliła. Problem w tym, że takiego pociętego ciężko jest pokolorować.

Odnośnik do komentarza
Udostępnij na innych stronach

Da się. Musisz najpierw wczytać dwa sety UV w shaderze:

BindChannels {
  Bind "texcoord", texcoord0
  Bind "texcoord1", texcoord1
} 

a potem, w SetTexture użyć tekstur w takiej kolejności w jakiej chcesz żeby korzystały z tym kanałów. Tutaj standardowo najpierw diffuse, potem normal. Jak coś więcej potrzebujesz to już nie pomogę, bom niezbyt biegły w shaderach.

Odnośnik do komentarza
Udostępnij na innych stronach

Gość Chrupek3D

no właśnie ciężko, bo ma te łopaty wielkie jak cholera.

Mogę spróbować dać subtelniej bez zawijania do tyłu, ale wtedy będzie biegał jak panienka.

Odnośnik do komentarza
Udostępnij na innych stronach

I SPACJA SKOK!!

Chrupek mega animacja. Ten latający pysk niszczy :D

Nieco sie slizga/pływa. Ale mysle ze jakby były cienie i cała otoczka to by osiadł.

Nie zmienia to faktu że wygląda to świetnie.

 

Ps. A te boksy faktycznie słabą teksture mają ;)

 

Howgh!

Odnośnik do komentarza
Udostępnij na innych stronach

Sam model bardzo mi się podoba. Chodzenia całkiem dobra ale trochę nie czuć że on po czymś stąpa.

Za to mechanika ruchu i skoku jest fatalna, wszystko do wymiany. Domyślam się że tymczasowo to tak ma działać rajt? Ruch postaci w platformerach to cholernie trudne zagadnienie ale chyba najważniejsza sprawa gameplayu. Zrób kilka prototypów a wszystkie parametry takie jak szybkość ruchu czy animacji, wysokość skoku czy prędkość obracania na początek poustalaj sobie na zmiennych przełączanych z poziomu gierki. Jak zbierzesz feedback z kilku playtestów to sobie zhardcodujesz jak będzie trzeba albo po prostu wywalisz Gui do przełączania.

Jak robisz takie demka to dodaj opcje żeby się klikało na grę i kursor znikał, bez tego jest straszna dezorientacja, mimo ze nie klikam w grze to mam wrażenie ze zaraz wyłączę przeglądarkę albo omyłkowo wejdę w zakładki i odpale redtube. Gotowy skrypt jest gdzieś na forum unity.

 

Własnie. Tez wlazłem na samą gorę wieży i nie dostałem nic w nagrodę. Liczyłem na model z logo max3d czy coś. Nagradzaj gracza, to podstawa! :(

Odnośnik do komentarza
Udostępnij na innych stronach

Gość Chrupek3D

dzięki Panowie,

animacja skoku była zupełnie inna, ale z tego co podejrzałem orginalny character z Unity miał animacje skoku do połowy, a powrót sam sobie robił... dlatego to tak dziwnie wygląda.

 

zrobiłem updata, dałem statycznych wrogów i muzykę, która pasuje jak pięść do nosa, ale jest moja ;)

Ja się dopiero uczę Unity, a w kodowaniu jestem dętka, więc to raczej graficznie rozwinę.

 

Monio, a wiesz, ze chciałem zrobić to logo maxa3d na górze :-)

 

http://www.patart.com.pl/croko.html

Odnośnik do komentarza
Udostępnij na innych stronach

Dobrą muzę robisz. :) Model świaniaka bardzo przedni, mysza trochę ostaje od reszty ale też spoko.

Zmieniłeś coś w ruchu postaci? Teraz silniej czuć bunnyhoping i trudniej mi wejść na wieże, może to tylko wrażenie.

Jak w kodowaniu dętka jesteś to znajdź jakiegoś kodera do zespołu. W unity bez kodu raczej nic sensownego się nie zrobi.

 

Aha. Jak robisz schody to niech ich strefa kolizji będzie jednym boxem który jest ustawiony pod kontem natomiast sam model niech się po prostu wyświetla. Zazwyczaj tak się to robi.

Ponownie się wdrapałem i kolejny zawód. Mogłeś jednego przeciwnika tam chociaż postawić. :(

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

Witam

Bardzo fajnie wyszło. Postacie mają swój styl i charakter, kolorystycznie - bajkowo. Teraz pozostał Ci już tylko enviroment :)

Jeśli można to mam parę pytań ogólnych:

1. ile mniej więcej poza postaciami przewidujesz assetów (widziałem kamyki, drzewka) na ten projekt ?

2. zakładasz "otwarty" level gdzie postać poruszać się będzie z pkt A do pkt B jak w yoFrankie czy raczej stawiasz na zamkniętą arenę gdzie po wykonaniu kilku zadań przechodzisz do następnego etapu jak np w Goblins ?

3. Nastawiasz się tylko na przeglądarkę czy również masz zamiar wydać na androida i ios-a?

Pozdrawiam

Odnośnik do komentarza
Udostępnij na innych stronach

Gość Chrupek3D

mieliście taki problem w Unity, że postaci stojącej na ziemi lekko "drżą" nogi?

W Blenderze jest wszystko ok., a po eksporcie do Unity, widać, że postaci lekko drgają stopy, tak jakby było FK, zamiast IK - chociaż wszystko już sprawdziłem. Możliwe jest, że to skinowanie szwankuje?

Odnośnik do komentarza
Udostępnij na innych stronach

A masz na tych stopach jakiś locomotion system czy inne cuda na kiju? Jak tak to wyłącz i olej temat bo to zjada żarłocznei pochłania zasoby a efekty są słabe.

Jak to czysta animka to obstawiam że kolider nie wyłapuje pozycji gruntu bo jest za wysoko i ci się pierniczy blending animacji (idle w powietrzu).

Odnośnik do komentarza
Udostępnij na innych stronach

Gość Chrupek3D

znaczy, nie używam żadnego systemu, ot prosty rigify z Blendera przerabiam na fbx, a w Unity nawet nie blenduje animacji, bo na razie nie wiem jak :-)

 

Zobacz jak to wygląda... nie mam pomysłu [5MB]

www.patart.com.pl/rzaba.mp4

 

ps. stawiałem ją ponad gruntem i jest to samo.

Całkiem przypadkowo znalazłem na szafie zakurzonego 3dsmax'a i z niego fbx też działa tak samo ;)

W nim jest ok w Unity d... blada.

Czyli problem trzęsawki to problem Unity.

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

Wydaje mi się, że źródłem może być mniejsza precyzja odtwarzania takiej animacji i zaokrąglenia jakie tam zachodzą (może jakaś niedokładność przy eksporcie). Z daleka tego nie widać, ale może dałoby się to wyeliminować posługując się animacjami tworzonymi w Unity - jest tam bardzo podobne narzędzie.

Odnośnik do komentarza
Udostępnij na innych stronach

Pytanie za sto punktów ponizej :D

 

Wprowadzenie:

mam kilka cube'ow ktore sa trigerami.(maja tagi ktore zczytuje skrypt na postaci i odgrywa animacje)

rozstawielm je w odleglosci mniej wiecej co pare metrow

 

Problem:

kilka trigerow dziala kilka nie dziala ( w sensie ze w ogole nie sa czytane jako trigery. debug.log nie pokazuje) a jak jakis przesune to kolejnosc działania sie zmienia... WTF?

Odnośnik do komentarza
Udostępnij na innych stronach

Sprawdź czy mają komponent collider i czy na colliderze jest odpowiedni tag. Nie wiem jak wygląda ten skrypt, ale może trzeba go dodać do obiektu gry na tego cuba. Jeśli cuby mają takie same ustawienia to tak samo powinny działać, chyba że to wina skryptu.

Odnośnik do komentarza
Udostępnij na innych stronach

Gość Chrupek3D

dzięki chłopaki, udało się... chodziło właśnie o te zaokrąglenia przy exporcie. Nie odznaczyłem opcji optymizacji w Blenderze, natomiast odznaczałem ją w Unity... ale jak wiadomo było już po jaPkach, bo Blender zrobił swoje.

Dzięki serdeczne :-)

Odnośnik do komentarza
Udostępnij na innych stronach

na 95% cos zrobilem zle , pewnie gdzies jakiegos okienka nie klinalem :D

 

properties boksika (triggera z tagiem):

3.jpg

properties playera:

2.jpg

podglad kolizji na wszeli wypadek:

1.jpg

 

kodzik (mam tu rowniez sterowanie i inne rzeczy polaczone):

var jumpForce:float;
var gravity:float;

var runButton: GUITexture;
var ArrowUp: GUITexture;
var ArrowDown: GUITexture;

private var charController:CharacterController;
private var charTransform:Transform;
private var gravityFall:float = 3;
private var speed:float;

// stany
private var running:boolean = false;
private var flying:boolean = false;				// is not grounded
private var idle:boolean = true;
private var jumping:boolean = false;
private var sliding:boolean = false;
private var specialAnimation:boolean = false;

// special animations
private var runningStairs:boolean = false;
private var climbLow:boolean = false;
private var climbMedium:boolean = false;
private var climbHigh:boolean = false;

function Start ()
{		
	// set speed to 0 so game is "paused"
	charController = GetComponent(CharacterController);
	animation.CrossFade("idle");
	speed = 0;
}

//**********************************
//
// SPECIAL ANIMATION TRIGGERS
//
//**********************************

function OnTriggerEnter (triggers : Collider)
{
charController = GetComponent(CharacterController);


if(triggers.gameObject.tag =="stairsStart")
{
	specialAnimation = true;
	runningStairs = true;
	Debug.Log("trigger stairs");
}

if(triggers.gameObject.tag =="climbLowStart")
{
	specialAnimation = true;
	climbLow = true;
	Debug.Log("trigger climb low");
}

if(triggers.gameObject.tag =="climbMediumStart")
{
	specialAnimation = true;
	climbMedium = true;
	Debug.Log("trigger climb medium");
}

if(triggers.gameObject.tag =="climbHighStart")
{
	specialAnimation = true;
	climbHigh = true;
	Debug.Log("trigger climb high");
}

if(triggers.gameObject.tag =="runningStart")
{
	specialAnimation = false;
	runningStairs = false;
	climbLow = false;
	climbMedium = false;
	climbHigh = false;
	animation.CrossFade("run");
	Debug.Log("trigger running");	
}
}

function Update ()
{
charController.Move(transform.right * -speed * Time.deltaTime);


if(!sliding)
{
charController = GetComponent(CharacterController);
charController.height = 3;
charController.center = Vector3 (0, 1.6, 0);
}

// if pawn is grounded then he is NOT in flying state
if(charController.isGrounded)
{
	flying = false;
}	

// pawn is in flying mode
if(!charController.isGrounded && !jumping && !flying)
{
	charController.Move(transform.up * gravityFall * Time.deltaTime);
	gravityFall -= gravity;
}



//*************************
//
// Keyboards controls for testing
//
//*************************

	// start running mode and unpause the game
if(Input.GetButtonDown("Horizontal"))
{
	Destroy(runButton);
	speed = 8;
	running = true;
	sliding = false;
	flying = false;
	jumping = false;
	idle = false;
}

if(running && !specialAnimation)
{
animation.CrossFade("run");
}

//sliding keybard
if(Input.GetButtonDown("down") && !flying && !jumping && !sliding)
{
	sliding = true;
	flying = false;
	jumping = false;
	running = false;
	idle = false;

	// zmniejsza kolizje postaci 
	charController = GetComponent(CharacterController);
	charController.height = 1.8;
	charController.center = Vector3 (0, 1.1, 0);
}

if(sliding)
{
	speed = 8;
	animation.CrossFade("slideLoop");
}

// jumping KEYBOARD


if(Input.GetButtonDown("up") && !flying && !jumping)
{
	gravityFall = jumpForce;
	flying = true;
	jumping = true;
	sliding = false;
	running = false;
	idle = false;
	animation.Play("jumpStart");
	animation.PlayQueued("jumpLoop", QueueMode.CompleteOthers);
}

if(jumping)
{
	charController.Move(transform.up * gravityFall * Time.deltaTime);
	gravityFall -= gravity * Time.deltaTime;

	if(charController.isGrounded)
	{
		jumpHighLanding ();
	}
}

//*******************************
//
// stany do specjalnych animacji
//
//*******************************

if(runningStairs && charController.isGrounded)
{
	animation["runningStairs"].speed = 3;
	animation.CrossFade("runningStairs");
}

if(climbLow)
{
	animation.CrossFade("climbLow");
}

if(climbMedium)
{
	animation.CrossFade("climbMedium");
}

if(climbHigh)
{
	animation.CrossFade("climbHigh");
}
}



function jumpHighLanding () 
{
animation.wrapMode = WrapMode.Once;
animation.CrossFade("jumpEndHigh");
jumping = false; 
flying = false;
sliding = false;
idle = false;
gravityFall = 0;
// waits for 1 second
yield WaitForSeconds (1);
running = true;
}

 

jakby tam cos poza tym glownym problem bylo dziwnego w kodzie to dajcie znac, toc jestem grafikiem ^^

Odnośnik do komentarza
Udostępnij na innych stronach

Na pierwszy rzut oka obstawiałbym nieporozumienie pomiędzy CharacterControllerem a Rigidbody. Właściwie to używanie obu jest trochę bez sensu. CharacterController jest po to by się poruszać nie przechodząc przez collidery bez grzebania się w fizyce RB. Z kolei jeśli chcesz żeby postać wywierała fizyczny wpływ na elementy otoczenia to lepiej przenieść wszystko do rigidbody, dodać sobie jakieś constrainy i posiedzieć nad płynnym poruszaniem. Teraz rigidbody może mieć problem z załapaniem collidera z CharacterControllera jako swojego. Spróbuj zostawić tylko jeden z tych komponentów.

Odnośnik do komentarza
Udostępnij na innych stronach

wczeniej nie mialem rigidbody a byl ten sam problem wiec poszukalem cos w internecie i pisali wlasnie zeby dodac rigidbody ale to nie pomoglo.

to moze jakis inny pomysl jak napisac zeby automaycznie wskakiwal na przeszkody z animacja i wchodzil sam po schodam?

Odnośnik do komentarza
Udostępnij na innych stronach

Co do kodu proponuję skorzystać z C# - mniejsze prawdopodobieństwo zrobienia sobie buby przez drobne błędy (w C# kompilator dba żeby nie zrobić literówki i nie tylko). Dodatkowo takie serie IFów lepiej zastąpić switch casem, jeśli to możliwe, w przeciwnym wypadku konstrukcjami else if. Myślę, że kod w OnTriggerEnter w pewnych przypadkach nie zachowuje się tak jakby autor się spodziewał.

 

Przechodząc bardziej do sedna sprawy, prawdopodobnie skrypty i rigidbody nie mają tu znaczenia. Obiekty można sobie suwać w edytorze podczas testowania i przy kolizji jakiś event powinien się wykonać. Na screenie widać capsule collider. Ponieważ nie widzę go w propertisach obiektu pewnie jest tworzony dynamicznie. Możliwe, że też pełni rolę triggera. Bardziej jednak prawdopodobne, że ma przypisany tag, który nie zachodzi w kolizję z Twoim tagiem. Do wywołania triggera wymagany jest collider i muszą mieć tagi które się "nie ignorują".

Odnośnik do komentarza
Udostępnij na innych stronach

@nihilplures: CapsuleCollider pochodzi z CharacterController, a kolizje są liczone na layerach, nie na tagach, więc chyba nie tu kłopot.

@ledyr: To może spróbuj tak: Zostaw CharacterControllera do poruszania się, stwórz mu dziecko z Triggerem, Rigidbody i prostym skryptem, który będzie badał kolizje i wysyłał dane do PawnController.

Edit: możesz jeszcze dodać dodatkowy trigger Collider do samego Character Controllera, ale musiałbyś pokombinować trochę z layerami, żeby nie dostawał OnTriggerEnter z kolizji z samym CharacterControllerem (to chyba w sumie łatwiejszy sposób).

Edytowane przez arev
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