如何在统一2d中从墙排斥球?

时间:2018-07-05 10:04:01

标签: c# unity3d

我与球统一创建了一个2d游戏。游戏很简单。侧面有墙,每面墙都有自己的对撞机。每个人都有一个标签“ Wall”。

还有球。他具有圆形对撞机2d和刚体2d。然后,我创建了材料物理2d,并将其连接到刚体。在材料物理2d中,我将“摩擦力”设置为“ 0”,将“弹跳性”设置为“ 1”。现在,当球碰到墙壁时,它就会击退。但有一个问题。如果球的速度低,则碰到墙壁时,他只会停下来。

enter image description here    []

还有2个问题。如果球以较小的角度接触墙壁,则它不会沿着红线而是沿着蓝线(照片中的示例)

enter image description here

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Ball : MonoBehaviour {

public float speedBall = 15f;

private Rigidbody2D rb2d;
private Vector2 vel;

void Start () {
    rb2d = gameObject.GetComponent<Rigidbody2D> ();
    Invoke ("BallBouncing", 0.5f);
}

void Update () {

}

void BallBouncing() {
    rb2d.AddForce (new Vector2(15, 15).normalized * speedBall);
}

void OnCollisionEnter2D(Collision2D obj) {
    Vector2 direction = gameObject.GetComponent<Rigidbody2D> ().velocity;
    Vector2 normal = obj.contacts [0].normal;
    rb2d.AddForce(Vector2.Reflect(direction, normal));
}
}

0 个答案:

没有答案