Когда много врагов в зоне видимости турели, турель вертится.

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

Re: Когда много врагов в зоне видимости турели, турель вертится.

Сообщение BANANARAGE 06 апр 2021, 17:29

samana писал(а):
BANANARAGE писал(а):Мне не нужно что бы он узнавал умер враг или нет

Да? Точно? Ну хорошо! ;)

Тут другая проблема, если враг по которому он стрелял выйдет из зоны он все равно по нему продолжает стрелять..
Теперь как это решить 8-|
BANANARAGE
UNец
 
Сообщения: 37
Зарегистрирован: 10 мар 2021, 01:03

Re: Когда много врагов в зоне видимости турели, турель вертится.

Сообщение samana 06 апр 2021, 18:06

BANANARAGE писал(а):Теперь как это решить

Saltant писал(а):Проверяй дальность


Расстояние между точками можно измерить с помощью
https://docs.unity3d.com/ScriptReferenc ... tance.html

Либо через
https://docs.unity3d.com/ScriptReferenc ... itude.html
который работает быстрее.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Когда много врагов в зоне видимости турели, турель вертится.

Сообщение Saltant 06 апр 2021, 18:14

samana писал(а):
botaforq писал(а):Но Raycast предназначена для отслеживания попадания в врага, с ним код будет более оптимизирован и в разы сократиться.

Raycast здесь действительно совершенно не нужен. Saltant и Alkos26Rus всё верно подсказывают.
Но появится проблема - как узнать, что враг умер.

Самое прискорбное в форумах такого плана, что новички начинают подсказывать новичкам, в итоге получается одна ошибка заменяется другой ;;)
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2236
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: Когда много врагов в зоне видимости турели, турель вертится.

Сообщение samana 06 апр 2021, 18:21

Saltant писал(а):в итоге получается одна ошибка заменяется другой

Да, есть такое ;)) . Ну ничего, чем больше ошибок встретиться, тем быстрее научатся их решать!
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Когда много врагов в зоне видимости турели, турель вертится.

Сообщение Alkos26Rus 06 апр 2021, 20:00

BANANARAGE писал(а):
samana писал(а):
BANANARAGE писал(а):Мне не нужно что бы он узнавал умер враг или нет

Да? Точно? Ну хорошо! ;)

Тут другая проблема, если враг по которому он стрелял выйдет из зоны он все равно по нему продолжает стрелять..
Теперь как это решить 8-|


Вставь это в апдейт
Синтаксис:
Используется csharp
if(target && Vector3.Distance(transform.position, target.position) > range)target = null;
 
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Когда много врагов в зоне видимости турели, турель вертится.

Сообщение BANANARAGE 07 апр 2021, 12:13

Alkos26Rus писал(а):
BANANARAGE писал(а):
samana писал(а):
BANANARAGE писал(а):Мне не нужно что бы он узнавал умер враг или нет

Да? Точно? Ну хорошо! ;)

Тут другая проблема, если враг по которому он стрелял выйдет из зоны он все равно по нему продолжает стрелять..
Теперь как это решить 8-|


Вставь это в апдейт
Синтаксис:
Используется csharp
if(target && Vector3.Distance(transform.position, target.position) > range)target = null;
 

