нужна помощь с взаимодействием прифабоф

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

нужна помощь с взаимодействием прифабоф

Сообщение DGor59 21 янв 2020, 14:29

для кого-то это может показаться ерундой но я все же надеюсь на понимание и адекватность. Вообщем, суть проблемы вот в чем я создал объект с тегом(Cops) и повесил на него скрипт, при вхождении в его коллайдер объект с тегом (Cops) происходит определенное действие. потом просто через instantiate рандомно в разных местах начал генерировать эти объект но проблема в том что они не реагируют на вхождения в коллайдер другого (Cops). Возможно это из-за того что создаются клоны = прифабы. неужели мне придется создавать массив таких обьектов с разными тегами что бы они сработали?
п.с в инспекторе галочка на то что функция OnTriggerEnter2d сработала - активируется
DGor59
UNец
 
Сообщения: 10
Зарегистрирован: 21 янв 2020, 14:09

Re: нужна помощь с взаимодействием прифабоф

Сообщение Saltant 21 янв 2020, 14:57

На клонах тэг сохраняется? Ваще скрипт покажи
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2234
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: нужна помощь с взаимодействием прифабоф

Сообщение Dio5555 21 янв 2020, 15:00

Может у префаба не стоит тег, посмотрите стоит ли там ваш тег ?
Dio5555
UNIт
 
Сообщения: 83
Зарегистрирован: 06 сен 2018, 11:05

Re: нужна помощь с взаимодействием прифабоф

Сообщение DGor59 21 янв 2020, 18:01

Dio5555 писал(а):Может у префаба не стоит тег, посмотрите стоит ли там ваш тег ?

прифаб стоит
DGor59
UNец
 
Сообщения: 10
Зарегистрирован: 21 янв 2020, 14:09

Re: нужна помощь с взаимодействием прифабоф

Сообщение DGor59 21 янв 2020, 18:07

Dio5555 писал(а):Может у префаба не стоит тег, посмотрите стоит ли там ваш тег ?

Синтаксис:
Используется csharp
void start ()
{
targetpl1 = GameObject.FindGameObjectWithTag(Tagii1).GetComponent<Transform>();
}
void FixedUpdate()
{
rotatZ = gameObject.transform.rotation.z * 180; //вращение объекта в градусах
 //слежение за копами
        targetPos1 = targetpl1.position; //позиция копов
        targetPos1.x = targetPos1.x - thisPos.x;
        targetPos1.y = targetPos1.y - thisPos.y;
        angleii1 = Mathf.Atan2(targetPos1.y, targetPos1.x) * Mathf.Rad2Deg;
// если коп в коллайдере
if (IsTriggerCops)
        {
            if (rotatZ > 0 && angleii1 > 0)
            {
                if (rotatZ > angleii1 && rotatZ <= angleii1 + 90)
                {
                    gameObject.transform.rotation = Quaternion.Lerp(gameObject.transform.rotation, Quaternion.AngleAxis(Mathf.Atan2(-targetPos1.y, -targetPos1.x) * Mathf.Rad2Deg, Vector3.forward), 0.05f);
                }
                else if (rotatZ < angleii1 && rotatZ >= angleii1 - 90)
                {
                    gameObject.transform.rotation = Quaternion.Lerp(gameObject.transform.rotation, Quaternion.AngleAxis(Mathf.Atan2(-targetPos1.y, -targetPos1.x) * Mathf.Rad2Deg, Vector3.forward), 0.05f);
                }
            }
            if (rotatZ < 0 && angleii1 < 0)
            {
                if (rotatZ > angleii1 && rotatZ <= angleii1 + 90)
                {
                    gameObject.transform.rotation = Quaternion.Lerp(gameObject.transform.rotation, Quaternion.AngleAxis(Mathf.Atan2(-targetPos1.y, -targetPos1.x) * Mathf.Rad2Deg, Vector3.forward), 0.05f);
                }
                else if (rotatZ < angleii1 && rotatZ >= angleii1 - 90)
                {
                    gameObject.transform.rotation = Quaternion.Lerp(gameObject.transform.rotation, Quaternion.AngleAxis(Mathf.Atan2(-targetPos1.y, -targetPos1.x) * Mathf.Rad2Deg, Vector3.forward), 0.05f);
                }
            }
            else if (rotatZ > angleii1 + 90 || rotatZ < angleii1 - 90)
            {
                gameObject.transform.rotation = Quaternion.Lerp(gameObject.transform.rotation, TurretRotation(), SpeedRotation);
            }
        }
        else
        {
            gameObject.transform.rotation = Quaternion.Lerp(gameObject.transform.rotation, TurretRotation(), SpeedRotation);
        }
}
Quaternion TurretRotation()
        {
            //слежение за игроком
            targetPos = targetpl.position;
            thisPos = transform.position;
            targetPos.x = targetPos.x - thisPos.x;
            targetPos.y = targetPos.y - thisPos.y;
            angleii = Mathf.Atan2(targetPos.y, targetPos.x) * Mathf.Rad2Deg;
            return Quaternion.AngleAxis(angleii, Vector3.forward);
        }
