Autor Wątek: Anim  (Przeczytany 1094 razy)

Offline FruitNinja

  • Użytkownik

# Wrzesień 01, 2013, 12:50:12
Witam, od nie dawna zacząłem programowanie w skryptów w JS do Unity i tu mam pytanie. Pracuję z kolegą przy małym projekcie, on grafik, ja programista. Chcemy tylko popatrzeć jak działa ten silnik. Ostatnio zastanawiamy się nad animacjami niszczenia obiektu. Np mamy prostą ścianę, chcemy aby auto po uderzeniu w ścianę, niszczyło ścianę i odpalało odpowiednią animację. Czy taki kod jest prawidłowy? Czy są inne, lepsze sposoby na takie kolizje?
OnControllerColliderHit
(hit: ControllerColliderHit)
if (hit.gameObject.name =="nazwa obiektu")
{
animation.Play("walk");
}

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Rokuzo

  • Użytkownik
    • Masz na sprzedaż klucze do cs go?

# Wrzesień 01, 2013, 21:43:10
Dopóki działa to jest prawidłowy. Będzie nie wygodny to przerobisz. Wolny to ulepszysz.
Nie działam w Unity, ale podany fragment wygląda sympatycznie.

Offline koirat

  • Użytkownik

  • +1
# Wrzesień 02, 2013, 03:11:06
Podany fragment nie wygląda dobrze.

Nie ma potrzeby rozpoznawanie obiektu przez nazwę.
Powinineś mieć raczej na obiekcie komponent np. DestroyableComponent czy jak sobie chcesz go nazwać. I ten komponent odpowiadać za zniszczenie ściany (czyli obiektu na którym jest).

pisze w pseudokodzie.
OnControllerColliderHit
(hit: ControllerColliderHit)

DestroyableComponent destroyable = hit.gameObject.GetComponent(typof(DestroyableComponent));
if(destroyable!=null)
      destroyable.Destruction();


Offline Ivian

  • Użytkownik
    • Ivian's Cave

  • +1
# Wrzesień 02, 2013, 12:37:07
Po pierwsze zrezygnuj z js.

Dwa. Najlepiej dla Ciebie będzie kiedy obiekty, które mogą byc niszczone przeniesiesz na jedną warstwę. Potem w matrixie kolizji ustawiasz co może z nimi kolidowac i wtedy wiesz, że OnCollisionEnter() i OnTriggerEnter() wywołaja się wtedy i tylko wtedy, kiedy będzie kolizja z obiektami, które Ty definiowałeś jako kolizyjne dla nich. Po drugie oszczędzasz Physics passy i Raycasty.

Po trzecie, jeśli chcesz, żeby ściana rozpadała się na kawałki, to obawiam się, że animacja nie jest dobrym pomysłem. W moich wewnętrznych testach wypadło, że dopiero 1000 convex meshy (6 vertexów) albo 500 (20 vertexów) zajmuje fizyce 1/60 sekundy. (PC, Intel Core i3 2.3G, GTX 630), więc możesz śmiało rozbić to na meshe i potem zniszczyć (odpalasz Coroutine w triggerze na destroy kiedy wejdzie w sleepa albo np. po 5 sekundach)

@koriat
Co za dużo GetComponent<> w runtime to nie zdrowo (tym bardziej, jeśli spodziewasz się jakiegoś nulla)