C# 如何阻止球员部分穿过地面

C# 如何阻止球员部分穿过地面,c#,unity3d,C#,Unity3d,我为一个2d角色制作了一个控制器,我修复了玩家在墙上抖动的问题,但我无法修复玩家在地面上抖动的问题。从多个教程和调整的东西得到了这段代码。如果你有任何建议,我会非常感激,我是新的东西,并在我的第一个游戏工作(不得不漫游,因为我放了太多的代码),谢谢 { 公众浮标的速度、高度; 刚体2d rb; private bool horizontalRight=false; private bool horizontalLeft=false; private bool verticalMove=假; 私有

我为一个2d角色制作了一个控制器,我修复了玩家在墙上抖动的问题,但我无法修复玩家在地面上抖动的问题。从多个教程和调整的东西得到了这段代码。如果你有任何建议,我会非常感激,我是新的东西,并在我的第一个游戏工作(不得不漫游,因为我放了太多的代码),谢谢

{
公众浮标的速度、高度;
刚体2d rb;
private bool horizontalRight=false;
private bool horizontalLeft=false;
private bool verticalMove=假;
私有void Start()
{
rb=GetComponent();
}
无效更新()
{
if(Input.GetAxisRaw(“水平”)>0)
{
水平右=真;
}
else if(Input.GetAxisRaw(“水平”)<0)
{
horizontalLeft=真;
}
if(Input.GetButton(“Jump”)&&rb.velocity.y==0)
{
垂直运动=真;
}
}
私有void FixedUpdate()
{
如果(horizontalRight==真)
{
transform.Translate(Vector2.right*Time.deltaTime*speed);
水平右=假;
}
else if(horizontalLeft==true)
{
transform.Translate(Vector2.left*Time.deltaTime*speed);
水平左=假;
}
如果(垂直移动==真)
{
rb.velocity=新矢量2(0,高度);
垂直移动=假;
}
}
}    

unity中的典型跳跃看起来像:

void Jump()
{
    if (_isGrounded == true)
    {
        rb.AddForce(Vector2.up * _jumpSpeed);
        _isGrounded = false;
    }
}
如果发生碰撞

void OnCollisionEnter (Collision hit)
{
    _isGrounded = true;
}

这将限制您何时可以使用跳转。

unity中的典型跳转如下所示:

void Jump()
{
    if (_isGrounded == true)
    {
        rb.AddForce(Vector2.up * _jumpSpeed);
        _isGrounded = false;
    }
}
如果发生碰撞

void OnCollisionEnter (Collision hit)
{
    _isGrounded = true;
}

这将限制你何时可以使用跳跃。

在你的刚体上激活连续碰撞检测,只要它们以其速度移动,它将阻止它们在物体中移动。

在你的刚体上激活连续碰撞检测,只要它们是以速度移动的,它就会阻止它们在物体中移动

百闻不如一见 “一件事听一百遍并不比看一次好”@Margus等等什么?百闻不如一见 “一件事听一百遍并不比看一次好”@Margus等等什么?