我试图停止不再按下按钮后的精灵滑动

时间:2019-06-23 11:36:31

标签: c# button position sprite

因此,我想创建一个小平台游戏,其中包含角色,敌人等普通物品。我添加了一个代码,该代码允许角色向左和向右移动,但是当我停止按与方向对应的按钮时,小精灵会像在冰上一样继续移动。谁能帮我解决这个问题,因为我一无所知,出了什么问题?

public float speed = 2f;
Rigidbody2D mRB2D;
datasheet mDTS;

// Start is called before the first frame update
void Start()
{
    mDTS = GetComponent<datasheet>();
    Debug.Assert(mDTS != null, "require datasheet");
}

// Update is called once per frame
void Update()
{
    float tHorizontal = Input.GetAxis("Horizontal");
    //float tVertical = Input.Get
    mDTS.movement += (Vector2)transform.right * speed * tHorizontal * Time.deltaTime;
}

public float max_ms = 6f;    
public Vector2 movement = Vector2.zero;

// Start is called before the first frame update
void Start()
{

}

// Update is called once per frame
void Update()
{
    transform.position += (Vector3)movement * Time.deltaTime;
}

private void LateUpdate()
{
    SpeedClamp();

}

void SpeedClamp()
{
    if (movement.magnitude > max_ms)
    {
        movement = movement.normalized * max_ms;
    }
}

1 个答案:

答案 0 :(得分:0)

哦,我明白了。

您按“向右箭头”按钮。 现在,看这一行:

mDTS.movement += (Vector2)transform.right * speed * tHorizontal * Time.deltaTime;

mDTS.movement将增加。假设这是您第一次按“向右箭头”。假设mDTS.movement在按下之前为(0,0)-矢量,现在由于增加而为(1,0)-矢量。 释放按钮时,mDTS.movement将不会再次设置为0。

没有“中断”。无摩擦。您要做的是(类似这样):

float friction = 0.95f;
float halt_speed = 0.05f;
void SpeedClamp()
{
    if (movement.magnitude > max_ms)
    {
        movement = movement.normalized * max_ms;
    }
    movement = movement * friction;
    if (movement.magnitude < halt_speed)
        movement = Vector2.Zero;
}

使用此代码,角色每次更新都会变慢。当您不再加速时,就像在路上的汽车。只是滚动而不会断裂。

如果您不希望有任何“冰效应”,只需在释放按钮后立即将运动矢量设置为零即可。喜欢:

// Update is called once per frame
void Update()
{
    float tHorizontal = Input.GetAxis("Horizontal");
    //float tVertical = Input.Get
    if (tHorizontal != 0.0f) {
        mDTS.movement += (Vector2)transform.right * speed * tHorizontal * Time.deltaTime;
    } else {
        mDTS.movement = Vector2.Zero;
    }
}

但是,只要您按下按钮,此角色就只会使您的角色快速运行,而一旦松开按钮,角色将立即静止不动。