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

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

СообщениеДобавлено: 17 июл 2017, 19:59
Sne Bjorn
Добрый вечер друзья. Я новичок в C# и Unity. Столкнулся с такой проблемой.
1) Есть канвас в котором есть пустой ГО с коллайдером2д, то есть на ГО есть только два компонента: рект трансформ и коллайдер2д.
2) Есть отдельный ГО который находится вне канваса. На этот ГО привязан скрипт.

Вопрос: Возможно ли написать в этом скрипте функцию OnMouseUpAsButton чтобы он срабатывал именно когда я нажимаю на ГО который находится в канвасе. Или мне надо вешать этот скрипт конкретно на ГО который находится в канвасе?

Я пытался сделать это таким образом.
1) В скрипте создал публичную переменную public GameObject left_touch; в которую в редакторе засунул тот ГО который находится в канвасе.
2) Создал функцию:
Синтаксис:
Используется csharp
void OnMouseUpAsButton()
    {
        if (left_touch)
        {
            Debug.Log("LEFT touch");
            print("left");
        }
    }


Но почему то при запуске проекта в редакторе, в консоль не хочет выводится тот блок кода который описан в условие if. Нажимаю по всему ГО но не работает. Подскажите пожалуйста, что я делаю не так.
P.S. Извиняюсь, если название вопроса сформулировал неправильно.

Re: OnMouseUpAsButton скрипт на одном объекте, управлять другим

СообщениеДобавлено: 17 июл 2017, 21:43
samana
ven000mus писал(а):Вопрос: Возможно ли написать в этом скрипте функцию OnMouseUpAsButton чтобы он срабатывал именно когда я нажимаю на ГО который находится в канвасе. Или мне надо вешать этот скрипт конкретно на ГО который находится в канвасе?

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

Re: OnMouseUpAsButton скрипт на одном объекте, управлять другим

СообщениеДобавлено: 17 июл 2017, 22:28
Sne Bjorn
samana писал(а):
ven000mus писал(а):Вопрос: Возможно ли написать в этом скрипте функцию OnMouseUpAsButton чтобы он срабатывал именно когда я нажимаю на ГО который находится в канвасе. Или мне надо вешать этот скрипт конкретно на ГО который находится в канвасе?

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


Спасибо за ответ. По гуглив, я так и понял что не получится. А тогда такой вопрос, я ведь могу с помощь функции OnMouseUpAsButton, когда прикручу скрипт в ГО канваса, это свое рода невидимые кнопки которые имеют только два компонента: рект трансформ и коллайдер2д, двигать ГО игрока который находится вне канваса и имеет компонент РБ?

Re: OnMouseUpAsButton скрипт на одном объекте, управлять другим

СообщениеДобавлено: 17 июл 2017, 23:04
Sne Bjorn
Разобрался сам и гугл помог :)
Прописал в скрипте который привязал к ГО канваса в функции OnMouseUpAsButton, блок кода: panda_rb.velocity = new Vector2(turnSpeed, panda_rb.velocity.y);. Заранее выше объявив public Rigidbody2D panda_rb; (в редакторе засунул туда РБ ГО который вне канваса) и float turnSpeed = 5; и все работает, ГО двигается, как я и хотел.

Сейчас буду заставлять ГО игрока (который вне канваса) автоматически прыгать постоянно на определенную высоту и буду думать как прикрутить к нему граундчек чтобы он не улетал, а только прыгал если касается какого то колллайдера с тегом граунд.

Re: OnMouseUpAsButton скрипт на одном объекте, управлять другим

СообщениеДобавлено: 18 июл 2017, 19:50
Rando_OM
ven000mus писал(а):Разобрался сам и гугл помог :)
Прописал в скрипте который привязал к ГО канваса в функции OnMouseUpAsButton, блок кода: panda_rb.velocity = new Vector2(turnSpeed, panda_rb.velocity.y);. Заранее выше объявив public Rigidbody2D panda_rb; (в редакторе засунул туда РБ ГО который вне канваса) и float turnSpeed = 5; и все работает, ГО двигается, как я и хотел.

Сейчас буду заставлять ГО игрока (который вне канваса) автоматически прыгать постоянно на определенную высоту и буду думать как прикрутить к нему граундчек чтобы он не улетал, а только прыгал если касается какого то колллайдера с тегом граунд.

А зачем коллайдер в канвасе? там же все через buttons image text работает.

Re: OnMouseUpAsButton скрипт на одном объекте, управлять другим

