Skocz do zawartości

Rekomendowane odpowiedzi

  • Odpowiedzi 595
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Napisano

nie wiem czemu piszecie o cle - Unity Technologies zarejestrowane jest w Unii Europejskiej (Dania) a zakup licencji to tzw transakcja wewnątrzwspólnotowa - nie płacisz euro Vatu 25% ale też nie możesz odliczyć od Vatu później

 

nie ma mowy o żadnym cle

 

jak poprosicie to dostaniecie fakturę w formie pisemnej i w formie skanu, ale i tak będziecie musieli wystawić tzw fakturę wewnętrzną

Napisano

Pytanie do moderatorów, czy zostanie utworzony dział Unity3d (albo Silniki gier) na forum? Akurat znalazłem temat o Unity i musiałem się przedrzeć przez 27 podstron co było niezbyt wygodne ;)

Napisano
Przez dwa lata.

Bo tak prawdę mówiąc ciężko znaleźć ten temat tutaj. Ja trafiłem na niego przypadkiem z googli. Wydaje mi się, że warto byłoby chyba zrobić ogólne podforum "Silniki gier".

Gość Chrupek3D
Napisano (edytowane)

Czy posiadając wersje Unity na Mac'a i chcąc robić gry na Androida, muszę kupić wersje Androidowa na Mac'a - o ile jest taka wersja? (juz wiem, ze jest)

Planuje kupić Mac'a i zastanawiam sie jak to jest z wypuszczaniem gier na Androida spod Mac'a.

Orientuje sie ktos w temacie?

Edytowane przez Chrupek3D
Napisano

Chrupek3D: Zainstaluj na Mac'u także widnowsa i po sprawie:] nawet jak będziesz miał licencje na PRO to możesz zainstalować i na OSX i WIN gdyż to jedno stanowisko. Oczywiście to się wiąże z cena Widnowsa. A konkretnie to osobiście nie pomogę w tym pytaniu, gdyż po prostu ich waise niszt :] Dla mnie droga z Unity3D była inna - aby robić gry na iOS musiałem przejść na OSX.

Gość Chrupek3D
Napisano

mam dokładnie to samo, a raczej pragnę podążać tą samą ścieżką ;)

hmmm windows na Macu... pójdziesz do piekła, zobaczysz :D

Napisano

SZALEŃSTWO!

 

Unity 3D iOS Basic i Android Basic za darmo do 8 kwietniaaaaaa!

Bierzcie wszyscy, na potem bo teraz im serwery lekko przymierają.

Napisano

nie chce mi sie googlać ale dam sobie Twoją rękę obciąć, ze pod hasłem 'import do Unity' znajdziesz wieksza czesc odpowiedzi na to troche zbyt ogolne pytanie.

Napisano

Jeszcze mam jeden problem. Jak przyblizyc do mojego terrain. Bo oteksturowalem na zielono i chciałbym dokładniej teraz go oteksturowac, dodac jakies assety itp. I nie moge tak blisko przybizyc zeby zrobic to precyzyjnie.

Przepraszam jeśli to banalne pytanie ale nie moge tego dojsc

Napisano

jezeli drzewka nie są skądś brane to moja rada by pod kamere z gory przygotowywać drzewa by dobrze wygladały z góry a nie z boku.

Poza tym fajna sprawa ile Ci to zajęło?

Napisano
jezeli drzewka nie są skądś brane to moja rada by pod kamere z gory przygotowywać drzewa by dobrze wygladały z góry a nie z boku.

Poza tym fajna sprawa ile Ci to zajęło?

 

Drzewka robione w sumie na szybko, zeby byly :) planuje je zrobic bardziej w 3D, bo rzucają się w oczy :)

Zrobienie tego zajęło mi... łącznie gdzieś około 4-5 dni :)

Napisano

Sie-ma, jest jakiś sposób na sprawdzenie, w którym kierunku porusza się Character Controller? Rozumiem, że mogę to sobie zrobić np. tworząc w jednej klatce jakiś punkcik, a w następnej sprawdzać kąt pomiędzy punkcikiem a obecną pozycją, ale szukam jakiegoś bardziej ogarniętego sposobu.

 

Generalnie to chcę zrobić tak, aby postać się obracała w tym kierunku, w który idzie - jest jakiś easy-way?

