为什么对撞机从游戏物体落下时添加一个刚体的?

时间:2019-02-02 15:32:17

标签: c# unity3d game-physics gameobject rigid-bodies

我真的需要一些帮助,我GameObjects。

我的工作在游戏中,我想接机项目创建一个物理力爆炸炸毁了敌人。我做了一个简单的炸弹对象,以测试这个想法。我添加了一个简单的代码,使用循环收集半径内的所有对撞机,到随后addForce这些对撞机。现在,代码可以正常工作,但并不是我的所有GameObject都能正常工作。

我调查了这是为什么,并且我注意到,一旦向对象添加RigidBody组件,对撞机就会不断从GameObject掉落。需要使用AddForce影响刚体。当我移除rb时,对撞机将留在原处,但该对象不会对Physics Force产生反应。

我添加了一些图像来说明我的意思:

Image of the Collider of the leaf sinking away..

Example image of objects which DO react to the AddForce.

我已经尝试过:

  • 从反应的多维数据集和石头复制/粘贴所有组件设置 禁用所有其他代码的同时将Gameobjects设置为Leaf Gameobject 如C#脚本。 Collider&RB不会跌落 地板但是当物理力撞击撞就被干掉了,而 GameObject保持其位置。
    • 尝试不同的GameObjects / Collider类型。
    • 除去水。
    • 玩炸弹的力/半径。
    • 编辑了GameObject的“标记”和“图层样式”。

下面添加了“爆炸代码”,但是我认为问题不在代码中。我将代码添加到场景的“主摄像机”中,并添加了一个简单的球体作为“炸弹” GameObject。


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

public class Explosion : MonoBehaviour
{
    public GameObject bomb; //set the position of the explosion
    public float power = 10.0f;
    public float radius = 10.0f;
    public float upForce = 0.0f;

    private void FixedUpdate()
    {
        if (Input.GetKeyDown("space"))
        {
            print("space key was pressed");
            Invoke("Detonate", 1);
        }
    }

    void Detonate()
    {
        Vector3 explosionPosition = bomb.transform.position; //set the position of our explosion to the position of the bomb.
        Collider[] colliders = Physics.OverlapSphere(explosionPosition, radius); //collects all colliders within the radius.
        foreach (Collider hit in colliders) { //for each individual collider the following code is ran.

            Rigidbody rb = hit.GetComponent<Rigidbody>(); //declare'rb' rigidbody. Get rb component from each collider
            if (rb != null)
            {
                print("BOOM!");
                rb.AddExplosionForce(power, explosionPosition, radius, upForce, ForceMode.Impulse); //add force to each collider
            }
        }

    }
}


如何使叶子的刚体,对撞机和GameObject像标准3D对象“多维数据集”那样相互紧握,以便像其他模型一样可以被Physics Force吹走?

感谢您的时间,我一直在努力的事情,现在环顾互联网上几个小时,但似乎无法找到任何解决方案。

1 个答案:

答案 0 :(得分:0)

如果在停止模式下添加刚体并按play,会发生什么?它会以类似的方式移动吗?如果您的对撞机相交,则可能会发生这种情况。一旦添加刚体,它们就会陷入严重的碰撞中。

如果您不想修改场景,则可以在项目设置/物理学中修改碰撞矩阵