unity3d 如何让Unity中的2D游戏中的玩家根据他接触地面碰撞器的Angular 弹离地面?

pod7payv  于 2023-03-30  发布在  Angular
关注(0)|答案(1)|浏览(159)

我希望玩家只有在从侧面接触地面时才能弹离地面,这样玩家就不会在碰撞时卡住,也不会在站在地面上时弹离地面。玩家使用方块碰撞器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);
            }
        }
    }
}
jm81lzqq

jm81lzqq1#

我修复了它。对于任何人想知道,我使用平台效应器2d,uncheked使用单向选项,并点击复合碰撞器2d上的效应器使用

相关问题