public void OnTriggerEnter2D(Collider2D other)
        {
            if (other.gameObject.tag == "Cops")
            {
                IsTriggerCops = true;
            }
        }
        public void OnTriggerExit2D(Collider2D other)
        {
        if (other.gameObject.tag == "Cops")
            {
                IsTriggerCops = false;
            }
        }
DGor59
UNец
 
Сообщения: 10
Зарегистрирован: 21 янв 2020, 14:09

Re: нужна помощь с взаимодействием прифабоф

Сообщение Dio5555 21 янв 2020, 18:41

У меня вопрос триггер в каком то месте стоит или он висит на копе и ещё, может вы меня не поняли или я вас На префабе коп Стоит Тег cops ? на счёт Регистра не помню посмотрите как написан тег, как в if (other.gameObject.tag == "Cops") и ещё возможно вы поставили вместо тега слой ?
Покажите скрин вашего префаба его Inspector "Свойства"
Dio5555
UNIт
 
Сообщения: 83
Зарегистрирован: 06 сен 2018, 11:05

Re: нужна помощь с взаимодействием прифабоф

Сообщение seaman 21 янв 2020, 19:43

start пишется не так
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: нужна помощь с взаимодействием прифабоф

Сообщение DGor59 21 янв 2020, 20:02

Dio5555 писал(а):У меня вопрос триггер в каком то месте стоит или он висит на копе и ещё, может вы меня не поняли или я вас На префабе коп Стоит Тег cops ? на счёт Регистра не помню посмотрите как написан тег, как в if (other.gameObject.tag == "Cops") и ещё возможно вы поставили вместо тега слой ?
Покажите скрин вашего префаба его Inspector "Свойства"

-да на прифабе коп стоит тег cops
-все в принцыпе работает с оригиналом, оригинал откликается и работает со всеми копиями, а вот копии с оригиналом и с другими копиями не работают.
DGor59
UNец
 
Сообщения: 10
Зарегистрирован: 21 янв 2020, 14:09

Re: нужна помощь с взаимодействием прифабоф

Сообщение Dio5555 21 янв 2020, 20:12

DGor59 писал(а):
Dio5555 писал(а):У меня вопрос триггер в каком то месте стоит или он висит на копе и ещё, может вы меня не поняли или я вас На префабе коп Стоит Тег cops ? на счёт Регистра не помню посмотрите как написан тег, как в if (other.gameObject.tag == "Cops") и ещё возможно вы поставили вместо тега слой ?
Покажите скрин вашего префаба его Inspector "Свойства"

-да на прифабе коп стоит тег cops
-все в принцыпе работает с оригиналом, оригинал откликается и работает со всеми копиями, а вот копии с оригиналом и с другими копиями не работают

