Kinematik Cisimler
Coddy'nin Unity Journey'sinin Fizik ve Oynanış bölümünün bir parçası. Ders 6 / 63.
Hareketli platformlar, asansörler ve kapılar katı nesneler gibi çarpışmalı, ancak üzerlerine ne düşerse düşsün düşmemeli veya itilip hareket ettirilmemelidir. Buna kinematik gövde denir: rb.isKinematic = true ayarını yapın; böylece yerçekimi, kuvvetler ve darbeler artık onu hareket ettirmez. Çarpıştırıcısı yine de hesaba katılır; bu nedenle dinamik bir gövde (fiziğin hareket ettirdiği bir gövde) ona bir duvara çarpar gibi çarpar ve zemine basar gibi üzerinde durur. Kinematik bir gövdeyi rb.MovePosition ile kendiniz hareket ettirirsiniz.
Bu asansör, top noktasına ulaşana kadar saniyede lift m hızla yükselir. MovePosition, bu adımdan sonra bulunacağı konumu alır; bu nedenle kod, Time.fixedDeltaTime kullanarak bir adımlık hareket miktarını ekler:
void Start()
{
rb = GetComponent<Rigidbody>();
rb.isKinematic = true;
}
void FixedUpdate()
{
if (rb.position.y < top)
{
rb.MovePosition(rb.position + Vector3.up * lift * Time.fixedDeltaTime);
}
}Neden transform.position ayarlamıyorsunuz? Bu, nesneyi ışınlar ve fizik, hareket ettiğini hiçbir zaman öğrenemez: kayan bir platformun üzerindeki sandık, platformla birlikte taşınmak yerine geride kalır. MovePosition, fiziğe gövdenin adım sırasında yeni konumuna gittiğini bildirir; böylece temas ettiği nesneler düzgün biçimde taşınır ve itilir. AddForce kinematik bir gövdede hiçbir işe yaramaz; ayrıca kinematik gövdeler statik çarpıştırıcılarla veya birbirleriyle asla çarpışmaz: yalnızca dinamik gövdeler onlara çarpar.
Görev
KolayMavna lavın üzerinde asılı duruyor ve ok tuşları onu x ekseni boyunca speed m/s hızla (Inspector'da 2) sağa ve sola kaydırmalı. Şu anda Rigidbody'si sıradan bir Rigidbody olduğu için lavın içine düşüyor.
- Oyun başladığında mavnayı kinematik yap, böylece havada asılı kalır ve ona çarpan hiçbir şey onu itemez.
- Ham Horizontal eksenini kullanarak
FixedUpdate()içindeMovePositionile hareket ettir.
Play'e basıp mavnayı kaydır, ardından Check'e bas.
Kendin dene
using UnityEngine;
public class Barge : MonoBehaviour
{
public float speed = 2f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
// Mavnayı kinematik yap
}
void FixedUpdate()
{
// Ok tuşlarıyla mavnayı x ekseni boyunca kaydır
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Fizik ve Oynanış bölümündeki tüm dersler
1Rigidbody
Yerçekimi ve KütleAddForce ile İtmeDürtüyle ZıplamaFizik için FixedUpdateHızKinematik CisimlerTekrar: Fırlatma Rampası2Çarpışmalar
OnCollisionEnterNeye Çarptım?Çarpınca KırılYerde DurmakSekme ve SürtünmeCollider ŞekilleriTekrar: Kırılabilir Duvar