【问题标题】:I am trying to stop a sprite sliding after the button is no longer pressed我试图在不再按下按钮后停止精灵滑动
【发布时间】:2019-06-23 11:36:31
【问题描述】:

所以,我想创建一个小平台游戏,其中包含角色、敌人等常见的东西。我添加了一个代码,允许我的角色左右移动,但是当我停止按下与方向相对应的按钮时,精灵继续移动,就好像它在冰上一样。谁能帮我解决这个问题,因为我不知道出了什么问题?

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;
    }
}

【问题讨论】:

    标签: c# button position sprite


    【解决方案1】:

    哦,我明白了。

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

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

    mDTS.movement 将增加。假设这是您第一次按“向右箭头”。假设 mDTS.movement 在按下之前是 (0,0)-vector,现在由于增加它是 (1,0)-vector。 当您释放按钮时,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;
        }
    }
    

    然而,只要你按下按钮,这只会让你的角色快速奔跑,而一旦你松开按钮,角色就会立即静止不动。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      相关资源
      最近更新 更多