Как написали выше измените старт он у вас работает как функция
У вас с маленькой буквы а нужно с большой
Синтаксис:
Используется csharp
void Start()
    {

    }


И ещё тоже самое с тегом нужно писать так как и в условии к примеру
Синтаксис:
Используется csharp
if (other.gameObject.tag == "Cops") // с большой
{
Debag.Log(" Cops ")
}
if (other.gameObject.tag == "cops")// с маленькой
{
Debag.Log(" cops ")
}


Я так понимаю, это у вас не вся логика, возможно где-то ещё ошибки, попробуйте про дебажить всю логику, возможно где-то найдётся изъян.
Я обычно использую Debag.Log("Debag-1") или к примеру так Debag.Log("Тег: " + other.gameObject.tag), таким образом вы узнаете какой тег в данный момент у вашего Копа, который вошёл в триггер или узнаете, что в логике ошибка. Честно я особо не понял, что у вас там за слежка или радар По логике данного скрипта ясно что происходят какие-то манипуляции с поворотом и позицией, так как код неполный неясно что конкретно он делает его даже не задибажить =)
Dio5555
UNIт
 
Сообщения: 83
Зарегистрирован: 06 сен 2018, 11:05

Re: нужна помощь с взаимодействием прифабоф

Сообщение DGor59 21 янв 2020, 20:50

Dio5555 писал(а):
DGor59 писал(а):
Dio5555 писал(а):У меня вопрос триггер в каком то месте стоит или он висит на копе и ещё, может вы меня не поняли или я вас На префабе коп Стоит Тег cops ? на счёт Регистра не помню посмотрите как написан тег, как в if (other.gameObject.tag == "Cops") и ещё возможно вы поставили вместо тега слой ?
Покажите скрин вашего префаба его Inspector "Свойства"

-да на прифабе коп стоит тег cops
-все в принцыпе работает с оригиналом, оригинал откликается и работает со всеми копиями, а вот копии с оригиналом и с другими копиями не работают

Как написали выше измените старт он у вас работает как функция
У вас с маленькой буквы а нужно с большой
Синтаксис:
Используется csharp
void Start()
    {

    }


И ещё тоже самое с тегом нужно писать так как и в условии к примеру
Синтаксис:
Используется csharp
if (other.gameObject.tag == "Cops") // с большой
{
Debag.Log(" Cops ")
}
if (other.gameObject.tag == "cops")// с маленькой
{
Debag.Log(" cops ")
}


Я так понимаю, это у вас не вся логика, возможно где-то ещё ошибки, попробуйте про дебажить всю логику, возможно где-то найдётся изъян.
Я обычно использую Debag.Log("Debag-1") или к примеру так Debag.Log("Тег: " + other.gameObject.tag), таким образом вы узнаете какой тег в данный момент у вашего Копа, который вошёл в триггер или узнаете, что в логике ошибка. Честно я особо не понял, что у вас там за слежка или радар По логике данного скрипта ясно что происходят какие-то манипуляции с поворотом и позицией, так как код неполный неясно что конкретно он делает его даже не задибажить =)

да дело не в старте то просто опечатка и написано все верно(тег написан как и в условии), я же говорю, все работает (с оригиналом)проблемы начинаются когда создаются прифабы, клоны, они не взаимодействуют с другими клонами, когда пытался вывести в консоле все переменные которые берут участие в функции выявил что переменная angleii1 (угол между копом и другим копом) равна 0. т.е клоны "не видят" других клонов соответственно не могут расчитать расстояние и угол между ними.
Синтаксис:
Используется csharp
//слежение за копами
        targetPos1 = targetpl1.position;
        targetPos1.x = targetPos1.x - thisPos.x;
        targetPos1.y = targetPos1.y - thisPos.y;
        angleii1 = Mathf.Atan2(targetPos1.y, targetPos1.x) * Mathf.Rad2Deg;

вот тут
DGor59
UNец
 
Сообщения: 10
Зарегистрирован: 21 янв 2020, 14:09

