[英]Unity2D Tile Physics
我有一些瓷砖,玩家可以通过从下方用头敲击它们来导航和互动。 基本上,当他们跳跃时,他们可以撞到一块瓷砖,那块瓷砖将 go 上升一点,然后回到最初的 position。
由于瓷砖没有 RigidBody2D 因为它们需要悬浮在空气中,所以我对瓷砖上下移动采取了以下方法:
瓷砖.cs
检测与玩家头部的碰撞
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.tag == "Player Head")
{
collidedPlayer = true;
Vector2 upperPosition = new Vector2(transform.position.x, transform.position.y + .40f);
StartCoroutine(MovingBlock(0.35f, transform.position, upperPosition));
isLethal = false;
}
}
移动瓷砖
IEnumerator MovingBlock(float time, Vector2 startpos, Vector2 endpos)
{
float elapsedTime = 0;
while (elapsedTime < time)
{
transform.position = Vector2.Lerp(startpos, endpos, (elapsedTime / time));
elapsedTime += Time.deltaTime;
isLethal = true;
yield return null;
}
elapsedTime = 0f;
while (elapsedTime < time)
{
transform.position = Vector2.Lerp(endpos, startpos, (elapsedTime / time));
elapsedTime += Time.deltaTime;
isLethal = false;
yield return null;
}
isLethal = false;
}
在某些情况下,多个图块相互堆叠,当玩家跳跃并击中一个图块时,该图块也必须击中其顶部的图块,依此类推,最终其他图块在顶部。
第 8 层是 Tile 层 - 我正在检查 isLethal 因为我现在是下面的瓷砖跳跃的时候
private void OnCollisionEnter2D(Collision2D collision)
{
// print("Layer: " + collision.gameObject.layer);
// print("Name: " + collision.gameObject.name);
// print("Is lethal: " + isLethal);
if (collision.gameObject.layer == 8 && isLethal)
{
print("tile to tile");
Vector2 upperPosition = new Vector2(collision.transform.position.x, collision.transform.position.y + .40f);
StartCoroutine(MovingBlock(0.35f, collision.transform.position, upperPosition));
}
}
我似乎无法弄清楚这一点,我什至尝试添加 RigidBody 并且没有 Gravity Scale,但这有问题。 我愿意接受任何形式的修复,甚至是不同的逻辑。
您是在构建关卡还是随机生成关卡? 如果你正在建造它们,你应该能够为每个你想要受到影响的瓷砖制作一个更长的碰撞器,直到最低可击打瓷砖。 如果您是随机生成的,可以尝试从每个图块发送光线投射,检查其他可命中图块,并在命中发生时在它们之间发送 function 调用以启动移动块协程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.