// Update is called once per frame public override void FixedUpdate() { float deltaTime = Time.fixedDeltaTime; AddForce(ForceGenerator3D.GenerateForce_Gravity(Mass, m_Gravity, Vector3.up)); if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.E)) { AddThrust(deltaTime, new Vector3(-m_ThrusterDistFromCenter, 0)); } if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.E)) { AddThrust(deltaTime, new Vector3(m_ThrusterDistFromCenter, 0)); } if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.E)) { AddThrust(deltaTime, new Vector3(0, 0, m_ThrusterDistFromCenter)); } if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.E)) { AddThrust(deltaTime, new Vector3(0, 0, -m_ThrusterDistFromCenter)); } if (m_LastContact != null) { HandleJustCollided(deltaTime); m_LastContact = null; } if (Vector3.Dot(transform.up, Vector3.up) < 0 && m_LastContact == null) { m_UpsidedownSinceContact = true; } base.FixedUpdate(); }
public override void FixedUpdate() { Vector3 surfNorm = new Vector3(0.1f, 1.0f, 0.0f).normalized; Debug.DrawRay(Vector3.zero, surfNorm); Vector3 gravForce = ForceGenerator3D.GenerateForce_Gravity(Mass, -9.81f, Vector3.up); AddForce(gravForce); Vector3 normForce = ForceGenerator3D.GenerateForce_Normal(gravForce, surfNorm); AddForce(normForce); Vector3 frictionForce = ForceGenerator3D.GenerateForce_Friction_Static(surfNorm, -surfNorm, 0.8f); //AddForceAtPoint(frictionForce); base.FixedUpdate(); }
private void HandleJustCollided(float deltaTime) { Vector3 torqueChange = Quaternion.Lerp(m_Rotation, Quaternion.identity, 0.1f).eulerAngles; torqueChange.y = 0; for (int i = 0; i < 3; i++) { if (torqueChange[i] > 180.0f) { torqueChange[i] = torqueChange[i] - 360.0f; } } if (Vector3.Dot(m_AngularVelocity, torqueChange) > 0.0f) { m_Torque -= m_AngularVelocity * 0.4f * Mass; } m_Torque -= torqueChange * deltaTime; m_AngularVelocity *= 1.0f - deltaTime; AddForce(ForceGenerator3D.GenerateForce_Friction_Kinetic(Vector3.up, m_Velocity, 0.7f) * Mass * -m_Gravity); }