Unity2D使用transition上下移动平铺



我想创建一个类似于马里奥瓷砖的功能。所以基本上,玩家会跳起来,用头击打瓷砖,碰撞发生,我希望瓷砖能平稳地向上移动,然后向下移动到初始位置。

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

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也不会做任何事情。

您应该使用动画,并使用录制按钮更改平铺的transform.position并保持对撞机关闭(如果需要的话(。通过这种方式,当玩家击中瓷砖时,你应该尝试做一些类似的事情

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

在动画师中,应该使用MovingTileUpAndDown参数从空闲状态(平铺保持静止(和bonk过渡进行转换,然后可以在不使用该参数和设置为平铺移动动画持续时间的HasExitTime的情况下将转换放回空闲或任何所需的状态。

最新更新