void OnSideCollisionDelegate(SmartCollision2D collision, GameObject collidedObject) { if (collidedObject.tag == "Ball") { Debug.Log("collidedObject:" + collidedObject.name); } }
void OnSmartCollisionStay2D(SmartCollision2D collision) { //NOTE: dot product will be 1 if collision in perpendicular and opposite facing direction and 0 if horizontal and < 0 if perpendicular but in the same direction as facing direction float dot = Vector3.Dot(transform.up, -collision.relativeVelocity); if (dot > 0) { m_fixedUpdatesToRemoveActivator = 4; m_rigidBody = collision.rigidbody; m_rigidBody2D = collision.rigidbody2D; m_platformCtrl = collision.gameObject.GetComponent <PlatformCharacterController>(); if (!m_isActivated) { m_isActivated = true; Open.SetActive(!m_isActivated); Close.SetActive(m_isActivated); m_activationTime = ActivationTime; m_activator = collision.gameObject; m_activatorPos = new Vector2(0f, float.MaxValue); } } }
private void OnSideCollision(SmartCollision2D collision, GameObject collidedObject) { if (collision.impulse.y != 0) { m_slopeAngle = Vector2.Angle(collision.contacts[0].normal, Vector2.right) - 90f; } Vector3 velocity = m_platformPhysics.Velocity; // Reset vertical speed on opposite vertical collision if (collision.impulse.y > 0f && velocity.y < 0f || collision.impulse.y < 0f && velocity.y > 0f) { velocity.y = 0f; } // Reset horizontal speed on opposite horizontal collision if (collision.impulse.x > 0f && velocity.x < 0f || collision.impulse.x < 0f && velocity.x > 0f) { velocity.x = 0f; } m_platformPhysics.Velocity = velocity; }