首页 > 解决方案 > Unity2D 使用过渡上下移动平铺

问题描述

我想创建一个类似于马里奥瓷砖的功能。所以基本上玩家会跳跃,用头部撞击瓷砖,发生碰撞,我希望瓷砖平滑地向上移动并返回到它的初始位置。

玩家有玩家标签。瓷砖位于瓷砖层上。 保存在 layerMask 变量中

 private void OnCollisionEnter2D(Collision2D collision)
{
    // print("Colision layer: " + collision.collider.gameObject.layer);

    if(collision.collider.gameObject.layer == Mathf.Log(layerMask.value, 2))
    {
        GameObject Tile = collision.gameObject;
        Vector3 initialPosition = new Vector3(Tile.transform.position.x, Tile.transform.position.y, Tile.transform.position.z);
        print("initial pos: " + initialPosition);

        Tile.transform.Translate(Vector3.up * 15f * Time.deltaTime, Space.World);
        Vector3 newPosition = new Vector3(Tile.transform.position.x, Tile.transform.position.y, Tile.transform.position.z);
        print("new pos: " + newPosition);

        Tile.transform.position = Vector3.Lerp(newPosition, initialPosition, 50f * Time.deltaTime);

        // Tile.transform.Translate(Vector3.down * 15f * Time.deltaTime, Space.World);
    }
}

基本上它会向上移动瓷砖,但不会向下移动,最后一行被注释掉的代码确实有效,但没有过渡,所以它会立即发生,而 Lerp 不做任何事情。

标签: unity3d

解决方案


您应该使用动画并使用记录按钮更改图块的 transform.position 并保持对撞机向下(如果这是您需要的)。这样,当玩家击中瓷砖时,您应该尝试做这样的事情

void OnCollisionEnter2D(Collision2D collision)
{  if(collision.gameObject.layer == Tile) // I'm not sure this is the layer
          { animator.setTrigger(MovingTileUpAndDown);
          }
}

在动画师中,您应该使用 MovingTileUpAndDown 参数从空闲条件(图块保持静止)和邦克过渡放置一个过渡,然后您可以在没有参数和 HasExitTime 设置为瓷砖移动动画的持续时间。


推荐阅读