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

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

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

Сообщение BANANARAGE 06 апр 2021, 15:34

Есть турель, на туреле есть range и когда много врагов в его видимости она не знает в кого стрелять и начинает крутиться.
Как сделать что бы она стреляла по 1 врагу в зоне свей видимости.
Вот код;
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Turret : MonoBehaviour
{
        [SerializeField] private float range = 4f;
        [SerializeField] private LayerMask layers;
        private Collider2D target;
        public float minAngle = -20.0f;
        public float maxAngle = 30.0f;

        public GameObject ammo;
        public Transform shotDir1;
        public Transform shotDir2;
        private float fireTime = 1f;
        public ParticleSystem bullets;
        public ParticleSystem flash;
        public Transform Spawn;


        private void Start()
        {
                InvokeRepeating("Fire", 0f, fireTime);
        }

        private void Update()
        {
                Check();
                Look();

                var ea = transform.localEulerAngles;
                transform.localEulerAngles = ea;
        }

        void Check()
        {
                target = Physics2D.OverlapCircle(transform.position, range, layers);
        }

        void Look()
        {
                if (target != null)
                {
                        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;
                }
        }

        void Fire()
        {
                if (target != null)
                {
                        Instantiate(ammo, shotDir1.position, transform.rotation);
                        Instantiate(ammo, shotDir2.position, transform.rotation);
                        Instantiate(flash, shotDir1.position, transform.rotation);
                        Instantiate(flash, shotDir2.position, transform.rotation);
                        Instantiate(bullets, Spawn.position, Spawn.rotation);
                }
        }

        private void OnDrawGizmosSelected()
        {
                Gizmos.DrawWireSphere(transform.position, range);
        }

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

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

Сообщение botaforq 06 апр 2021, 16:01

Сделай через Raycast, когда луч попадает в врага напиши код что она убивает противника и ищет дальше. Через Raycast легко установить зову видимости, то есть длину луча.
botaforq
UNIт
 
Сообщения: 51
Зарегистрирован: 23 мар 2021, 11:43

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

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

botaforq писал(а):Сделай через Raycast, когда луч попадает в врага напиши код что она убивает противника и ищет дальше. Через Raycast легко установить зову видимости, то есть длину луча.

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

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

Сообщение botaforq 06 апр 2021, 16:08

Тк она же не убивает его.


Тебе просто нужно что б она попадала в врага и не крутилась хаотично или не знаешь и-за какой строки кода она начинает хаотично крутиться?
Последний раз редактировалось botaforq 06 апр 2021, 16:14, всего редактировалось 1 раз.
botaforq
UNIт
 
Сообщения: 51
Зарегистрирован: 23 мар 2021, 11:43

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

Сообщение BANANARAGE 06 апр 2021, 16:13

botaforq писал(а):
Тк она же не убивает его.


Тебе нужно что б она просто стреляла по нему?

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

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

Сообщение botaforq 06 апр 2021, 16:15

Просто тогда через Raycast если луч попадает стреляй по ней.
Если не знаешь что такое Raycast посмотри видео либо документацию

https://docs.unity3d.com/ScriptReference/Physics.Raycast.html

https://www.youtube.com/watch?v=b7a8CnaXT4c
botaforq
UNIт
 
Сообщения: 51
Зарегистрирован: 23 мар 2021, 11:43

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

Сообщение Saltant 06 апр 2021, 16:22

Проверяй дальность, когда в радиус турели входит враг, она берет его в цель и фигачит пока он не умрёт, потом так же по дальности берет ближайшего врага - и поступает с ним тем же способом и так пока ни останется врагов в радиусе турели.
У тебя в методе Check каждый раз новая цель присваивается, - тебе нужно там добавить условие что если цель уже есть, новую не назначать, тем самым будет отслеживаться 1 цель пока она не исчезнет.

И тут у тебя чё происходит ваще?
Синтаксис:
Используется csharp
                var ea = transform.localEulerAngles;
                transform.localEulerAngles = ea;
Последний раз редактировалось Saltant 06 апр 2021, 16:28, всего редактировалось 1 раз.
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2234
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

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

Сообщение BANANARAGE 06 апр 2021, 16:25

botaforq писал(а):Просто тогда через Raycast если луч попадает стреляй по ней.
Если не знаешь что такое Raycast посмотри видео либо документацию

https://docs.unity3d.com/ScriptReference/Physics.Raycast.html

https://www.youtube.com/watch?v=b7a8CnaXT4c

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

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

Сообщение botaforq 06 апр 2021, 16:35

Я понимаю что турель работоспособна только хаотично крутиться.
Можно сделать так
Saltant писал(а):У тебя в методе Check каждый раз новая цель присваивается, - тебе нужно там добавить условие что если цель уже есть, новую не назначать, тем самым будет отслеживаться 1 цель пока она не исчезнет.


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

https://www.youtube.com/watch?v=dCtt6ri5Iag
botaforq
UNIт
 
Сообщения: 51
Зарегистрирован: 23 мар 2021, 11:43

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

Сообщение BANANARAGE 06 апр 2021, 16:58

botaforq писал(а):Я понимаю что турель работоспособна только хаотично крутиться.
Можно сделать так
Saltant писал(а):У тебя в методе Check каждый раз новая цель присваивается, - тебе нужно там добавить условие что если цель уже есть, новую не назначать, тем самым будет отслеживаться 1 цель пока она не исчезнет.


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

https://www.youtube.com/watch?v=dCtt6ri5Iag

Я по его видосу делал и там у меня такая фигня что зона не видит врага, но видит что враг не в зоне.
BANANARAGE
UNец
 
Сообщения: 37
Зарегистрирован: 10 мар 2021, 01:03

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

Сообщение Alkos26Rus 06 апр 2021, 17:09

Рейкаст тут вобще не причем. У тебя поиск врага продолжается даже после того как враг уже найден.
Синтаксис:
Используется csharp
if (!target)Check();
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1640
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

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

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

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

Raycast здесь действительно совершенно не нужен. Saltant и Alkos26Rus всё верно подсказывают.
Но появится проблема - как узнать, что враг умер.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

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

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

Alkos26Rus писал(а):Рейкаст тут вобще не причем. У тебя поиск врага продолжается даже после того как враг уже найден.
Синтаксис:
Используется csharp
if (!target)Check();

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

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

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

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

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

Мне не нужно что бы он узнавал умер враг или нет
BANANARAGE
UNец
 
Сообщения: 37
Зарегистрирован: 10 мар 2021, 01:03

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

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

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

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

След.

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

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

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