一维碰撞和一些物理学

本文关键字:物理学 碰撞 一维 | 更新日期: 2023-09-27 18:00:42

我正在制作一款2D坦克射击游戏,但我遇到了一些问题:

  1. 我遇到了一些碰撞问题

这里有一个问题的GIF。转到油箱碰撞问题。(我不能发布超过2个链接,因为信誉低,所以你必须手动转到图片,对不起。)

我需要让我的坦克不要像上面显示的那样。我在空的母体上使用刚体,在罐体上使用长方体对撞机。

我的"坦克(根)"在检查员和"坦克车身"(船体)在检查员这里。

坦克移动代码:

using UnityEngine;
using System.Collections;
public class Movement : MonoBehaviour {
    public float thrust;
    public float rotatingspeed;
    public Rigidbody rb;
void Start () {
    rb = GetComponent<Rigidbody>();
}
void Update () {
    if (Input.GetKey (KeyCode.W)) {
        transform.Translate (Vector2.right * thrust);           
    }
    if (Input.GetKey (KeyCode.S)) {
        transform.Translate (Vector2.right * -thrust);
    }
    if(Input.GetKey(KeyCode.A)) {
        transform.Rotate(Vector3.forward, rotatingspeed);
    }
    if(Input.GetKey(KeyCode.D)) {
        transform.Rotate(Vector3.forward, -rotatingspeed);
    }
}

}

  1. 我的子弹像在零重力/太空中一样飞行。我需要他们不要那样悬停(我以前遇到过类似的问题,但我无法解决。)。第一个问题的第一个链接中有gif。射击代码:

    使用UnityEngine;

    使用System.Collections;

    公开课射击:MonoBehavior{

        public Rigidbody2D projectile;
        public float speed = 20;
        public Transform barrelend;
    void Update () {
        if (Input.GetButtonDown("Fire1"))
        {
            Rigidbody2D rocketInstance;
            rocketInstance = Instantiate(projectile, barrelend.position, barrelend.rotation) as Rigidbody2D;
            rocketInstance.AddForce(barrelend.right * speed);
        }
    }
    

    }

一维碰撞和一些物理学

我设法解决了这两个问题。解决第1个问题。我使用了额外的力量。我新的前后移动看起来是这样的:

if (Input.GetKey (MoveForward)) {
        //transform.Translate (Vector2.right * thrust); OLD !!  
        rb2D.AddForce(transform.right * thrust * Time.deltaTime);
    }
if (Input.GetKey (MoveBackward)) {
        //transform.Translate (Vector2.right * -thrust); OLD !!
        rb2D.AddForce(transform.right * -thrust * Time.deltaTime);

我必须将质量调整到较小(从2000到1),推力调整到较大(从0.2到50000),阻力设置为50,角阻力设置为100。

通过将阻力和角度阻力设置为更大的值,解决了第二个问题。就是这样!