2D控制器的固定斜率运动(Unity)

时间:2019-11-24 03:11:28

标签: c# unity3d controller 2d

我正在为一个字符统一编码一个2D控制器。 我是第一次没有物理或刚性物体工作,我有点迷失了。现在,我的控制器可以在平坦的表面(垂直和水平)上正常工作,但是我在倾斜方面遇到了问题。

首先,我使用带有x和y速度的Vector2来调用移动更新。

代码如下:

'''

public void Move(Vector2 velocity){
    localVelocity = velocity;
    transform.Translate (localVelocity);
    grounded= false;
    characterCollsions ();
}

'''

在这里进行碰撞检查:

'''

public void characterCollsions (){
Collider2D[] hitElements = Physics2D.OverlapBoxAll(transform.position, boxCollider.size, 0, playerColisionsLayer);

    foreach (Collider2D hit in hitElements)
    {

        //Let's exclude his own hitbox
        if (hit == boxCollider)
            continue;


            ColliderDistance2D colliderDistance = hit.Distance(boxCollider);
            DebugDraw.DrawMarker(colliderDistance.pointA,1.0f, Color.red, 0.0f, false);
            Debug.DrawRay(transform.position,colliderDistance.normal);

            if (colliderDistance.isOverlapped)
            {

                //if the character is inside the collider get it out
                transform.Translate(colliderDistance.pointA - colliderDistance.pointB);

               //Check for ground

                if (Vector2.Angle(colliderDistance.normal, Vector2.up) <90 )
                {   

                    collision.below = true;
                    anim.SetBool("isGrounded",true);
                    grounded = true; 

                }

            }


    }

}

'''

这会在坡道上产生两个问题,下坡时字符“跳”,而在静止时下滑。当我站在斜坡上时,我尝试将Velocity.y设置为0,但这是行不通的。

编辑: 有两个问题的Gif https://gyazo.com/7137f60096a297d28eb7d12cb49d7eaa

0 个答案:

没有答案