Поворот

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Поворот

Сообщение Aero7 02 фев 2012, 13:56

Есть недоделанный скрипт, помогите дописать:
Синтаксис:
Используется csharp
// Щелкаем мышкой
        if (Input.GetMouseButtonDown(0))
        {
            // С помощью камеры создаем луч из точки на экране, в которой находится мышька
            Ray mouseRay = camera.ScreenPointToRay(Input.mousePosition);
            // переменная, которая будет содержать результат щелчка мышью по сцене
            RaycastHit hit;

            // если попали в геометрию, то...
            if (Physics.Raycast(mouseRay, out hit))
            {
               
               Тут нужно повернуть GameObject лицом к этой точке,
               куда я щелкнул мышкой)

            }
}
Aero7
UNIт
 
Сообщения: 82
Зарегистрирован: 17 окт 2011, 19:04

Re: Поворот

Сообщение aler 02 фев 2012, 14:04

go.transform.LookAt(hit.point)
Аватара пользователя
aler
UNIверсал
 
Сообщения: 351
Зарегистрирован: 20 фев 2011, 17:41

Re: Поворот

Сообщение Aero7 02 фев 2012, 14:11

спасибо, объект поворачивается,
а можно сделать так, чтоб поворот происходил только по горизонтали?
Aero7
UNIт
 
Сообщения: 82
Зарегистрирован: 17 окт 2011, 19:04

Re: Поворот

Сообщение jetyb 02 фев 2012, 14:31

Можно повернуть куда угодно:
go.transform.rotation = Quaternion.Euler(x,y,z)
Где x,y,z - компоненты rotation, вторая строчка в transform.

Чтобы точно задать направление курите стереометрию, изучайте углы Эйлера.
jetyb
Адепт
 
Сообщения: 1486
Зарегистрирован: 31 окт 2011, 17:21

Re: Поворот

Сообщение Aero7 02 фев 2012, 15:07

углы Эйлера для меня пока будет сложо)
так что буду пользоваться LookAt.

Я дописал немного скрипт:

Синтаксис:
Используется csharp

        //Пушка, которая вращается
        public GameObject gun;
        //Пуля
        public GameObject bullet;
       //Место создания пули
        public GameObject place;

    public void Update()
    {
         // Щелкаем мышкой
        if (Input.GetMouseButtonDown(0))
        {
            // С помощью камеры создаем луч из точки на экране, в которой находится мышька
            Ray mouseRay = camera.ScreenPointToRay(Input.mousePosition);
            // переменная, которая будет содержать результат щелчка мышью по сцене
            RaycastHit hit;

            // если попали в геометрию, то...
            if (Physics.Raycast(mouseRay, out hit))
            {
               //крутим пушку в место щелчка мыши
               gun.transform.LookAt(hit.point);
               
              //создаем пулю
              GameObject go = Instantiate(bullet, place.transform.position, gun.transform.rotation) as GameObject;
              //Придание  ускорения с помощью импульса                
                go.rigidbody.AddForce(transform.forward * 40, ForceMode.Impulse );
            }
}
 


Проблема такая:
Пуля не летит туда куда направлена пушка, а просто летит куда то вперед..
Она как бы появляется и сразу начинает лететь в одну и ту же сторону, независимо от того куда направлена пушка)
Aero7
UNIт
 
Сообщения: 82
Зарегистрирован: 17 окт 2011, 19:04

Re: Поворот

Сообщение jetyb 02 фев 2012, 17:07

Летит в одну сторону, потому что ей не передается необходимый transform gun-а.
То, что вы написали, transform.forward относится вообще не к gun, а к GameObject-у , к которому прикреплен данный скрипт.
jetyb
Адепт
 
Сообщения: 1486
Зарегистрирован: 31 окт 2011, 17:21

Re: Поворот

Сообщение Aero7 02 фев 2012, 19:13

С полетом вроде разобрался)
Остался 1 вопрос:
Я пишу игру на телефон (Android) и у меня на телефоне в игре не работает мультитач,
тоесть в то время как я управляю джойтиком, и нажимаю на экран чтоб стрельнуть он не стреляет, только после того как отпущу джойстик он начинает стрелять)
для мультитача нужно что то добавить или нужно поменять вот этой строчке Input.mousePosition на что то другое?
Синтаксис:
Используется csharp
Ray mouseRay = camera.ScreenPointToRay(Input.mousePosition);
Aero7
UNIт
 
Сообщения: 82
Зарегистрирован: 17 окт 2011, 19:04

Re: Поворот

Сообщение mike_evp 03 фев 2012, 18:29

А можно по-подробнее, как вы с ней разобрались?
Просто та же проблема, создается клон объекта и ему добавляется сила через AddForce и он летит вроде бы в том направлении, но сам объект развернут как-то по кривому.

var bullet = Instantiate(BulletPrefab,place.transform.position,transform.rotation);
bullet.rigidbody.AddForce(transform.forward * speed);

Где BulletPrefab - ракета.
Скрипт весит на главном персе.
Заранее спасибо...
mike_evp
UNец
 
Сообщения: 1
Зарегистрирован: 03 фев 2012, 17:36

Re: Поворот

Сообщение Hargrim 09 май 2012, 20:34

LookAt поворачивает объект только одной стороной, и не той что нужно. А как повернуть объект нужным боком?
Hargrim
 

Re: Поворот

Сообщение 2rusbekov 11 май 2012, 12:56

Aero7 писал(а):спасибо, объект поворачивается,
а можно сделать так, чтоб поворот происходил только по горизонтали?


Может поможет, если константы сделать поворотов? то есть оставить свободной 1 ось У. а Z и Х заблокировать.

Gonzik писал(а):LookAt поворачивает объект только одной стороной, и не той что нужно. А как повернуть объект нужным боком?


Может легче создать объект так чтобы ось Z была передом?
Still alive...
Аватара пользователя
2rusbekov
Адепт
 
Сообщения: 1409
Зарегистрирован: 06 апр 2012, 12:57
Откуда: Бишкек

Re: Поворот

Сообщение Hargrim 11 май 2012, 14:44

Может легче создать объект так чтобы ось Z была передом?

В 2D не легче, если только камеру сверху расположить...
Hargrim
 

Re: Поворот

Сообщение 2rusbekov 11 май 2012, 16:11

Ну тогда делать LookAt и повернуть на 90 градусов по оси У, тогда он будет смотреть на ТОЧКУ осью Х
Still alive...
Аватара пользователя
2rusbekov
Адепт
 
Сообщения: 1409
Зарегистрирован: 06 апр 2012, 12:57
Откуда: Бишкек

Re: Поворот

Сообщение Hargrim 11 май 2012, 20:52

Да я понял уже. Мне просто нужно было убедиться в том, что именно делают эти функции. Буду исходить отсюда.
Hargrim
 


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot] и гости: 22