我正在为一个字符统一编码一个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