【发布时间】:2021-01-04 02:11:08
【问题描述】:
(我是初学者,请耐心等待)。
它需要如何发生:
我有一个可以跳跃并击中瓷砖的玩家,在与瓷砖碰撞时向上移动固定距离,然后以平滑的过渡返回。
我目前所拥有的: 我正在检测碰撞,现在只需上下移动瓷砖即可。
捕获
瓷砖悬浮在空气中,所以基本上它们要么没有 RigidBody2D,要么有一个重力比例为 0 的瓷砖
我的尝试
基本上我已经尝试了 2 个解决方案:
(我不限于这两个,我想实现正确的解决方案,所以我对其他想法持开放态度)
-
我想简单地取当前位置,用另一个位置计算另一个向量,然后 lerp 到新位置,然后 lerp 回到初始位置。
Vector2 initialPosition = transform.position; Vector2 targetPosition = new Vector2(initialPosition.x + 4f, initialPosition.y + 4f); print("Initial position: " + initialPosition); print("Target position: " + targetPosition); Vector2.Lerp(initialPosition, targetPosition, 1f); -
我尝试添加比例为 0 的刚体
private void OnCollisionEnter2D(Collision2D collision) { if (collision.gameObject.tag == "Ground") { Jumping = false; anim.SetInteger("State", 0); } // print("Colision layer: " + collision.collider.gameObject.layer); if (collision.collider.gameObject.layer == Mathf.Log(layerMask.value, 2)) { GameObject Tile = collision.gameObject; Rigidbody2D rigidBody = Tile.GetComponent<Rigidbody2D>(); rigidBody.gravityScale = 1; rigidBody.AddForce(new Vector2(0, 10f), ForceMode2D.Force); StartCoroutine(MoveTileWithForce(rigidBody)); } } IEnumerator MoveTileWithForce(Rigidbody2D TileRigidBody) { yield return new WaitForSeconds(1); TileRigidBody.AddForce(new Vector2(0, -5f), ForceMode2D.Force); TileRigidBody.gravityScale = 0; print("END MY COROUTINE, gravityScale: " + TileRigidBody.gravityScale); }
【问题讨论】: