Autor Wątek: Dziwne zachowanie obiektu po dłuższej kolizji  (Przeczytany 1192 razy)

Offline Pika

  • Użytkownik

# Styczeń 11, 2015, 20:07:59
Witam robię prostą grę na androida gdzie steruję kulka przy pomocy akcelerometru, wszystko działa jak powinno ale gdy kulka zbyt długo  "napiera" na ścianę zaczyna się dziać coś dziwnego tj "drży" jakby i tracę nad nią częściowo sterowanie;/ wie ktoś co to może być? Przepraszam za błędy jestem nowy na forum:) Poniżej zamieszczam kod od sterowania na boki.
if ((collided_with == null && Input.acceleration.x > 0.12)) {
transform.Translate (1 * predkosc * Time.deltaTime, 0, 0);
} else if (collided_with != null && collided_with.gameObject.tag=="LeftBumper" && Input.acceleration.x > 0.12) {
transform.Translate (1 * predkosc * Time.deltaTime, 0, 0);
}
if ((collided_with == null && Input.acceleration.x < -0.12) ) {
transform.Translate (-1 * predkosc * Time.deltaTime, 0, 0);
} else if (collided_with != null && collided_with.gameObject.tag=="RightBumper" && Input.acceleration.x < -0.12) {
transform.Translate (-1 * predkosc * Time.deltaTime, 0, 0);
}


// ort. -Xirdus
« Ostatnia zmiana: Styczeń 11, 2015, 20:09:00 wysłana przez Xirdus »

Offline Mr. Spam

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

Offline piechota

  • Użytkownik

# Styczeń 12, 2015, 19:37:45
Spróbuj zamiast
transform.Translate()użyć
rigidbody.MovePosition()
Transform nie używa silnika fizycznego do przemieszczenia, czyli wszystkie rigidbody i collidery są ignorowane, dopiero w następnej klatce orientuje się, że jest w colliderze i cię cofa, stąd drżenie.

Jak to nie pomoże możesz spróbować zwiększyć update fizyki [Edit -> Project Settings -> Time -> Fixed Timestep], im mniejsza wartość tym częściej będzie liczona fizyka.

Offline Pika

  • Użytkownik

# Styczeń 16, 2015, 14:32:55
Dzięki za podpowiedź , pomogła troszkę zmiana metody lecz wtedy przy ruchu na boki drżała, gdy zmieniłem timestep jest lepiej lecz przy kolizji kulka całkiem wariuje w sensie leci w dobrym kierunku ale z losową prędkością, próbowałem już wszystkiego czasem lepiej czasem gorzej ale nie da się tego opanować;/
oto fragment do ruchu w prawo, możne robię coś źle:
if ((collided_with == null && Input.acceleration.x > 0.12)) {
rigidbody.MovePosition(new Vector3 ( rigidbody.position.x +predkosc * Time.deltaTime, 0, 0));
//Aktualizacja
Poradziłem sobie w miarę teraz tylko nie wiem czemu przy kolizji kulka zaczyna bardzo szybko ociekać w tył i w prawo vector 3 jakby sam rośnie w x i maleje w z;/ nie mam tego nigdzie w kodzie więc nie wiem za bardzo jak to opanować ewentualnie zablokować coś co to powoduje
//aktualizacje 2
Poradziłem sobie z dziwnym zachowaniem, w ridgibody wystarczyło zmienić wartość drag z 0 na 10, podejrzewam ze 0 powodowało błędy w liczeniu. teraz piłka ucieka w tył lecz przy oderwaniu od ściany wraca do poprawnej pozycji. Chciałbym także wyeliminować minimalne drżenie lecz nie przy pomocy czasu, o ile to jest możliwe:)
« Ostatnia zmiana: Styczeń 18, 2015, 15:48:46 wysłana przez Pika »