unity3d - 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 不做任何事情。
解决方案
您应该使用动画并使用记录按钮更改图块的 transform.position 并保持对撞机向下(如果这是您需要的)。这样,当玩家击中瓷砖时,您应该尝试做这样的事情
void OnCollisionEnter2D(Collision2D collision)
{ if(collision.gameObject.layer == Tile) // I'm not sure this is the layer
{ animator.setTrigger(MovingTileUpAndDown);
}
}
在动画师中,您应该使用 MovingTileUpAndDown 参数从空闲条件(图块保持静止)和邦克过渡放置一个过渡,然后您可以在没有参数和 HasExitTime 设置为瓷砖移动动画的持续时间。
推荐阅读
- amazon-web-services - 无法访问 AWS SFTP 服务器中的主文件夹
- java - 替代方案 java jre 与 jdk
- python-3.x - How to solve this optimization problem with cvxopt
- javascript - 什么是字数组?
- sql - 根据日期范围计算天数
- apache-drill - Drill 支持 FILTER WHERE 吗?
- python - 无法在 Django Production 中加载静态文件
- node.js - flex GAE 上的 NodeJS 中用于繁重转码任务的多线程
- javascript - 无法访问数组中的数据,name[0] 未定义
- shell - 如何在 Hadoop 中转义 ".\file_name" 以将其重命名为 "file_name" ,我尝试了一些类似的示例,但没有任何帮助