Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 23.10.2019
Сообщений: 31

Как сделать так, чтобы одна фишка обнаруживала другую в сцене при пороговом значении расстояния?

23.10.2019, 16:51. Показов 3755. Ответов 64
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В Юнити 3-й день. Не знаю даже где посмотреть справочную информацию. Хотя, уже научился создавать 3д объекты, моделировать системы частиц с определенными свойствами и анимировать все это. Если можно, посоветуйте, хотя бы, где посмотреть - как сделать так, чтобы одна фишка обнаруживала другую в сцене при пороговом значении расстояния, свыше значения которого она ее просто не видит.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.10.2019, 16:51
Ответы с готовыми решениями:

Как сделать так, чтобы при нажатии на кнопку менялась одна форма на другую?
Я вот пытаюсь разработать тест и столкнулась с такой проблемой, как смена формы на другую... В связи с этим достаточно тупой вопрос: Как...

Сделать так, чтобы одна процедура вызывала другую
Всем добрый. Я все продолжаю рисовать Вселенную, темы...

Как сделать так, чтобы при каждом клике происходила одна итерация цикла?
Надо, чтобы при каждом нажатии на лейбл происходила итерация цикла: public void label1_Click(object sender, EventArgs e) { ...

64
0 / 0 / 0
Регистрация: 23.10.2019
Сообщений: 31
19.11.2019, 15:01  [ТС]
Студворк — интернет-сервис помощи студентам
Благодарю!
Да, надо ж, недосмотрел.

Теперь новая беда - башня включается при входе в триггерную зону, переменная - работает. Но на выход - не выключается. Причём, в инспекторе в режиме игры галочка на включение скрипта снята. Причем, я проверил, на цифру больше 0 галочка включения скрипта - ставится, на 0 снимается
0
 Аватар для 1max1
3362 / 1775 / 1028
Регистрация: 26.10.2018
Сообщений: 5,204
19.11.2019, 15:15
Нужно видеть код всех скриптов на башне, так не скажешь, возможно есть еще один скрипт, который управляет башней, а ты думаешь, что дело в другом скрипте.
0
0 / 0 / 0
Регистрация: 23.10.2019
Сообщений: 31
19.11.2019, 16:23  [ТС]
Я поудалял с башни и стволов все кроме этого одного скрипта. Все равно он работает выключенный
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
using UnityEngine;
using System.Collections;
 
public class Turn: MonoBehaviour
{
    float directionTurretToTarget;
    public Transform turretHead;
    public Transform turretGun;
    public float visionRadius = 12000;
    public int rotationSpeed;
    public string enemyTag = "Friend";
    public GameObject projectile;
    public int projectileSpeed = 10;
    private bool allowFire = true;
    public float fireRate = 1.0f;
    private float searchTimeDelay = 1f;
    private Transform target;
    private Vector3 previousTargetPosition;
    private Vector3 targetSpeed;
    protected enum State
    {
        Idle,       //состояние покоя
        Atack,      //цель найдена, атакуем
    }
    protected State state = State.Idle;
    private Vector3 targetingPosition;
    private float sqrVisionRadius;
 
    public void Start()
    {
        sqrVisionRadius = visionRadius * visionRadius;
        StartCoroutine(FindClosestTarget());
        StartCoroutine(FSM());
    }
 
    public void Update()
    {
        previousTargetPosition = target.position;
    }
 
    public void LateUpdate()
    {
        targetSpeed = (target.position - previousTargetPosition) / Time.deltaTime;
    }
    protected IEnumerator FSM()
    {
        while (true)
        {
            yield return StartCoroutine(state.ToString());
        }
    }
    protected IEnumerator Idle()
    {
        while (!target)
        {
            yield return null;
        }
        state = State.Atack;
    }
 
    protected IEnumerator Atack()
    {
        while (target)
            {
           targetingPosition = CalculateAim();
            Vector3 directionTurretToTarget = targetingPosition - turretHead.position;
            directionTurretToTarget.y = 0;
            Quaternion rotateQuaternion = Quaternion.LookRotation(directionTurretToTarget);
            float angle = Quaternion.Angle(turretHead.localRotation, rotateQuaternion);
            turretHead.localRotation = Quaternion.Slerp(
                turretHead.localRotation,
                rotateQuaternion,
                Mathf.Min(1f, Time.deltaTime * rotationSpeed / angle)
            );
            
              yield return null;
        }
        state = State.Idle;
    }
 
     protected Vector3 CalculateAim()
   {
      targetingPosition = target.position;
        for (int i = 0; i < 10; i++)
        {
           float dist = (turretGun.position - targetingPosition).magnitude;
        }
                return targetingPosition;
  }
 
    protected IEnumerator FindClosestTarget()
    {
        while (true)
        {
            Transform closest = null;
            GameObject[] targets = GameObject.FindGameObjectsWithTag(enemyTag);
            float distance = sqrVisionRadius;
            foreach (GameObject go in targets)
            {
                Vector3 diff = go.transform.position - transform.position;
                float curDistance = diff.sqrMagnitude;
                if (curDistance < distance)
                {
                    closest = go.transform;
                    distance = curDistance;
                }
            }
            target = closest;
            yield return new WaitForSeconds(searchTimeDelay);
        }
    }
    
    void OnDrawGizmos()
    {
        if (state == State.Atack)
        {
                       Debug.DrawRay(turretHead.position, turretHead.forward * visionRadius, Color.red);
        }
    }
}
0
 Аватар для 1max1
3362 / 1775 / 1028
Регистрация: 26.10.2018
Сообщений: 5,204
19.11.2019, 16:27
Я думаю отключение скрипта не влияет на выполнение корутин, так что скорей всего в них проблема.
Можно добавить вначале while каждой корутины такую строчку:
C#
1
2
if (!this.enabled)
    yield return null;
0
0 / 0 / 0
Регистрация: 23.10.2019
Сообщений: 31
19.11.2019, 17:04  [ТС]
Я попробовал активировать неактивный скрипт в игровом режиме. Невозможно. Переменная изменяется, галочка ставится и снимается только при вхождении объектов в триггерную зону.

Добавлено через 11 минут
To 1max1. Благодарю!
Я попробовал, все одно - работает при выключенной галочке.

Добавлено через 22 минуты
На самом деле мне эта приблуда нужна лишь для красоты, чтобы башня вращалась. Всё, что я хотел получить от этой сцены - я получил - у меня на триггер объектов с тэгом ставится галочка и отображается противник. В принципе можно, наверное, создавать пустую фишку с таким тэгом на 1,0,0 башни и башня будет крутиться к ней когда переменная aims = 0 и скрипт "выключен"
0
0 / 0 / 0
Регистрация: 23.10.2019
Сообщений: 31
19.11.2019, 23:08  [ТС]
А можно сделать так, что этот скрипт "turn" отвечающий за разворот башни из управляющего разворотом, станет выдающим данные на разворот допустим в какую-то переменную нового "буферного" управляющего башней скрипта transfom.localRotation My1 ? Может тогда этот новый буферный скрипт можно будет отключить? А этот пусть себе считает, хоть при выключенном компьютере?

Не очень красиво выходит, когда сооружения 15 метров длины, видные со всех сторон и занимающие 1/6 линейных размеров фишки - не анимированы.
0
 Аватар для Steroid
296 / 217 / 86
Регистрация: 17.02.2016
Сообщений: 1,276
Записей в блоге: 1
20.11.2019, 00:06
Цитата Сообщение от НовикДД Посмотреть сообщение
А можно сделать так, что этот скрипт "turn" отвечающий за разворот башни из управляющего разворотом, станет выдающим данные на разворот допустим в какую-то переменную нового "буферного" управляющего башней скрипта transfom.localRotation My1 ? Может тогда этот новый буферный скрипт можно будет отключить? А этот пусть себе считает, хоть при выключенном компьютере?

всё можно, но легче новый скрипт написать
я так понимаю скрипты не сам писал?
снял с какогото tower defens?
0
0 / 0 / 0
Регистрация: 23.10.2019
Сообщений: 31
20.11.2019, 01:07  [ТС]
Нет, конечно, не сам. В интернете полно разных кодов, я по-крайней мере могу уже их читать и понимать. Этот код - на мой взгляд - высший пилотаж...
И, я знаю, что такое корутин. Так как снимать из этого скрипта localRotation? От него больше ничего нужно. Это я передам в скрипт из двух строчек, который будет назначать поворот башни и который можно будет отключить.

Добавлено через 2 минуты
Кстати, - первый скрипт с условиями сам написал. Я быстро учусь

Добавлено через 30 минут
Я, кстати, придумал, как снять данные. Туда в качестве гейм-обжекта подцепляется объект, который вращает скрипт. Туда надо подцепить пустышку, пусть он ее вращает, а ее Трансформ, можно снимать в скрипт, который можно повесить уже на башню и который можно отключить. Я понимаю, что это через одно место, но башен у меня в игре гораздо меньше, чем фишек, не больше 100, и по идее комп не должен подвиснуть.
0
0 / 0 / 0
Регистрация: 23.10.2019
Сообщений: 31
20.11.2019, 21:40  [ТС]
То 1max1
Братан, такая хрень. Ты уж извиняй. Я выложил сегодня видео, что вы видели (пару дней назад, оно без коммента) на канале с комментарием. Я подготовил два варианта с комментарием и без.После того как вы мне помогли - я комментарий задробил. Оказывается, потер не то видео. Меня сегодня сдернули с места, и я выложил видео не то, что хотел, не успел проверить... Короче, ты теперь звезда Ютуба. Извиняй, я не хотел. Видео я с канала потер, как увидел оплошность. Но это уже не поможет, даже если дам опровержение. У меня канал для скачивания, далее актив разносит это по Инету. По всем соцсетям и прочее. Сегодня его увидят несколько десятков тысяч человек. Тут вот еще, что - могут приехать побеседовать. Короче, если что, пиши в личку. Я постараюсь решить проблему.
Еще раз извини сердечно, я оплошал.
0
 Аватар для Steroid
296 / 217 / 86
Регистрация: 17.02.2016
Сообщений: 1,276
Записей в блоге: 1
21.11.2019, 04:26
Цитата Сообщение от НовикДД Посмотреть сообщение
По всем соцсетям и прочее. Сегодня его увидят несколько десятков тысяч человек
очень слабая оценка канала
почему не сотен или миллионов?
0
0 / 0 / 0
Регистрация: 23.10.2019
Сообщений: 31
21.11.2019, 08:03  [ТС]
Какого канала? Первого убитого, на котором было 13,5 тыс подписчиков 2,5 миллиона просмотров, сотни тысяч репостов?
Второго убитого канала, на котором было 12 тыс подписчиков?
Третьего убитого? Этот - резервный. Хорошо, если ты во всем уверен, информированность порождает скорбь.

To 1max1. Вот видео с опровержением. https://www.youtube.com/watch?v=lmEtgacwBKs В случае чего покажи его.
0
 Аватар для 1max1
3362 / 1775 / 1028
Регистрация: 26.10.2018
Сообщений: 5,204
21.11.2019, 12:15
Моя личность мало кому интересна в этой жизни, так что я буду только рад, если ко мне кто-то приедет
Так-то я тоже вальнул не подумав, обычно меня не интересует подобные темы и споры, просто я сейчас не в самом хорошем состоянии.
0
0 / 0 / 0
Регистрация: 23.10.2019
Сообщений: 31
09.12.2019, 20:12  [ТС]
Здравия. Я решил проблему с тем как остановить скрипт. А попутно у меня вынесло Юнити и поубивало все назначения скриптов на объекты. Пришлось Юнити заново переустанавливать и заново воссоздавать сцену и присваивать связи. Но не было бы счастья - да, несчастье помогло. В результате я установил, что скрипт поиска целей и управления пушкой не полностью описывает реальность, которая мне нужна. Подробнее почему тут https://wdho.ru/deYe

В связи со всем этим есть пара вопросов:
1 Юнити что - нестабильная программа?
2. Как осуществить поиск объектов по переменной типа String по типу того как это делается для GameObject.FindGameObjectsWithTag? Подробнее почему тэг не подходит в качестве параметра для поиска в видео https://wdho.ru/deYe
0
 Аватар для Steroid
296 / 217 / 86
Регистрация: 17.02.2016
Сообщений: 1,276
Записей в блоге: 1
09.12.2019, 20:36
НовикДД,
думаешь ктото будет скачивать твои видео?
залей на ютуб или объясни конкретно в тексте
не трать время тех кто тебе захочет помочь

Цитата Сообщение от НовикДД Посмотреть сообщение
1 Юнити что - нестабильная программа?
смотря где ковырять
Цитата Сообщение от НовикДД Посмотреть сообщение
GameObject.FindGameObjectsWithTag
искать стринги всегда ресурсозатратно, тоесть каждая буква сравнивается поотдельности

Добавлено через 1 минуту
ПыСы: если правильно помню Правила форума
1 проблема = 1 тема
0
0 / 0 / 0
Регистрация: 23.10.2019
Сообщений: 31
09.12.2019, 21:44  [ТС]
1. Насчет правила 1 проблема - 1 тема я не знал. Если этому следовать весь форум будет из моих сообщений.
2. С тытрупом я не дружу - меня оттуда выписали. На этом файлообменнике можно просто посмотреть. Надо нажать скачать и можно не скачивая посмотреть. Странно, что ты это не заметил

Что до проблемы. Поиск цели происходит по тегу Friend. Скрипт опубликован выше. Я довел его до ума, причем сам, он отключается когда надо и включается, когда надо. Подробнее в видео. Но только когда в игре одна фишка противника. Как только 2 фишки с разных бортов, пушки, - на моем корабле их много, - начинают "стрелять" через корабль. Значит должна формироваться переменная для противника условно противник-сЛевогоБорта и противник-сПравогоборта (а есть еще противник-сНоса и противник-сКормы) смотря потому, в какой коллайдер он зайдет и поиск целей должен происходить в новом ПОДмножестве с тегом противник, который будет его составной частью. Т.е. должны складываться 2 переменные противник+сЛевогоБорта, чтобы исключить поиск целей в этом подмножестве для пушек правого борта. Как-то так

Возможно есть другое решение, но я его не вижу.

Добавлено через 4 минуты
Можно не записывать в стринг. Можно формировать число, но в любом случае это уже не тэг, а переменная. Меня интересует как искать объекты по переменной.

Добавлено через 17 минут
C#
1
GameObject[] targets = GameObject.FindGameObjectsWithTag(enemyTag);
Пишу ересь, но нужно, что-то вроде:

GameObject[] targets = GameObject.FindGameObjectsWithString(Fri end1);
GameObject[] targets = GameObject.FindGameObjectsWithVar(100000 1);
0
 Аватар для 1max1
3362 / 1775 / 1028
Регистрация: 26.10.2018
Сообщений: 5,204
09.12.2019, 22:01
Я знаю как можно найти объект по имени https://docs.unity3d.com/Scrip... .Find.html
По переменным - не знаю))
0
0 / 0 / 0
Регистрация: 23.10.2019
Сообщений: 31
10.12.2019, 15:19  [ТС]
To 1max1
Приветствую.
Благодарю за подсказку. Я вытащил в часть скрипта, отвечающую за определение цели имя цели.
Теперь, как я понимаю надо сравнить есть ли у объекта с таким названием collision с моей полусферой, допустим, левого борта. А далее поставить условием поворота пушек только объект с таким collision ? Очередной, тогда, вопрос - как? Если цель будет в правой полусфере ближе - она все равно будет ближайшей, значит надо делать второй поиск из тех у кого есть такая переменная? И опять я попадаю на поиск либо по тэгу либо по переменной (которого не существует)
0
 Аватар для Steroid
