BoxCollider2D coll; Vector2 collStandSize, collStandOffset, collCrouchSize, collCrouchOffset; Vector2 headRayPos, headOffset; bool isCrouch; Public LayerMask groundLayer; //吧地面拖进来,别忘了给地面加一个专属的Layer void Start() { coll = GetCompent<BoxCollider2D>(); collStandSize = coll.size; //获取一开始的碰撞体大小 collStandOffset = coll.offset; //获取一开始的碰撞体位置 collCrouchSize = new Vector2(coll.size.x, coll.size.y / 2); //获取下蹲时候的碰撞体大小 collCrouchOffset = new Vector2(coll.offset.x, coll.offset.y / 2); //获取下蹲时候的碰撞体位置 headOffset = new Vecotr2(0f, coll.size.y); //偏移量 headRayPos = transform.position + headOffset; //头顶的位置 } void FixedUpdate() { Crouch(); //下蹲函数 } void PhysicsCheck() { RaycastHit2d headCheck = Raycast(headRayPos, Vector2.up, 0.1f, groundLayer); //在头顶上创建一个长度为0.1的射线 if(headCheck) StandUp(); //调用站立函数 } void Crouch() { if(Input.GetButton("Crouch")) { isCrouch = true; coll.size = collCrouchSize; coll.offset = collCrouchOffset; } } void StandUp() { coll.size = collStandSize; coll.offset = collStandOffset; isCrouch = false; } RaycastHit2D Raycast(Vecotr2 offset, Vector2 rayDiraction, float length, LayerMask layer) { RaycastHit2D hit = Physics2D.Raycast(offset, rayDiraction, length, layer); return hit; }