Страница 1 из 3

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

СообщениеДобавлено: 06 апр 2021, 15:34
BANANARAGE
Есть турель, на туреле есть 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);
        }

}
 

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

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

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

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

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

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

СообщениеДобавлено: 06 апр 2021, 16:08
botaforq
Тк она же не убивает его.


Тебе просто нужно что б она попадала в врага и не крутилась хаотично или не знаешь и-за какой строки кода она начинает хаотично крутиться?

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

СообщениеДобавлено: 06 апр 2021, 16:13
BANANARAGE
botaforq писал(а):
Тк она же не убивает его.


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

Да!

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

СообщениеДобавлено: 06 апр 2021, 16:15
botaforq
Просто тогда через Raycast если луч попадает стреляй по ней.
Если не знаешь что такое Raycast посмотри видео либо документацию

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

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

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

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

И тут у тебя чё происходит ваще?
Синтаксис:
Используется csharp
                var ea = transform.localEulerAngles;
                transform.localEulerAngles = ea;

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

СообщениеДобавлено: 06 апр 2021, 16:25
BANANARAGE
botaforq писал(а):Просто тогда через Raycast если луч попадает стреляй по ней.
Если не знаешь что такое Raycast посмотри видео либо документацию

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

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

У меня турель полностью работоспособна стреляет и башня двигается, но повторяюсь когда много врагов в зоне, он не понимает в кого стрелять и начинает башня туда сюда крутиться.

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

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


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

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

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

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


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

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

Я по его видосу делал и там у меня такая фигня что зона не видит врага, но видит что враг не в зоне.

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

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

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

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

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

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

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

Спасибо вам огромное)

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

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

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

Мне не нужно что бы он узнавал умер враг или нет

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

СообщениеДобавлено: 06 апр 2021, 17:22
samana
BANANARAGE писал(а):Мне не нужно что бы он узнавал умер враг или нет

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