Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.89/19: Рейтинг темы: голосов - 19, средняя оценка - 4.89
1 / 1 / 0
Регистрация: 04.06.2019
Сообщений: 37
1

Народ, как реализовать простой код перемещения N объектов, когда зашел в 2D триггер

04.06.2019, 10:10. Просмотров 3460. Ответов 29
Метки нет (Все метки)

Народ, помогите начинающему проекту (в вк можете найти Studio New Vector). В общем сам почти один, создаю 2D игру экшн рпг.
Денег конечно почти нет, а когда есть, то заказываю простенькие коды у программиста, которые стараюсь сам изучить. Научился делать триггеры и писать в коде их три положения. Как можно реализовать код триггер так, чтобы когда я в нём стою, то срабатывают перемещения двух объектов. 1 - моя кнопка на которую я встану и которая находится в зоне триггера (она будет в форме отдельного спрайта) и второй объект - какая-нибудь глыба начнет подниматься или опускаться из точки А в точку В плавно или там со скоростью какой-то!
Буду рад любому совету!)))
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2019, 10:10
Ответы с готовыми решениями:

Шифрование методом Цезаря/простого перемещения/двойного перемещения/простой замены
Всем привет, так случилось что мне задали за пару дней сделать программу шифрования и дешифрования...

Простой код на haskell (элементарное) - не знаю как это в python реализовать
adjectives = nouns = funnn = ввожу в консоли funnn и вот output: *F_world> funnn

Как изменить код, чтобы он получал лишь текст? К примеру, зашел на сайт, вывел список тем, пользователей и т.д
package ru.startandroid......................... import android.app.Activity; import...

Народ помагите простой вапрос.
Подскажите это не понимаю a:b что это делает.Заранее спасибо. { int a; int b,c,k; cout...

29
886 / 543 / 269
Регистрация: 23.02.2019
Сообщений: 1,298
04.06.2019, 11:36 2
Очень разными способами можно это сделать. Смотря, как двигаются ваши объекты. Можно двигать их через анимацию (animator), либо можно двигать их с помощью кода, напрямую изменяя координаты.

Так же неизвестно, что должно происходить если вышли из триггера? Всё должно плавно возвращаться на свои места, либо оставаться в последнем положении?
0
1 / 1 / 0
Регистрация: 04.06.2019
Сообщений: 37
04.06.2019, 13:12  [ТС] 3
Перемещать с помощью перемещения объекта самого из точки A точку B. Чтобы сам спрайт с коллайдером двигался по оси Y вверх к примеру из текущей позиции в позицию выше или ниже и останавливался, а когда я выхожу из тригера, то он обратно не возвращается. Но я догадываюсь, что чтобы мне вернуть его обратно, то тоже самое нужно прописать в exit триггере, только с обратными данными. Но блин, как вообще правильно писать писать часть кода самого перемещения, не знаю, где даже найти, уже много видео пересмотрел и везде по разному, что-то работало, но только тогда, когда я бегаю в самом тригере туда сюда и даже если я это прописываю в тригере Stay. И объект не только перемещается вверх как лифт, но не останавливается в точке которую я указал, хотя на видео у мужика всё работает... Всё, что я умею это из точки а переместить объект в точку б, но моментально, а не плавно двигать по оси(
0
886 / 543 / 269
Регистрация: 23.02.2019
Сообщений: 1,298
04.06.2019, 14:09 4
Лучший ответ Сообщение было отмечено New_Vector как решение

Решение

Допустим есть некая кнопка триггер на сцене, если в неё входит игрок (Player), то камень (stone) ползёт к некой "точке Б" на сцене. Камень двигается, до тех пор, пока игрок в зоне триггера, если игрок вышел из триггера, то камень остановится. Если камень достиг "точки Б", то больше скрипт не действует ни на что и удаляется.

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
using UnityEngine;
 
public class MoveStone : MonoBehaviour
{
    public Transform stone; // ссылка на камень в сцене, который должен переместиться из А в Б
    public Transform pointB; // точка Б на сцене
 
    public float moveSpeed = 1;
 
    private bool _moveStone;
 
    private void Update()
    {
        if (_moveStone)
        {
            stone.position = Vector2.MoveTowards(stone.position, pointB.position, moveSpeed * Time.deltaTime);
 
            // когда камень встал на позицию Б, то можно удалить pointB со сцены и данный скрипт тоже. 
            if ((stone.position - pointB.position).sqrMagnitude < 0.001f)
            {
                stone.position = pointB.position;
                Destroy(pointB.gameObject);
                Destroy(this);
            }
        }
    }
 
    private void OnTriggerEnter2D(Collider2D collision)
    {
        // если в триггер попал игрок, то двигать камень можно
        if (collision.gameObject.name == "Player")
        {
            _moveStone = true;
        }
    }
 
    private void OnTriggerExit2D(Collider2D collision)
    {
        // если в из триггера игрок вышел, то перестаём двигать камень
        if (collision.gameObject.name == "Player")
        {
            _moveStone = false;
        }
    }
}
1
1 / 1 / 0
Регистрация: 04.06.2019
Сообщений: 37
04.06.2019, 15:37  [ТС] 5
Ого, даже подробно! Сейчас я изучу его и задействую!) Отпишусь!))