Napisano

Jest bezpośredni dostęp do zmiennej "velocity" - możesz z niej odczytać, ale jest też do tego automat. W "StandardAssets" jest skrypt "PlatformInputController", który robi dokładnie to co chcesz.

Napisano

do platformowki? sprawdzaj czy jest wcisniety lewy czy prawy klawisz jesli lewy to zrob ze left walking true a jesli left walking jest true to niech sie kieruje w okreslona oś etc

no i najlatwiej jesli postac zaczyna od neutralnej strony czyli w strone kamery

Napisano

Ja pisałem z konta Monia, a teraz mam własne to sobie odpowiem z tego, a co.

 

@arev - zmienna velocity odpowiada za szybkość poruszania się, a nie za kierunek. Idąc za Unity Script Reference:

The velocity returned is simply the difference in distance...

 

PlatformInputController odpowiada niestety za ruch platformowy, a ja mam 8 - kierunkowy.

 

@ledyr - nie, nie do platformówki. Z klawiszami tak zrobić nie mogę z różnych powodów, potrzebuję czegoś, co mnie nakierunkuje na to, jak sprawdzić, w która stronę rusza się postać, po prostu.

 

Anybody?

Napisano

Tak tytułem uzupełnienia do poprzednich problemów - PlatformInput tylko się tak zdradliwie nazywa, ale bez przeszkód można go użyć do ruchu 8-way. Natomiast zmienna, o której pisałem jest trójwymiarowym wektorem i posiłkując się cytatem, który znalazłeś - zwraca ci dokładnie kierunek poruszania się :) Z tymi kolizjami to jest pewnie parę rzeczy, które mógłbyś zrobić - użyć eventów, singletona... Opisz dokładniej jak wygląda sytuacja.

Napisano

Jeśli rzeczywiście tak jest, w jaki sposób mam wyciągnąć z niej kierunek chodzenia w Quaternionach? transform.rotation = ?

 

Dalej, jeśli chodzi o kolizje. Mam dookoła gracze różne sześciany - collidery. Jeden z nich to action collider, który odpowiada za to, czy można wykonać jakąś akcję. Przykładowo: podchodzę postacią do dźwigni i jeśli collider koliduje z dźwignią to zwraca mi się true. Skrypt chcę mieć na postaci, więc generalnie przydałoby mi się coś w stylu:

 

function ActionCollider.OnCollisionStay (collider : Collision) {
if (collider.tag == "dźwignia") {
	Cokolwiek();
}
}

Napisano

Obracać postać możesz też za pomocą transform.localEulerAngles - to jest vector3, więc łatwo sobie przeliczyć wektor prędkości z płaszczyzny XZ na rotację w Y.

Co do kolizji - ja bym z tych sześcianów zrobił swego rodzaju sondy. Każdej dał Rigidbody/Trigger i prosty skrypt, mniej więcej taki jak podałeś, który podczas OnCollisionStay (chociaż tu chyba lepiej OnTriggerStay) będzie wysyłał komunikat do skryptu postaci. To jest prosty sposób, a te dodatkowe skrypty na zewnętrznych colliderach nie spowodują żadnego narzutu. Inaczej mógłbyś to zrobić przez np. Physics.SphereCast, ale więcej roboty byłoby z dobraniem się do informacji o tym co trafiłeś no i z optymalizacją, żeby kod nie wykonywał się co klatkę nawet bez kolizji.

Napisano
Sie-ma, jest jakiś sposób na sprawdzenie, w którym kierunku porusza się Character Controller? Rozumiem, że mogę to sobie zrobić np. tworząc w jednej klatce jakiś punkcik, a w następnej sprawdzać kąt pomiędzy punkcikiem a obecną pozycją, ale szukam jakiegoś bardziej ogarniętego sposobu.

 

Generalnie to chcę zrobić tak, aby postać się obracała w tym kierunku, w który idzie - jest jakiś easy-way?

 

Hej

 

Tu masz mój kod, który obraca w danym kierunku i to nawet ze smooth (Lerp)

 


