Obecnie pracuję nad grą Air Hockey w Unity3d. Problem, który mam, polega na tym, że kiedy gracz próbuje zbyt szybko trafić krążek, gracz kończy przechodzenie przez krążek i dlatego nie ma kolizji. Gra działa idealnie zgodnie z oczekiwaniami, jeśli gracz pozostaje nieruchomy, a krążek uderza w gracza lub gracz uderza w krążek w wolnym tempie.Gra w cymbergaja - gracz nietoperz przechodzi przez krążek, jeśli porusza się zbyt szybko.
Odtwarzacz ma sztywną bryłę za pomocą ciągłej detekcji kolizji przy użyciu zderzacza kapsułkowego. Krążek ma również sztywny korpus z ciągłą dynamiczną detekcją kolizji i zderzaczem siatkowym z wypukłym.
Próbowałem ustawić ustalony czas na 0.01, ale to nie miało żadnego efektu. Oto scenariusz dla ruchu gracza:
void ObjectFollowCursor()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
Vector3 point = ray.origin + (ray.direction * distance);
Vector3 temp = point;
temp.y = 0.2f; // limits player on y axis
cursorObject.position = temp;
}
i tutaj jest kod na krążek, gdy zderza się z odtwarzacza:
// If puck hits player
if(collision.gameObject.tag == "Player")
{
Vector3 forceVec = this.GetComponent<Rigidbody>().velocity.normalized * hitForce;
rb.AddForce(forceVec, ForceMode.Impulse);
Debug.Log ("Player Hit");
}
Każda pomoc będzie mile widziane. Dzięki.
Skąd czerpiesz zmienną odległości? –
po prostu służy do ograniczenia dystansu, jaki gracz może przenieść na stole. – GraMas