Добавлено через 23 минуты
Помогло! Очень круто, теперь я могу создавать различные головоломки с плитами, дверьми и тд Очень благодарен Вам)) Если интересно можете следить за проектом, пока там только управление настроено, анимация и камера, но теперь есть крутой скрипт и я знаю как плавно перемещать какие-либо объекты в 2D!))
0
886 / 543 / 269
Регистрация: 23.02.2019
Сообщений: 1,298
04.06.2019, 15:39 6
Отлично! Продолжайте в том же духе!!!
0
1 / 1 / 0
Регистрация: 04.06.2019
Сообщений: 37
04.06.2019, 19:09  [ТС] 7
Конечно!)) Если что результат вашего скрипта и моих начинаний на ютуб решил залить, чтобы удобно делиться https://youtu.be/lecryt-W-Xo

Добавлено через 2 часа 40 минут
Слушай, у меня тут странный такой баг, добавил врага на сцену (пустой объект+спрайт первого кадра анимации+колайдер+риджибади), запускаю игру и его в игре нет, а на сцене он есть... причем ведет себя нормально, упал и работает анимация типа он бежит, только вот в игре его нет( ВТорой раз такое за сегодня, не могу понять из-за чего...

Добавлено через 7 минут
Нашел проблему!)) Ось Z)))
0
886 / 543 / 269
Регистрация: 23.02.2019
Сообщений: 1,298
04.06.2019, 20:19 8
На одной оси Z далеко не уйти, посмотрите уроки по Sorting Layer and Order in Layer для спрайтов, например https://www.youtube.com/watch?v=PtVkXtikxi4, это даёт контроль над порядком отображения спрайтов, кто кого перекрывает.
1
1676 / 1074 / 620
Регистрация: 26.10.2018
Сообщений: 3,129
04.06.2019, 20:24 9
Я вообще бы не рекомендовал бы дергать ось Z, только в редких случаях.
0
1 / 1 / 0
Регистрация: 04.06.2019
Сообщений: 37
04.06.2019, 20:58  [ТС] 10
Слои то я знаю, это сразу понял, просто само ставилось по z -71)) Сейчас вот скрипт пишу по видео, чтобы чувак стрелял влево, вправо, но чувствую не получится, там же еще вызывать анимацию нужно, как он бластер доставать будет, и плюс стрелять хотелось бы управлять мышкой, а не как у парня на видео влево и вправо тупо)) У меня просто набеги будут вражеских юнитов, типа жуков там здоровых и нужно будет отбиваться)) Это нужно стрельба "по лучу" попробую из книги взять, там 3д вариант правда, может в 2д сделаю, покажу потом))
0
1 / 1 / 0
Регистрация: 04.06.2019
Сообщений: 37
07.09.2020, 18:42  [ТС] 11
samana, привет умный человек! Помоги пожалуйста разобраться с такой вот штукой. Игрок заходит в костер и срабатывет таймер - мол каждую секунду отнимать по 1й жизни, но это происходит все очень быстро и таймер по не работает(( Поможешь разобраться, там маленький код, простенький?
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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Damage : MonoBehaviour
{
    
 
    public bool inZoneFire = false;
    private void OnTriggerEnter2D(Collider2D collision)
    {
        //if (collision.tag == "Player")
        //{
        //    inZoneFire = true;
        //    StartCoroutine("DamageTime");
 
        //}
    }
 
    private void OnTriggerStay2D(Collider2D collision)
    {
        if (collision.tag == "Player")
        {
            
            StartCoroutine("DamageTime");
        }
    }
 
 
    IEnumerator DamageTime()
    {
        for (; ; )
        {
            DamageFire();
            yield return new WaitForSeconds(1f);
            
        }
    }
 
    void DamageFire()
    {
        
        HealthSystem.hS.numberOfLive = HealthSystem.hS.numberOfLive - 1; //Жизни находятся в другом скрипте в виде картинок. Картинки в виде int
        
    }
}
0
148 / 106 / 44
Регистрация: 04.03.2019
Сообщений: 720
07.09.2020, 18:45 12
Цитата Сообщение от New_Vector Посмотреть сообщение
но это происходит все очень быстро
так у вас каждый кадр запускается вечная корутина
C#
1
2
3
4
5
6
7
8
private void OnTriggerStay2D(Collider2D collision)
    {
        if (collision.tag == "Player")
        {
            
            StartCoroutine("DamageTime");
        }
    }
Добавлено через 27 секунд
и потому их становится много и они быстро сьедают ХП
0
124 / 80 / 45
Регистрация: 04.07.2012
Сообщений: 374
07.09.2020, 18:45 13

Не по теме:

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



Я боюсь даже представить как это работает, но если оно не выдает ошибок, то проблема тут:
Цитата Сообщение от New_Vector Посмотреть сообщение
for (; ; )
И да, перенесите короутину на enter, а не на stay.
0
148 / 106 / 44
Регистрация: 04.03.2019
Сообщений: 720
07.09.2020, 18:46 14
вам лучше сделать так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.tag == "Player")
        {
            StartCoroutine("DamageTime");
        }
    }
 