private void rotateLegs ()
{
	if ((horizontalDirection != 0) && (verticalDirection != 0))
	{	
		if ((horizontalDirection > 0) && (verticalDirection > 0))
		{
			if (horizontalDirection > verticalDirection) angleOfLegs = -90 + 45 * (horizontalDirection * verticalDirection) + angleAdd;
			else if (Mathf.Abs(horizontalDirection) == Mathf.Abs(verticalDirection)) angleOfLegs = -135 + angleAdd;
			else angleOfLegs = -90 - 45 * (horizontalDirection * verticalDirection) + angleAdd;
		}		
		else if ((horizontalDirection > 0) && (verticalDirection 			{
			if (horizontalDirection > verticalDirection) angleOfLegs = 0 + 45 * (horizontalDirection * verticalDirection) + angleAdd;
			else if (Mathf.Abs(horizontalDirection) == Mathf.Abs(verticalDirection)) angleOfLegs = -45 + angleAdd;
			else angleOfLegs = 0 - 45 * (horizontalDirection * verticalDirection) + angleAdd;
		}
		else if ((horizontalDirection  0))
		{		
			if (horizontalDirection > verticalDirection) angleOfLegs = 180 + 45 * (horizontalDirection * verticalDirection) + angleAdd;
			else if (Mathf.Abs(horizontalDirection) == Mathf.Abs(verticalDirection)) angleOfLegs = 135 + angleAdd;
			else angleOfLegs = 180 - 45 * (horizontalDirection * verticalDirection) + angleAdd;
		}
		else if ((horizontalDirection 			{
			if (horizontalDirection > verticalDirection) angleOfLegs = 90 + 45 * (horizontalDirection * verticalDirection) + angleAdd;
			else if (Mathf.Abs(horizontalDirection) == Mathf.Abs(verticalDirection)) angleOfLegs = 45 + angleAdd;
			else angleOfLegs = 90 - 45 * (horizontalDirection * verticalDirection) + angleAdd;
		}	
	}
	else
	{
		if (horizontalDirection > 0) angleOfLegs = -90 + angleAdd;
		else if (verticalDirection > 0) angleOfLegs = 180 + angleAdd;
		else if (verticalDirection 			else if (horizontalDirection 			else if  ((horizontalDirection == 0) && (verticalDirection == 0))
		{
			angleOfLegs += angleAdd;
		}
	}

	playerDownTransform.rotation = Quaternion.Lerp(playerDownTransform.transform.rotation, Quaternion.AngleAxis(angleOfLegs, Vector3.up), 0.08f);	
}

 

 

horizontal i verticalDirection to wiadomo - od -1 do 1, czyli kierunek z Input - na klawiaturze nie analogowej będziesz miał całe wartości.

 

Kod ten generalnie oblicza mi kąt nóg (oddzielonych od tułowia), dlatego nie patrz na zmienna angleAdd.

 

Cały pomysł polega na tym: angleOfLegs = 90 + 45 * (horizontalDirection * verticalDirection) - niestety mimo ze mamy koksów w pracy z doktoratami z inżynierii programowania, ten mój pomysł na obliczenie kąta przeszedł bez lepszego pomysłu z ich strony :]

Napisano

function OnTriggerStay (collider : Collider) {
   collider.gameObject.Find("SideColliders").SetActiveRecursively(true);
}

 

O mam sobie taki kod. Chcę żeby przy kolizji uaktywnił się obiekt SideColliders, który jest childem collidera. Coś robię nie tak? Bo mam exception, że takiego obiektu nie ma. Jest. Sprawdzałem 3 razy.

Napisano

spróbuj tak, z glowy pisalem wiec moze byc nie do konca poprawne :)

 

function OnCollisionEnter( other : Collider)

{

var sideCollider : GameObject = GetComponentInChildren(Collider);

if( sideCollider )

sideCollider .enabled = true;

}

Napisano

v0idspace: chyba próbujesz nadpisać "collider" - czyli skrót do collidera dołączonego do obiektu, na którym jest skrypt - colliderem zwracanym przy kolizji z triggerem. Spróbuj zmienić nazwę zmiennej na np. collider2. Poza tym ja jestem zwolennikiem używania referencji do innych obiektów, zwłaszcza że chyba masz je na stałe przypięte do postaci.

Wichur: przekombinowałeś :) Próbujesz zapisać Collider do zmiennej typu GameObject. Poza tym OnCollisionEnter zwraca Collision, a nie Collider.

Tak jak pisałem - zrobić stałą referencję do tego obiektu SideColliders i nie bawić się w wyszukiwanie po nazwie - jest powolne i nieuzasadnione tutaj.

Napisano (edytowane)

Nie mam pojęcia, w jaki sposób miałoby to działać.

 

function OnCollisionEnter( other : Collider) //potrzebuję OnTriggerStay, ale to już mniejsza

{

var sideCollider : GameObject = GetComponentInChildren(Collider); //ustalasz wartość sideCollider o typie GameObject używając funkcji, która zwraca komponent obiektu Collider (którego nie masz, nazwałeś go other)

if( sideCollider ) //?

sideCollider .enabled = true; //SetActiveRecursively akurat potrzebuję, ale tu też mniejsza

}

 

Generalnie wrzucałem do Unity, bo stwierdziłem, że może to ja nie rozumiem, próbowałem to tweakować w różne strony, ale i tak nie widzę w tym sensu. Możesz dokładnie wyjaśnić, co chciałeś zrobić? Ja chcę tylko znaleźć obiekt - dziecko obiektu o danej nazwie, z którym mam kolizję i aktywować go razem ze wszystkimi jego dziećmi. :(

 

EDIT: Nie nie arev, nie mogę zrobić stałej referencji. Generalnie mam sobie duuużo obiektów, z czego każdy ma childrena o nazwie SideColliders, który musi być nieaktywny dopóki nie podejdę blisko.

 

EDIT2: Nadpisywanie collidera to trafna uwaga, zmieniłem na "collidedObject" żeby mi się nie myliło, ale mam tam jeszcze dłuuugi fragment kodu, który korzystał właśnie z "collider" i wszystko jest okej. Anyway, po zmianie na collidedObject ciągle mam null reference exception.

Edytowane przez v0idspace
Napisano

Nie jestem pewien czy dobrze cię rozumiem, popraw jeśli pomieszałem. Jesteś w obiekcie A (na nim działa skrypt). Obiekt A koliduje z obiektem B, który ma jakieś nieaktywne dzieci. Podczas kolizji chcesz aktywować dzieci obiektu B?

Jeśli tak to:

function OnTriggerEnter (other : Collider) {
other.SetActiveRecursively(true);
}

Mam nadzieję, że nie pomyliłem niczego w składni, sam piszę w C# :]

  • Confused 1
Napisano (edytowane)

Aha. Chyba trzeba zastosować Find z Transform, bo z GameObject szuka chyba po całej scenie.

function OnTriggerEnter (other : Collider) {
var sc : Transform;
sc = other.transform.Find("SideColliders");
sc.gameObject.SetActiveRecursively(true);
}

?

 

@dół: : )

Edytowane przez arev
Napisano (edytowane)

1242misiu_dziekuje_stronka-agusi.jpg

 

function OnTriggerStay (collision : Collider) {

var sc : Transform;

sc = collision.transform.Find("SideColliders");

sc.gameObject.SetActiveRecursively(true);

}

 

function OnTriggerExit (collision : Collider) {

var sc : Transform;

sc = collision.transform.Find("SideColliders");

sc.gameObject.SetActiveRecursively(false);

}

 

Generalnie działa i wszystko jest okej, ale wyskakuje mi ciągle ten Null Reference Exception. Tylko, że teraz wyskakuje jak parę razy popodchodzę do tego collidera, on się włączy, wyłączy, i dopiero za jakimś razem ten błąd. Nic złego nie robi, ale czerwono świeci i po mi to tak no. Jakiś pomysł?

Edytowane przez v0idspace
Napisano (edytowane)

@v0idspace: Może za którymś razem kolidujesz z którymś z Side Colliderów, które już nie mają dzieci o nazwie "SideColliders". Dodanie warunku if (sc != null) i zamknięcie w nim SetActiveRecursively powinno załatwić sprawę.

 

p.s. Chyba nie ma potrzeby włączania już włączonego obiektu co ramkę? Zamiast OnTriggerStay Możesz włączać tylko w OntriggerEnter i wyłączać w OnTriggerExit - tak jak masz teraz.

Edytowane przez arev
Napisano
nastepne pytanie. Trawa pokazuje mi sie dopiero gdy podejde do niej blisko. Jak zwiekszyc jej widocznosc?

 

A czy inne obiekty w tej samej odległości widzisz?

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