Почему коллайдер выпадает из GameObject при добавлении RigidBody? - PullRequest
0 голосов
/ 02 февраля 2019

Мне действительно может понадобиться помощь с моими GameObjects.

Я работаю над игрой, в которой я хочу получить предмет, чтобы создать взрыв Силы Физики, чтобы сразить врагов.Я сделал простой Bomb-Object, чтобы проверить эту идею.Я добавил простой код, используя цикл для сбора всех коллайдеров в пределах его радиуса, чтобы затем добавить Forcece к этим коллайдерам.Теперь код работает правильно, но не все мои объекты GameObject реагируют правильно.

Я выяснил, почему это так, и заметил, что мой коллайдер продолжает отвлекаться от GameObject, как только я добавляю компонент RigidBody впредмет.RigidBody необходим для воздействия AddForce.Когда я удаляю rb, коллайдер остается на месте, но объект не реагирует на Силу Физики.

Я добавил несколько изображений, чтобы проиллюстрировать, что я имею в виду:

Изображениеколлайдер из листьев тонет вдали ..

Пример изображения объектов, которые ДЕЙСТВИТЕЛЬНО реагируют на AddForce.

Я уже пытался:

  • Скопируйте / вставьте все настройки компонентов из реагирующих игровых объектов «Куб» и «камень» в конечный игровой объект, отключив при этом весь другой код, такой как сценарии c #.Коллайдер и РБ не падают сквозь пол, но когда Физическая сила попадает в Коллайдер, он уносится, пока GameObject сохраняет свою позицию.
    • Попробуйте разные типы GameObjects / Collider.
    • Удалена вода.
    • Играйте с количеством силы / радиуса бомбы.
    • Отредактированы «Tag» и «Layerstyle» 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
            }
        }

    }
}

Как сделать так, чтобы Rigidbody, Collider и GameObject листа держались друг на друге, как стандартный трехмерный объект «куб», чтобы я мог сделать этиСразитесь с Физической Силой, как и с другими моделями?

Спасибо, что уделили время, я часами пробовал разные вещи и смотрю в Интернете, но, похоже, не могу найти никакого решения.

1 Ответ

0 голосов
/ 04 февраля 2019

Что произойдет, если вы добавите твердое тело в режим остановки и нажмете кнопку воспроизведения?Отходит ли он подобным образом?Это может произойти и ожидается, если ваши коллайдеры пересекаются друг с другом.Как только вы добавите твердое тело, они окажутся в ловушке серьезного столкновения.

Если вы не хотите изменять сцену, вы можете поиграть с матрицей столкновений в настройках проекта / физика

...