296 / 217 / 86
Регистрация: 17.02.2016
Сообщений: 1,276
Записей в блоге: 1
10.12.2019, 19:38
несколько тригеров на обдном объекте очень геморное дело настраивать под разные условия (имхо), лучше сразу в коде
Определить направление вектора, "минус Х" или "плюс Х" от корабля
пушкам раздать булевую "правый борт" (если пушка с левого борта то её не использовать)
исходя из этого брать в цель

тригером можно определить радиус обнаружения противника

Цитата Сообщение от НовикДД Посмотреть сообщение
Насчет правила 1 проблема - 1 тема я не знал. Если этому следовать весь форум будет из моих сообщений.
это упрощает людям после тебя со схожими проблемами искать ответ

Цитата Сообщение от НовикДД Посмотреть сообщение
как искать объекты по переменной
никак

Цитата Сообщение от НовикДД Посмотреть сообщение
Странно, что ты это не заметил
я даже не нажимал на кнопку скачать
0
0 / 0 / 0
Регистрация: 23.10.2019
Сообщений: 31
12.12.2019, 09:36  [ТС]
To Steroid
Благодарю! Я решил эту задачу. Через тэги. Такого вероятия, чтобы корабль противника находился между двух огней я не помню. Ну а даже если такое и произойдет и целей будет несколько - произойдет обмен целями и вся недолга. У меня 4 тэга, которые я добавляю автоматически. Два тэга на нос и корму, были такие корабли, которые имели крупные пушки для стрельбы только в нос или корму.

