/// <summary> /// 床を通り抜けて飛び降りる /// IgnoreCollisionController2D コンポーネントがアタッチされた床をすり抜けることができる /// </summary> /// <returns>足下の床が通り抜けられるものだった場合 true, 飛び降りることができない床だった場合 false を返す</returns> bool DropDownFloor() { // 自分が立っている床がすり抜けられる床だったら、自分との衝突判定を無効にする m_floorCollisionDisabled = m_floorStandingOn?.GetComponent <IgnoreCollisionController2D>(); m_floorCollisionDisabled?.IgnoreCollision(m_collider, true); // 注: プレイヤーのコライダーが一つであることを前提としている return(m_floorCollisionDisabled); }
void FixedUpdate() { bool isGrounded = IsGrounded(); // 衝突判定を無効にした床を通り抜けたら、無効にした判定を戻す if (m_floorCollisionDisabled) { if (!isGrounded) { m_floorCollisionDisabled.IgnoreCollision(m_collider, false); m_floorCollisionDisabled = null; } } // 空中制御処理 if (!isGrounded && ((m_h > 0 && m_rb.velocity.x < m_runSpeed) || (m_h < 0 && -1 * m_runSpeed < m_rb.velocity.x))) { m_rb.AddForce(m_h * m_movePowerInTheAir * Vector2.right); } }