我与球统一创建了一个2d游戏。游戏很简单。侧面有墙,每面墙都有自己的对撞机。每个人都有一个标签“ Wall”。
还有球。他具有圆形对撞机2d和刚体2d。然后,我创建了材料物理2d,并将其连接到刚体。在材料物理2d中,我将“摩擦力”设置为“ 0”,将“弹跳性”设置为“ 1”。现在,当球碰到墙壁时,它就会击退。但有一个问题。如果球的速度低,则碰到墙壁时,他只会停下来。
还有2个问题。如果球以较小的角度接触墙壁,则它不会沿着红线而是沿着蓝线(照片中的示例)
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));
}
}