Только тут, что ни понос - то золотуха. Так как секторов несколько, мне пришлось создавать клоны для каждого сектора на момент вхождения в коллайдер основной цели. Все нормально создается, имена присваиваются, тэги присваиваются (ОБРАЩАЮ ВНИМАНИЕ ЕЩЕ РАЗ ТЕХ, КТО ИМПОРТИРУЕТ В ИГРУ МОДЕЛИ В ФОРМАТЕ OBJ - ЮНИТИ КАТЕГОРИЧЕСКИЕ НЕ ВОСПРИНИМАЕТ ПОД КОЛЛАЙДЕР ОБОЛОЧКУ КРОМЕ КАК В ПОДОБЪЕКТЕ), Беда в том, что вновь созданные объекты с правильными именами и тэгами программа не воспринимает от слова ВООБЩЕ. Наверное, я чего-то упустил по незнанию.

Вопрос, как сделать так, чтобы программа воспринимала клоны как GameJbjects?

Заранее благодарю за подсказку

Добавлено через 8 минут
Так, чтобы избежать вопроса насчет GameObject
C#
1
zone = GameObject.Instantiate(zonePrefab, curPos, Quaternion.identity) as GameObject;
0
 Аватар для Steroid
296 / 217 / 86
Регистрация: 17.02.2016
Сообщений: 1,276
Записей в блоге: 1
12.12.2019, 12:22
Цитата Сообщение от НовикДД Посмотреть сообщение
ОБРАЩАЮ ВНИМАНИЕ ЕЩЕ РАЗ ТЕХ, КТО ИМПОРТИРУЕТ В ИГРУ МОДЕЛИ В ФОРМАТЕ OBJ - ЮНИТИ КАТЕГОРИЧЕСКИЕ НЕ ВОСПРИНИМАЕТ ПОД КОЛЛАЙДЕР ОБОЛОЧКУ КРОМЕ КАК В ПОДОБЪЕКТЕ
что?

