Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 5
1

Перемещение игрока возможно лишь если клик был по необходимому объекту (?)

09.10.2014, 19:51. Показов 1703. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, ребята!
Я новичок в Unity, поэтому не судите строго.
Столкнулся с вроде бы легкой на первый взгляд проблемой. Есть игрок и есть много врагов. Если игрок щелкает мышкой по врагу, то необходимо, чтобы он переместился в позицию врага. Если же клик осуществляется по пустой территории, то игрок не должен двигаться.

Решил реализовать через лучи, но не получилось. Коллайдеры на врагах есть.

Вот какой код прикреплен к объекту игрока:

C#
1
2
3
    void Start() {
        goToPoint = transform.position;
        }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void moveTo() {
        if (Input.GetMouseButtonDown (0)) {
 
            RaycastHit hit;
            
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
 
            if(Physics.Raycast(ray, out hit)) { 
                goToPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);
                goToPoint.z = transform.position.z;
            }
 
        }
        transform.position = Vector3.MoveTowards(transform.position, goToPoint, playerSpeed * Time.deltaTime);
        setAttack ();
        }
Подскажите, пожалуйста, в каком направлении двигаться?)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.10.2014, 19:51
Ответы с готовыми решениями:

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

Возможно ли сделать так чтобы лишь 1му пользователю который использует Wi-Fi был доступен интернет?
То вот вай-фай тчк. и пусть к ней подключаются все, а интернет от этой точки будет доступен лишь...

Имитировать клик по необходимому полю
Здравствуйте уважаемые форумчане. На главной форме, расположена подчиненная форма, данные для...

Клик по круглому объекту
Привет всем! Подскажите пожалуйста, как организовать клик строго по кругу, без прямоугольной...

8
69 / 70 / 19
Регистрация: 01.05.2013
Сообщений: 279
09.10.2014, 22:40 2
В Вашем коде нет условия "А на кого мы ткнули мышкой?". Например:
Если тэг объекта, в который Вы попали рейкастом == Enemy, то
C#
1
2
  goToPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);
                goToPoint.z = transform.position.z;
0
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 5
10.10.2014, 13:38  [ТС] 3
Nikita_Nikita, проблема в том, что объект игрока вообще не реагирует на клик мышкой. Если убрать рэйкасты, то он перемещается куда угодно, но стоит добавить проверку на столкновение с коллайдером - реакция на мышь исчезает.
0
69 / 70 / 19
Регистрация: 01.05.2013
Сообщений: 279
10.10.2014, 15:47 4
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        if (Input.GetMouseButtonDown (0)) {
            
            RaycastHit hit;
            
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            
            if(Physics.Raycast(ray, out hit,100)) { 
                goToPoint = hit.point;
                goToPoint.z = transform.position.z;
            }
            
        }
        transform.position = Vector3.MoveTowards(transform.position, goToPoint, 5 * Time.deltaTime);
Добавлено через 33 секунды
Camera.main.ScreenToWorldPoint(Input.mousePosition) у меня тоже не работала
0
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 5
10.10.2014, 15:59  [ТС] 5
Nikita_Nikita, попробовал Ваш код, все так же не работает
Может что-то не так с коллайдерами?
У панели BoxCollider 2D у врагов следующие настройки:
Material - None
is Trigger - None
Size - X:1 ; Y:1
Center - X:0; Y:0
0
69 / 70 / 19
Регистрация: 01.05.2013
Сообщений: 279
10.10.2014, 16:09 6
Цитата Сообщение от Peaumur Посмотреть сообщение
BoxCollider 2D
Ааа, у вас ирга 2d.
С 2д не баловался, мой код для 3d.
Кстать вопрос. Откуда в 2d игре координата Z?
Цитата Сообщение от Peaumur Посмотреть сообщение
goToPoint.z = transform.position.z;
Добавлено через 1 минуту
Цитата Сообщение от Nikita_Nikita Посмотреть сообщение
Кстать вопрос. Откуда в 2d игре координата Z?
Глупый вопрос, просто 1-ый раз 2д проект создал..
0
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 5
10.10.2014, 16:12  [ТС] 7
Это глубина. Если вдруг нужно чтобы задний фон всегда был задним ,а персонаж главный всегда был на переднем фоне.
Буду мучиться дальше) Если что-то заработает, выложу здесь код, вдруг пригодится кому-то..)
0
69 / 70 / 19
Регистрация: 01.05.2013
Сообщений: 279
10.10.2014, 16:39 8
Лучший ответ Сообщение было отмечено Peaumur как решение

Решение

BoxCollider 2D
RaycastHit2D
Physics2D.Raycast

Добавлено через 30 секунд
Только я пока слабо понимаю как заставить его в нужном направлении стрелять...

Добавлено через 17 минут
Как вариант
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    public Vector3 goToPoint=Vector3.zero;
    void Update () {
        transform.position += transform.forward * Time.deltaTime;
        if (Input.GetMouseButtonDown (0)) {
            Vector3 b = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            Vector2 a=new Vector2 (b.x,b.y);
            RaycastHit2D hit= Physics2D.Raycast (a, Vector3.forward,100);
            if (hit.collider != null) {
                goToPoint = hit.point;
                goToPoint.z = transform.position.z;
            }   
        }
        transform.position = Vector3.MoveTowards(transform.position, goToPoint, 5 * Time.deltaTime);
    }
P.S.Первый раз с 2д, так что не бейте, если можно все сделать без переменных a,b и вообще 1 строчкой.
1
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 5
10.10.2014, 17:19  [ТС] 9
Nikita_Nikita, спасибо, заработало!
0
10.10.2014, 17:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.10.2014, 17:19
Помогаю со студенческими работами здесь

Клик мышкой по объекту
Здравствуйте! У меня, не то чтобы проблема... В общем решил я двигаться в руку со временем и...

Клик по объекту сцены
У меня такой вопросик, пишу сцену на OpenGL и хотелось бы обрабатывать сообщения по клику на...

Перемещение игрока во время анимации
Здравствуйте, есть такой вопрос, как мне можно сделать так, что бы во время проигрывания...

Selenium. Клик по Java объекту
Доброго времени суток,товарищи. У меня есть Powershell скрипт для реализации клика по Java...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru