// 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();
    }
Esempio n. 2
0
    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);
    }