Добавлено через 1 минуту
Цитата Сообщение от НовикДД Посмотреть сообщение
Вопрос, как сделать так, чтобы программа воспринимала клоны как GameJbjects?
все объекты на сцене являются автоматически GameObjectами
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.12.2019, 12:22
Помогаю со студенческими работами здесь

Как сделать так чтобы при открытие дочерних форм (через MainMenu) появлялась только одна вкладка TabSet
Такая ситуация, существует главная форма и дочерние(MDI), как сделать так чтобы при открытие дочерних форм (через MainMenu) появлялась...

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

Как сделать чтобы при значении "Забил" Игрок 1 бил дальше, а при значении "Промахнулся" ход переходил другому игроку.
Покажите как правильно сделать,чтобы при значение &quot;Забил&quot; например Игрок 1 дальше бил, чтобы &quot;Игрок 1 &quot; промахивался и ход...

Как сделать так чтобы страничка при увеличения разрешения не двигалась в разные стороны, и как сделать чтобы при открытии в опере и в других браузерах
все обьекты на странице не двигались в разные стороны???

OpenGl+qt как сделать чтобы при нажатии на кнопки камера передвигалась по сцене
Помогите с проблемой. Хочу чтобы камера двигалась вокруг своей оси, вперед, назад при нажатии на кнопки со стрелками. glRotate,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru