RigidBody možemo opisati kao komponentu koja daje fiziku nekom objektu (gravitaciju, brzinu, kinematiku, masu...). Iz takvog razloga koristimo ga unutar void FixedUpdate.
U sljedećem primjeru ćemo postaviti masu zadanom objektu.
public GameObject objekt1;
private Rigidbody rb;
void Start()
{
rb = objekt1.GetComponent<Rigidbody>();
rb.mass = 2; //izrazena je u kilogramima
}
Uz pomoć RigidBody-a možemo uključiti i isključiti gravitaciju.
public GameObject objekt1;
private Rigidbody rb;
void Start()
{
rb = objekt1.GetComponent<Rigidbody>();
rb.useGravity = false; //gravitacija je isključena
}
public GameObject objekt1;
private Rigidbody rb;
void Start()
{
rb = objekt1.GetComponent<Rigidbody>();
rb.useGravity = true; //gravitacija je uključena
}
Na isti način možemo uključiti i isključiti isKinematic.
Ako ga uključimo onda na RigidBody neće utjecati brzina, slia, collisions.
public GameObject objekt1;
private Rigidbody rb;
void Start()
{
rb = objekt1.GetComponent<Rigidbody>();
rb.isKinematic = false; //isKinematic je isključen
}
public GameObject objekt1;
private Rigidbody rb;
void Start()
{
rb = objekt1.GetComponent<Rigidbody>();
rb.isKinematic = true; //isKinematic je uključen
}
Brzina je vektor koji predstavlja trenutnu brzinu objekta koji koristi RigidBody.
Njoj pristupamo tako što napišemo RigidBody.velocity.
U sljedećem primjeru objekt će se micati naprijed po njegovoj lokalnoj poziciji
public GameObject objekt1;
private Rigidbody rb;
void Start()
{
rb = objekt1.GetComponent<Rigidbody>();
}
void FixedUpdate()
{
rb.velocity = transform.forward * 2 * Time.fixedDeltaTime;
}
Ako želimo da se miće za unatrag vrijednost trebamo pomnožiti s negativnim brojem.
public GameObject objekt1;
private Rigidbody rb;
void Start()
{
rb = objekt1.GetComponent<Rigidbody>();
}
void FixedUpdate()
{
rb.velocity = transform.forward * -2 * Time.fixedDeltaTime;
}
Ako želimo da se objket miće desno po svojoj lokalnoj poziciji onda se koristimo s transfrom.right.
public GameObject objekt1;
private Rigidbody rb;
void Start()
{
rb = objekt1.GetComponent<Rigidbody>();
}
void FixedUpdate()
{
rb.velocity = transform.right * 2 * Time.fixedDeltaTime;
}
Ako želimo da se miće lijevo onda onda samo tu vrijednost pomnožimo s nekim negativnim brojem.
public GameObject objekt1;
private Rigidbody rb;
void Start()
{
rb = objekt1.GetComponent<Rigidbody>();
}
void FixedUpdate()
{
rb.velocity = transform.right * -2 * Time.fixedDeltaTime;
}
Ako želimo da se naš objekt kreće prema gore po svojem lokalnom vektoru onda se koristimo s transfrom.up.
public GameObject objekt1;
private Rigidbody rb;
void Start()
{
rb = objekt1.GetComponent<Rigidbody>();
}
void FixedUpdate()
{
rb.velocity = transform.up * 2 * Time.fixedDeltaTime;
}
Ako želimo da se kreće prema dolje onda tu vrijednost pomnožimo s nekim negativnim brojem.
public GameObject objekt1;
private Rigidbody rb;
void Start()
{
rb = objekt1.GetComponent<Rigidbody>();
}
void FixedUpdate()
{
rb.velocity = transform.up * -2 * Time.fixedDeltaTime;
}
Ako želimo da se neki objetk kreće naprijed, unatrag, lijevo, desno, gore ili dolje po svojim globalnim vektorima onda se koristimo s Vector3.forward, Vector3.right...
Za razliku kod transform-a kako bi se micali lijevo, unatrag ili za dolje vrijednost ne moramo množiti s negativnim brojem već samo napišemo Vector3.left...
S obzirom da su vrijednost za svaki smijer jednake u sljedećem primjeru objekt bi trebao ostati na istom mijestu.
public GameObject objekt1;
private Rigidbody rb;
void Start()
{
rb = objekt1.GetComponent<Rigidbody>();
}
void FixedUpdate()
{
rb.velocity = Vector3.forward * 2 * Time.fixedDeltaTime;
rb.velocity = Vector3.back * 2 * Time.fixedDeltaTime;
rb.velocity = Vector3.right * 2 * Time.fixedDeltaTime;
rb.velocity = Vector3.left * 2 * Time.fixedDeltaTime;
rb.velocity = Vector3.up * 2 * Time.fixedDeltaTime;
rb.velocity = Vector3.down * 2 * Time.fixedDeltaTime;
}
Ako želimo da se igrač miče okomito prema desno za napriejd samo trebamo zbrojiti dva vektora odnosno u ovom slučaju transfrom.forward i transfrom.right ili Vector3.forward i Vector3.right.
Istom logikom možemo napraviti da se igrač miče i okomito prema lijevo.
U sljedećem primjeru će se objekt1 micati okomito za desno prema naprijed.
public GameObject objekt1;
private Rigidbody rb;
void Start()
{
rb = objekt1.GetComponent<Rigidbody>();
}
void FixedUpdate()
{
rb.velocity = transfrom.forward * 2 * Time.fixedDeltaTime + transform.right * 2 * Tim.fixedDeltaTime;
}
Sila je akcija koja primjenjuje silu na Rigidbody objekt kako bi se promijenila njegova brzina i kretanje.
Kako bi je koristili samo napišemo AddForce.
Na prvo mijesto napišemo u kojem smijeru želimo da se sila primijeni, a nakon toga vrstu sile.
U sljedećem primjeru ćemo primijeniti silu za gore prema globalnom vektoru pri pokretanju igre, a kao vrstu sile koristi ćemo se Impulseom.
public GameObject objekt1;
private Rigidbody rb;
void Start()
{
rb = objekt1.GetComponent<Rigidbody>();
}
void FixedUpdate()
{
rb.AddForce(Vector3.up * 2, ForceMode.Impulse);
}
Kao vrstu sile imamo Impulse, Force, Acceleration i VelocityChange.
Impulse primjenjuje silu samo tijekom jednog koraka simulacije. Iz takvog se razloga ćesto koristi za skakanje.
Force primjenjuje silu na objekt kao konstantna sila tijekom jednog koraka simulacije.
Acceleration primjenjuje silu tako da ubrzava ili usporava objekt, uz postupno mijenjanje ubrzanja objekta. Sila se primjenjuje tijekom svakog koraka simulacije i može se nakupljati kako bi postupno utjecala na brzinu objekta.
VelocityChange primjenjuje silu kako bi izravno promijenila brzinu objekta, bez obzira na trenutno ubrzanje ili brzinu