Re: нужна помощь с взаимодействием прифабоф

Сообщение Saltant 21 янв 2020, 20:52

Dio5555 писал(а):
DGor59 писал(а):
Dio5555 писал(а):У меня вопрос триггер в каком то месте стоит или он висит на копе и ещё, может вы меня не поняли или я вас На префабе коп Стоит Тег cops ? на счёт Регистра не помню посмотрите как написан тег, как в if (other.gameObject.tag == "Cops") и ещё возможно вы поставили вместо тега слой ?
Покажите скрин вашего префаба его Inspector "Свойства"

-да на прифабе коп стоит тег cops
-все в принцыпе работает с оригиналом, оригинал откликается и работает со всеми копиями, а вот копии с оригиналом и с другими копиями не работают

Как написали выше измените старт он у вас работает как функция
У вас с маленькой буквы а нужно с большой
Синтаксис:
Используется csharp
void Start()
    {

    }


И ещё тоже самое с тегом нужно писать так как и в условии к примеру
Синтаксис:
Используется csharp
if (other.gameObject.tag == "Cops") // с большой
{
Debag.Log(" Cops ")
}
if (other.gameObject.tag == "cops")// с маленькой
{
Debag.Log(" cops ")
}


Я так понимаю, это у вас не вся логика, возможно где-то ещё ошибки, попробуйте про дебажить всю логику, возможно где-то найдётся изъян.
Я обычно использую Debag.Log("Debag-1") или к примеру так Debag.Log("Тег: " + other.gameObject.tag), таким образом вы узнаете какой тег в данный момент у вашего Копа, который вошёл в триггер или узнаете, что в логике ошибка. Честно я особо не понял, что у вас там за слежка или радар По логике данного скрипта ясно что происходят какие-то манипуляции с поворотом и позицией, так как код неполный неясно что конкретно он делает его даже не задибажить =)

Лучше использовать CompareTag()
Синтаксис:
Используется csharp
if (other.gameObject.CompareTag("cops"))
{
Debag.Log("cops ")
}
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2234
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: нужна помощь с взаимодействием прифабоф

Сообщение DGor59 22 янв 2020, 11:32

Saltant писал(а):
Dio5555 писал(а):
DGor59 писал(а):
Dio5555 писал(а):У меня вопрос триггер в каком то месте стоит или он висит на копе и ещё, может вы меня не поняли или я вас На префабе коп Стоит Тег cops ? на счёт Регистра не помню посмотрите как написан тег, как в if (other.gameObject.tag == "Cops") и ещё возможно вы поставили вместо тега слой ?
Покажите скрин вашего префаба его Inspector "Свойства"

-да на прифабе коп стоит тег cops
-все в принцыпе работает с оригиналом, оригинал откликается и работает со всеми копиями, а вот копии с оригиналом и с другими копиями не работают

Как написали выше измените старт он у вас работает как функция
У вас с маленькой буквы а нужно с большой
Синтаксис:
Используется csharp
void Start()
    {

    }


И ещё тоже самое с тегом нужно писать так как и в условии к примеру
Синтаксис:
Используется csharp
if (other.gameObject.tag == "Cops") // с большой
{
Debag.Log(" Cops ")
}
if (other.gameObject.tag == "cops")// с маленькой
{
Debag.Log(" cops ")
}


Я так понимаю, это у вас не вся логика, возможно где-то ещё ошибки, попробуйте про дебажить всю логику, возможно где-то найдётся изъян.
Я обычно использую Debag.Log("Debag-1") или к примеру так Debag.Log("Тег: " + other.gameObject.tag), таким образом вы узнаете какой тег в данный момент у вашего Копа, который вошёл в триггер или узнаете, что в логике ошибка. Честно я особо не понял, что у вас там за слежка или радар По логике данного скрипта ясно что происходят какие-то манипуляции с поворотом и позицией, так как код неполный неясно что конкретно он делает его даже не задибажить =)

