Exemple #1
0
    void ApplyImpulse()
    {
        if (_resetCoroutine != null)
        {
            _resetCoroutine.Abort();
            _resetCoroutine = null;
        }

        // Apply linear impulse force
        if (_applyLinearImpulse)
        {
            _rb.AddLinearImpulse(LinearImpulseDirection * LinearForce);
        }

        // Apply angular impulse force
        if (_applyAngularImpulse)
        {
            // Generate a new random angular impulse
            Vector angularImpulse = new Vector((float)_rng.NextDouble() * AngularVariance.X,
                                               (float)_rng.NextDouble() * AngularVariance.Y,
                                               (float)_rng.NextDouble() * AngularVariance.Z);

            // Apply the angular impulse if it is non-zero
            if (angularImpulse.LengthSquared() > 0.0f)
            {
                _rb.AddAngularImpulse(angularImpulse.Normalized() * AngularForce);
            }
        }

        if ((ResetTimeout > 0.0) && (_applyLinearImpulse || _applyAngularImpulse))
        {
            _resetCoroutine = StartCoroutine(ResetAfterTimeout);
        }
    }
Exemple #2
0
    void ApplyImpulse()
    {
        // Apply linear impulse force
        if (_applyLinearImpulse)
        {
            _rb.AddLinearImpulse(LinearImpulseDirection * LinearForce);
        }

        // Apply angular impulse force
        if (_applyAngularImpulse)
        {
            // Generate a new random angular impulse
            Vector angularImpulse = new Vector((float)_rng.NextDouble() * AngularVariance.X,
                                               (float)_rng.NextDouble() * AngularVariance.Y,
                                               (float)_rng.NextDouble() * AngularVariance.Z);

            // Apply the angular impulse if it is non-zero
            if (angularImpulse.LengthSquared() > 0.0f)
            {
                _rb.AddAngularImpulse(angularImpulse.Normalized() * AngularForce);
            }
        }
    }