К сожалению не работает(
BANANARAGE
UNец
 
Сообщения: 37
Зарегистрирован: 10 мар 2021, 01:03

Re: Когда много врагов в зоне видимости турели, турель вертится.

Сообщение Saltant 07 апр 2021, 15:18

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

Re: Когда много врагов в зоне видимости турели, турель вертится.

Сообщение BANANARAGE 07 апр 2021, 15:49

Saltant писал(а):Что именно не работает? Что дебаг у тебя показывает?

if(target && Vector3.Distance(transform.position, target.position) > range)target = null;
где таргет посишн подчеркивается красным я поменял его таргет тансформ посишн и код стал правильным, но теперь он вообще не реагирует на врага.
BANANARAGE
UNец
 
Сообщения: 37
Зарегистрирован: 10 мар 2021, 01:03

Re: Когда много врагов в зоне видимости турели, турель вертится.

Сообщение Alkos26Rus 07 апр 2021, 16:10

BANANARAGE писал(а):
Saltant писал(а):Что именно не работает? Что дебаг у тебя показывает?

if(target && Vector3.Distance(transform.position, target.position) > range)target = null;
где таргет посишн подчеркивается красным я поменял его таргет тансформ посишн и код стал правильным, но теперь он вообще не реагирует на врага.

Ну это естественно, я писал от руки и не посмотрел что таргед это у тебя коллайдер. Не реагирует походу потому что сбрасывает врага сразу после того как найдет, не учитывается размер коллайдера врага, а дистанция считается по центру объекта. Короче поиск врага по Physics2D.OverlapCircle() это полная хрень, ищи по дистанции перебирая массив врагов. Но исходя из "где таргет посишн подчеркивается красным" похоже что и код ты не сам писал а скопипастил, поэтому у меня сомнения что ты сможешь сделать поиск врага через массив.
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Когда много врагов в зоне видимости турели, турель вертится.

Сообщение BANANARAGE 07 апр 2021, 16:14

Alkos26Rus писал(а):
BANANARAGE писал(а):
Saltant писал(а):Что именно не работает? Что дебаг у тебя показывает?

if(target && Vector3.Distance(transform.position, target.position) > range)target = null;
где таргет посишн подчеркивается красным я поменял его таргет тансформ посишн и код стал правильным, но теперь он вообще не реагирует на врага.

Ну это естественно, я писал от руки и не посмотрел что таргед это у тебя коллайдер. Не реагирует походу потому что сбрасывает врага сразу после того как найдет, не учитывается размер коллайдера врага, а дистанция считается по центру объекта. Короче поиск врага по Physics2D.OverlapCircle() это полная хрень, ищи по дистанции перебирая массив врагов. Но исходя из "где таргет посишн подчеркивается красным" похоже что и код ты не сам писал а скопипастил, поэтому у меня сомнения что ты сможешь сделать поиск врага через массив.

я не копипастил, я списывал с видосов как по мне так запоминается ну лично для меня. Да вряд ли смогу сделать и прошу помочь и хотелось бы объяснения что бы на будущее я понимала как это делать.
BANANARAGE
UNец
 
Сообщения: 37
Зарегистрирован: 10 мар 2021, 01:03

Re: Когда много врагов в зоне видимости турели, турель вертится.

Сообщение Xtir 07 апр 2021, 16:19

Поставь на туррель сферу триггер, когда враг входит в триггер он добавляется в массив, когда умирает или выходит - удаляется из массива. И вот пусть туррель всегда стреляет по 0 элементу, в чём проблема?
Xtir
UNIверсал
 
Сообщения: 498
Зарегистрирован: 21 окт 2016, 00:37

Re: Когда много врагов в зоне видимости турели, турель вертится.

Сообщение TeslaGan 07 апр 2021, 16:30

добавьте на турель CircleCollider2d, и сделайте ее isTrigger. в старте пропишите
Синтаксис:
Используется csharp
GetComponent<CircleCollider2D>().radius = range;

далее создаем 2 метода:(не помню точную формулировку, вам предстоит дописать)
Синтаксис:
Используется csharp
    void OnCollisionEnter2D(Collision2D collision)
    {
        if (target =! null && collision.gameObject.tag == "Enemy")
        {
            target = collision;
        }
    }
    void OnCollisionExit2D(Collision2D collision)
    {
        if (target == collision)
        {
            target = null;
        }
    }
 

collision.gameObject.tag == "Enemy" нужна для сортировки объектов в коллайдере, альтернатива - разместить врагов в слой, и сделать чтобы коллайдер турели взаимодействовал только со слоем врагов
TeslaGan
UNITрон
 
Сообщения: 315
Зарегистрирован: 01 авг 2015, 18:00

Re: Когда много врагов в зоне видимости турели, турель вертится.

Сообщение Saltant 07 апр 2021, 18:56

TeslaGan писал(а):collision.gameObject.tag == "Enemy"

CompareTag() тогда уже, врагов могут быть сотни.
Старайтесь вызывать правильные методы, особенно если советуете новичкам, они один фиг не поймут скорее всего, но хотя бы скопипастят верно.
https://docs.unity3d.com/ScriptReferenc ... reTag.html
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2236
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: Когда много врагов в зоне видимости турели, турель вертится.

Сообщение TeslaGan 07 апр 2021, 20:03

действительно, правильный совет. CompareTag(). копировал пример с документации по колайдерЭнтер, не обратил внимания что именно они используют
TeslaGan
UNITрон
 
Сообщения: 315
Зарегистрирован: 01 авг 2015, 18:00

Re: Когда много врагов в зоне видимости турели, турель вертится.

Сообщение BANANARAGE 08 апр 2021, 14:34

TeslaGan писал(а):действительно, правильный совет. CompareTag(). копировал пример с документации по колайдерЭнтер, не обратил внимания что именно они используют

Правильно ли я сделал?
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Turrent2 : MonoBehaviour
{
        private float range;
        private Collider2D target;

        private void Start()
        {
                GetComponent<CircleCollider2D>().radius = range;
        }

        private void Update()
        {
               
                var ea = transform.localEulerAngles;
                transform.localEulerAngles = ea;
        }

        private void OnTriggerEnter2D(Collider2D other)
        {
                if (target == null && other.CompareTag("Player"))
                {
                        target = other;
                        Debug.Log("1");
                }
        }
        private void OnTriggerExit2D(Collider2D other)
        {
                if (target == other)
                {
                        target = null;
                        Debug.Log("2");
                }
        }

        void Look()
        {
                Vector2 direction = target.transform.position - transform.position;
                float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
                transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
                Vector3 LocalScale = Vector3.one;

                if (angle > 90 || angle < -90)
                {

                        LocalScale.y = -1f;

                }
                else
                {
                        LocalScale.y = +1f;
                }

                transform.localScale = LocalScale;
        }

}
 
BANANARAGE
UNец
 
Сообщения: 37
Зарегистрирован: 10 мар 2021, 01:03

Пред.След.

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

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

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