Лучше использовать CompareTag()
Синтаксис:
Используется csharp
if (other.gameObject.CompareTag("cops"))
{
Debag.Log("cops ")
}

не помогло) просто скажите как сделать так что бы генерировался один и тот же обьект(клон) и что бы при в хождении в его коллайдер друго-го такого же клона я мог получить его координаты (в последствии угол до него) я вроде все правильно сделал и все работает, но при фхождении другого клона в колайдер не определяется его позиция(если меняю тег на любой другой и создаю обьект с этим тегом то все работает)
DGor59
UNец
 
Сообщения: 10
Зарегистрирован: 21 янв 2020, 14:09

Re: нужна помощь с взаимодействием прифабоф

Сообщение Dio5555 22 янв 2020, 15:33

Прости, я не смогу помочь, я не вижу как твоя логика работает полностью, кусок кода не поможет в этом, лично для меня."видел бы я твою логику, то другой разговор, ещё бы поковырялся"=)
А по сути, у тебя просто конфликт идёт как я понимаю, я думаю просто, что у тебя сам себя детектит при всей этой массовки. =)
Если не ошибаюсь, вся это логика типо AI ?
И ещё Project 2d или 3d ?
Dio5555
UNIт
 
Сообщения: 83
Зарегистрирован: 06 сен 2018, 11:05

Re: нужна помощь с взаимодействием прифабоф

Сообщение DGor59 22 янв 2020, 19:50

Dio5555 писал(а):Прости, я не смогу помочь, я не вижу как твоя логика работает полностью, кусок кода не поможет в этом, лично для меня."видел бы я твою логику, то другой разговор, ещё бы поковырялся"=)
А по сути, у тебя просто конфликт идёт как я понимаю, я думаю просто, что у тебя сам себя детектит при всей этой массовки. =)
Если не ошибаюсь, вся это логика типо AI ?
И ещё Project 2d или 3d ?

2d
да тип логики АI
да, какой-то конфликт, похоже на то что он детектит самого себя и я не знаю что с этим сделать
Синтаксис:
Используется csharp
     public string Tagii;    //тег игрок
    private Transform targetpl;   //трансформ игрока
    private Vector3 targetPos;    //позиция игрока
    private Vector3 thisPos;      //позиция своя (копа)
    private float angleii;       //угол до игрока
    public bool IsTriggerCops = false;     //вхождение в коллайдер другого копа
    private Transform targetpl1;          //трансформ другого копа
    private Vector3 targetPos1;          //позиция другого копа
    private float angleii1;             //угол до другого копа
    public string Tagii1;                //тег другого копа
    private float rotatZ;               //переменная для угла этого копа
void Start()
    {
        targetpl = GameObject.FindGameObjectWithTag(Tagii).GetComponent<Transform>();
        targetpl1 = GameObject.FindGameObjectWithTag(Tagii1).GetComponent<Transform>();
    }