private void OnTriggerExit2D(Collider2D collision)
    {
        if (collision.tag == "Player")
        {
            StopCoroutine("DamageTime");
        }
    }
0
886 / 543 / 269
Регистрация: 23.02.2019
Сообщений: 1,298
07.09.2020, 19:01 15
Лучший ответ Сообщение было отмечено New_Vector как решение

Решение

New_Vector, А вот ребята выше уже всё подсказали, я пришел слишком поздно.

Цитата Сообщение от Erdinger Посмотреть сообщение
Я боюсь даже представить как это работает
Так это просто бесконечный цикл, на С# так тоже можно.
0
124 / 80 / 45
Регистрация: 04.07.2012
Сообщений: 374
07.09.2020, 19:05 16
samana, спасибо, не знал
while(true) как-то более наглядно
0
1 / 1 / 0
Регистрация: 04.06.2019
Сообщений: 37
07.09.2020, 19:16  [ТС] 17
Это помогает только один раз отнять хп, а у меня ситуация с костром. Мол я стою в костре и должны каждую там секунду отниматься 1 хп.
0
886 / 543 / 269
Регистрация: 23.02.2019
Сообщений: 1,298
07.09.2020, 19:19 18
Цитата Сообщение от Erdinger Посмотреть сообщение
while(true) как-то более наглядно
Erdinger, Да, согласен.
0
1 / 1 / 0
Регистрация: 04.06.2019
Сообщений: 37
07.09.2020, 19:25  [ТС] 19
Народ всем большое спасибо, до меня доперло, что само действие дамага нужно засунуть в таймер!
C#
1
2
3
4
5
6
7
8
9
 IEnumerator DamageTime()
    {
        for (; ; )
        {
            //DamageFire();
            yield return new WaitForSeconds(2f);
            HealthSystem.hS.numberOfLive = HealthSystem.hS.numberOfLive - 1; //Жизни находятся в другом скрипте в виде картинок. Картинки в виде int
        }
    }
0
148 / 106 / 44
Регистрация: 04.03.2019
Сообщений: 720
07.09.2020, 19:27 20
Цитата Сообщение от New_Vector Посмотреть сообщение
Это помогает только один раз отнять хп, а у меня ситуация с костром. Мол я стою в костре и должны каждую там секунду отниматься 1 хп.
эммм.. это ответ на какой вопрос или рассуждение? или у вас снова чтото не работает?

Добавлено через 1 минуту
Цитата Сообщение от New_Vector Посмотреть сообщение
до меня доперло, что само действие дамага нужно засунуть в таймер
а в чем разница?)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.09.2020, 19:27

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

Как реализовать триггер (MySQL выдает ошибку)
Надо сделать вот такой триггер, но mysql выдает ошибку. Не подскажете что не так? create trigger...

Народ не делайте так не когда с процессорами, я походу моньяк!!!
кулер прикупил айс хаммер 4401+, решил проц поднять немного %-) я с ума сошол...

Когда необходимы определения членов-перемещения
Дарова всем. Не так давно прочел про конструкторы перемещения и соотв. операторы присваивания с...

Простой триггер
Добрый день. Подскажите пожалуйста, есть таблица Client в ней поля id, inicial, status, sale....

Простой триггер
Добрый день! Помогите, пожалуйста, не могу разобраться. Есть следующий запрос (PDO php): $sql =...

Простой триггер удаления
Здравствуйте. Дайте пример триггера удаления с описанием. Задача: есть главная таблица &quot;Тип&quot; и...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.