СообщениеДобавлено: 18 июл 2017, 22:10
Sne Bjorn
Rando_OM писал(а):
ven000mus писал(а):Разобрался сам и гугл помог :)
Прописал в скрипте который привязал к ГО канваса в функции OnMouseUpAsButton, блок кода: panda_rb.velocity = new Vector2(turnSpeed, panda_rb.velocity.y);. Заранее выше объявив public Rigidbody2D panda_rb; (в редакторе засунул туда РБ ГО который вне канваса) и float turnSpeed = 5; и все работает, ГО двигается, как я и хотел.

Сейчас буду заставлять ГО игрока (который вне канваса) автоматически прыгать постоянно на определенную высоту и буду думать как прикрутить к нему граундчек чтобы он не улетал, а только прыгал если касается какого то колллайдера с тегом граунд.

А зачем коллайдер в канвасе? там же все через buttons image text работает.


Ну я там создал два ГО в канвасе и прицепил к ним только коллайдер и рект трансформ и получил две невидимые кнопки для тача. Один ГО на одной половине экрана, второй ГО на другой. И нажимая на левую половину экрана, двигаю ГО героя влево, нажимая на правую половину, двигаю ГО героя на право. Как то так.

Re: OnMouseUpAsButton скрипт на одном объекте, управлять другим

СообщениеДобавлено: 19 июл 2017, 02:00
Sne Bjorn
Все, граундчек сделал, ГО героя прыгает автоматически на выставленную мною высоту и повторяет прыжок только если ГО находится на слое земля :)

Теперь буду думать как сделать генерацию платформ для героя на которые он будет запрыгивать чтобы пониматься выше и выше, но при этом чтобы платформы появлялись рандомно, но не наезжали сами на себя и конечно же давали герою возможность иметь некое расстояние между собой, дабы герой мог постепенно на них зализать. Ну и конечно останется допереть как сделать так чтобы камера и задний фон всегда следовали за героем но только по оси У (вертикально).

Зачем я это пишу тут, да фиг его знает :)

Re: OnMouseUpAsButton скрипт на одном объекте, управлять другим

СообщениеДобавлено: 19 июл 2017, 03:02
Valerich
Теперь буду думать как сделать

для 2d, я за вас вбил в поисковике, может пригодиться https://www.youtube.com/watch?v=IinYy-gY2oQ

Re: OnMouseUpAsButton скрипт на одном объекте, управлять другим

СообщениеДобавлено: 19 июл 2017, 04:06
Sne Bjorn
Valerich писал(а):
Теперь буду думать как сделать

для 2d, я за вас вбил в поисковике, может пригодиться https://www.youtube.com/watch?v=IinYy-gY2oQ


Да 2d конечно, я только начал изучать C# & Unity, поэтому делать что то больше чем 2d платформер, вряд ли стоит.
За видео большое спасибо, гляну.

P.S. Если что я написал тут свои мысли, не для того чтобы люди за меня что то искали :) Просто поделился.

Re: OnMouseUpAsButton скрипт на одном объекте, управлять другим

СообщениеДобавлено: 19 июл 2017, 05:46
Valerich
Теперь буду думать как сделать генерацию платформ для героя на которые он будет запрыгивать чтобы пониматься выше и выше, но при этом чтобы платформы появлялись рандомно, но не наезжали сами на себя и конечно же давали герою возможность иметь некое расстояние между собой, дабы герой мог постепенно на них зализать. Ну и конечно останется допереть как сделать так чтобы камера и задний фон всегда следовали за героем но только по оси У (вертикально).

Это видео просто пример коих сотни, который как мне кажется вам нужен, того что вы описали выше, я просто сразу подумал о doodle jump и в некой степени flappy bird, но больше первый вариант. Вот как то так.

Re: OnMouseUpAsButton скрипт на одном объекте, управлять другим

СообщениеДобавлено: 19 июл 2017, 05:52
Sne Bjorn
Valerich писал(а):
Теперь буду думать как сделать генерацию платформ для героя на которые он будет запрыгивать чтобы пониматься выше и выше, но при этом чтобы платформы появлялись рандомно, но не наезжали сами на себя и конечно же давали герою возможность иметь некое расстояние между собой, дабы герой мог постепенно на них зализать. Ну и конечно останется допереть как сделать так чтобы камера и задний фон всегда следовали за героем но только по оси У (вертикально).

Это видео просто пример, того что вы описали выше, я просто сразу подумал о doodle jump и в некой степени flappy bird, но больше первый вариант. Вот как то так.


Да кстати неплохое видео, особенно понравился алгоритм комнат :) Возможно есть и лучше варианты, но мне очень приглянулся данный способ, что есть некие комнаты и их просто меняют местами и поднимают выше, а в конечном варианте, игрок думает что там бесконечность :) Спасибо еще раз за видосик.