Столкновение с дочерним объектом

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Столкновение с дочерним объектом

Сообщение hellinsider 12 июл 2018, 17:24

Добрый день, Подскажите пожалуйста, почему не работает код
есть 2 объекта: игрок и кусок дороги, на куске дороги 2 дочерних объекта с которыми должно просчитываться столкновение. На игроке и этих дочерних объектах висят коллайдеры и Rigidbody. При столкновении эти 2 объекта должны запустить функцию главного скрипта, которая уничтожит игрока. Но простейшая проверка на столкновение не работает ( status_collapse не меняется ). Тоже самое применительно НЕ к дочерним а основным объектам работает.
Синтаксис:
Используется csharp
public class StolknovenieDetected : MonoBehaviour
{
    public int status_collapse = 0;
    public void OnCollisionEnter(Collision myCollision)
    {
        if (myCollision.gameObject.tag == "Collapse")
        {
            GameObject.Find("TestRun").GetComponent<csTestRun>().GlobalDeath();
            status_collapse = 1;
        }
    }
}
 
hellinsider
UNец
 
Сообщения: 1
Зарегистрирован: 12 июл 2018, 17:13

Re: Столкновение с дочерним объектом

Сообщение 1max1 12 июл 2018, 17:40

Эх, щас бы на кофейной гуще гадать, откуда нам знать что там у тебя не так? есть много причин по которым скрипт не работает, перечислять их думаю глупо, хоть бы скрины показал что да как.
Аватара пользователя
1max1
Адепт
 
Сообщения: 1566
Зарегистрирован: 28 июн 2017, 10:51

Re: Столкновение с дочерним объектом

Сообщение Fox_game 13 июл 2018, 21:35

hellinsider писал(а):Добрый день, Подскажите пожалуйста, почему не работает код
есть 2 объекта: игрок и кусок дороги, на куске дороги 2 дочерних объекта с которыми должно просчитываться столкновение. На игроке и этих дочерних объектах висят коллайдеры и Rigidbody. При столкновении эти 2 объекта должны запустить функцию главного скрипта, которая уничтожит игрока. Но простейшая проверка на столкновение не работает ( status_collapse не меняется ). Тоже самое применительно НЕ к дочерним а основным объектам работает.
Синтаксис:
Используется csharp
public class StolknovenieDetected : MonoBehaviour
{
    public int status_collapse = 0;
    public void OnCollisionEnter(Collision myCollision)
    {
        if (myCollision.gameObject.tag == "Collapse")
        {
            GameObject.Find("TestRun").GetComponent<csTestRun>().GlobalDeath();
            status_collapse = 1;
        }
    }
}
 

Поставь дочерним объектам галку на Киниматике
Fox_game
UNIт
 
Сообщения: 117
Зарегистрирован: 08 июл 2017, 19:33

Re: Столкновение с дочерним объектом

Сообщение Nubila 14 июл 2018, 07:04

hellinsider писал(а):Добрый день, Подскажите пожалуйста, почему не работает код
есть 2 объекта: игрок и кусок дороги, на куске дороги 2 дочерних объекта с которыми должно просчитываться столкновение. На игроке и этих дочерних объектах висят коллайдеры и Rigidbody. При столкновении эти 2 объекта должны запустить функцию главного скрипта, которая уничтожит игрока. Но простейшая проверка на столкновение не работает ( status_collapse не меняется ). Тоже самое применительно НЕ к дочерним а основным объектам работает.
Синтаксис:
Используется csharp
public class StolknovenieDetected : MonoBehaviour
{
    public int status_collapse = 0;
    public void OnCollisionEnter(Collision myCollision)
    {
        if (myCollision.gameObject.tag == "Collapse")
        {
            GameObject.Find("TestRun").GetComponent<csTestRun>().GlobalDeath();
            status_collapse = 1;
        }
    }
}
 

А я вот погадаю чуток)
1) Если лез в Physics вкладку, то возможно там ты убрал столкновения у слоёв.
2) Если повесил риги на чайлдов, а скрипт с проверкой коллизии у тебя в паренте, то они не связаны больше этим событием. Убери им риджиды, и оставь только на паренте, но в таком случае если скрипт весит на паренте, а чайлд прикоснётся к игроку, то ты не сможешь понять что это сделали именно чайлды, а не парент. Либо вешай на игрока, с проверкой на то, с кем столкнулся.

ЗЫ: воть этьо калль, так как дорого стоит:
GameObject.Find("TestRun").GetComponent<csTestRun>().GlobalDeath();
вместо этого сделай так:
myCollision.gameObject.SetActive(false);
либо если игрок точно будет один и дорога больше никого не уничтожает, то в старте найди скрипт и кешируй его, а в событии столкновения вызывай на нём функцию в которой отключается игрок.
Это гораздо дешевле по производительности(не обязательно уничтожать объект в прямом смысле этого слова).
Аватара пользователя
Nubila
UNITрон
 
Сообщения: 159
Зарегистрирован: 12 июл 2017, 15:59
Откуда: Запорожье


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: DimaJoke и гости: 23