void FixedUpdate()
{
        rotatZ = gameObject.transform.rotation.z * 180;
       

//условие встречи с другим копом
        if (IsTriggerCops)    //если в триггер вошел коп
        {
            if (rotatZ > 0 && angleii1 > 0)    // если этот коп вращается в верхней полусфере и угол до другого копа в верхней полусфере
            {
                if (rotatZ > angleii1 && rotatZ <= angleii1 + 90)    //если угол вращения этого копа больше чем угол до другого копа в коллайдере но меньше чем угол копа в коллайдере + 90
                {
                    gameObject.transform.rotation = Quaternion.Lerp(gameObject.transform.rotation, Quaternion.AngleAxis(Mathf.Atan2(-targetPos1.y, -targetPos1.x) * Mathf.Rad2Deg, Vector3.forward), 0.05f);            //вращение в противоположную сторону от копа вошедшего в колайдер
                }
                else if (rotatZ < angleii1 && rotatZ >= angleii1 - 90)  // и так далее
                {
                    gameObject.transform.rotation = Quaternion.Lerp(gameObject.transform.rotation, Quaternion.AngleAxis(Mathf.Atan2(-targetPos1.y, -targetPos1.x) * Mathf.Rad2Deg, Vector3.forward), 0.05f);
                }
            }
            if (rotatZ < 0 && angleii1 < 0)
            {
                if (rotatZ > angleii1 && rotatZ <= angleii1 + 90)
                {
                    gameObject.transform.rotation = Quaternion.Lerp(gameObject.transform.rotation, Quaternion.AngleAxis(Mathf.Atan2(-targetPos1.y, -targetPos1.x) * Mathf.Rad2Deg, Vector3.forward), 0.05f);
                }
                else if (rotatZ < angleii1 && rotatZ >= angleii1 - 90)
                {
                    gameObject.transform.rotation = Quaternion.Lerp(gameObject.transform.rotation, Quaternion.AngleAxis(Mathf.Atan2(-targetPos1.y, -targetPos1.x) * Mathf.Rad2Deg, Vector3.forward), 0.05f);
                }
            }
            else if (rotatZ > angleii1 + 90 || rotatZ < angleii1 - 90)    //если угол вращения этого копа больше или меньше чем угол вошедшего в коллайдер копа +-90 соответственно
            {
                gameObject.transform.rotation = Quaternion.Lerp(gameObject.transform.rotation, TurretRotation(), SpeedRotation);   //то коп следит за игроком
            }
        }
        else
        {
            print(targetPos1);
            gameObject.transform.rotation = Quaternion.Lerp(gameObject.transform.rotation, TurretRotation(), SpeedRotation);         //если коп не в коллайдере то опять же этот коп следит за игроком
        }

        //слежение за копами
        targetPos1 = targetpl1.position;
        targetPos1.x = targetPos1.x - thisPos.x; //позиция до копов по x
        targetPos1.y = targetPos1.y - thisPos.y;  //позиция до копов по y
        angleii1 = Mathf.Atan2(targetPos1.y, targetPos1.x) * Mathf.Rad2Deg; //угол из образованного вектора

//тоже самое для игрока
        Quaternion TurretRotation()
        {
            //слежение
            targetPos = targetpl.position;
            thisPos = transform.position;
            targetPos.x = targetPos.x - thisPos.x;
            targetPos.y = targetPos.y - thisPos.y;
            angleii = Mathf.Atan2(targetPos.y, targetPos.x) * Mathf.Rad2Deg;
            return Quaternion.AngleAxis(angleii, Vector3.forward);
        }
}
//ну это понятно
public void OnTriggerEnter2D(Collider2D other)
        {
            if (other.gameObject.tag == "Cops")
            {
            IsTriggerCops = true;
            }
        }
        public void OnTriggerExit2D(Collider2D other)
        {
        if (other.gameObject.tag == "Cops")
            {
            IsTriggerCops = false;
            }
        }
 
DGor59
UNец
 
Сообщения: 10
Зарегистрирован: 21 янв 2020, 14:09

Re: нужна помощь с взаимодействием прифабоф

Сообщение DGor59 22 янв 2020, 20:28

Dio5555 писал(а):Прости, я не смогу помочь, я не вижу как твоя логика работает полностью, кусок кода не поможет в этом, лично для меня."видел бы я твою логику, то другой разговор, ещё бы поковырялся"=)
А по сути, у тебя просто конфликт идёт как я понимаю, я думаю просто, что у тебя сам себя детектит при всей этой массовки. =)
Если не ошибаюсь, вся это логика типо AI ?
И ещё Project 2d или 3d ?

как видно на этом скриншоте все работает, обьект с тегом Cops обьезжает другой обьект с тегом копс когда не в коллайдере то приближается к игроку
п.с на Cops (1) скрипт отключен

Изображение

но если поменять их местам.... (тоже самое происходит и с клонами) происходит это

Изображение
DGor59
UNец
 
Сообщения: 10
Зарегистрирован: 21 янв 2020, 14:09

След.

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

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 30