我希望玩家只有在从侧面接触地面时才能弹离地面,这样玩家就不会在碰撞时卡住,也不会在站在地面上时弹离地面。玩家使用方块碰撞器2D,地面使用Tilemap碰撞器2D和复合碰撞器2D。
我尝试使用Physics Material 2D,但它会导致玩家在所有方面反弹。为了确定玩家接触地面的位置以及该点是否垂直于Vector2,我尝试使用OnCollisionEnter2D和GetContact。但是,结果仍然不好。该脚本看起来像这样:
using UnityEngine;
public class BouncyGround : MonoBehaviour {
public float bounceForce = 10f;
private void OnCollisionEnter2D(Collision2D collision) {
if (collision.gameObject.CompareTag("Player")) {
Vector2 normal = collision.GetContact(0).point;
if (Mathf.Abs(Vector2.Dot(normal, Vector2.up)) < 0.1f) {
Vector2 direction = new Vector2(collision.transform.position.x, collision.transform.position.y)
- collision.contacts[0].point;
direction.Normalize();
collision.gameObject.GetComponent<Rigidbody2D>().AddForce(direction * bounceForce, ForceMode2D.Impulse);
}
}
}
}
1条答案
按热度按时间jm81lzqq1#
我修复了它。对于任何人想知道,我使用平台效应器2d,uncheked使用单向选项,并点击复合碰撞器2d上的效应器使用