положение родительского объекта не влияет на дочерний

Программирование на Юнити.

положение родительского объекта не влияет на дочерний

Сообщение Tutanhomon 10 мар 2010, 12:43

а у меня такая вот проблема. Для управления камерой используется такая вот иерархия: Изображение
верхний элемент - для премещения по горизонтали и вращения влево-вправо, средний - для вращения вверх-вниз. Все система четко работала, пока я не ввел зум:

Синтаксис:
Используется csharp
Vector3 new_cam_position = cam.forward * -distance;
cam.position = Vector3.Lerp(cam.position, new_cam_position, Time.time * 0.01f);


вот вместе они никак не хотят работать. Несмотря на то что в коде я сначала меняю позицию верхнего элемента (по идее он должен изменить позиции всех своих чайлдов), а уже потом применяю изменение расстояния, работает только зум и вращение - а верхний элемент перемещается, но не "таскает" за собой своих чайлдов. Пробовал вынести зум в LateUpdate, не помогло, хотя конечно разница была - все двигается рывками, но тем не менее головной элемент не меняет позиции чайлдов =\
Аватара пользователя
Tutanhomon
UNIт
 
Сообщения: 112
Зарегистрирован: 04 дек 2008, 19:55
Откуда: Минск
  • Сайт

Re: положение родительского объекта не влияет на дочерний

Сообщение Paul Siberdt 10 мар 2010, 12:52

Почитайте про Transform.localPosition
И Zoom я посоветовал бы делать не мотанием камеры, а изменением ее FoVа
Последний раз редактировалось Paul Siberdt 10 мар 2010, 12:53, всего редактировалось 1 раз.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: положение родительского объекта не влияет на дочерний

Сообщение Mr_Anderson 10 мар 2010, 12:52

Если есть физика, то хотя бы в FixedUpdate надо пересчитывать, а вообще по вашему описанию сказать сложно что происходит, компоненты-то не указали в иерархии ;)
Mr_Anderson
UNIт
 
Сообщения: 143
Зарегистрирован: 16 апр 2009, 13:32

Re: положение родительского объекта не влияет на дочерний

Сообщение Zaicheg 10 мар 2010, 12:57

Сделал такую же иерархию, такой же код. Только вместо new_cam_position поставил Vector3.zero
Повесил на верхний объект. Он перемещается, камеру за собой таскает.
Видимо, проблема в каком-то окружающем коде.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: положение родительского объекта не влияет на дочерний

Сообщение Tutanhomon 10 мар 2010, 13:48

проблема в том что cam.position = Vector3.Lerp(cam.position, new_cam_position, Time.time * 0.01f); переписывает старые координаты камеры, и не отталкивается от новых. Если Я правильно понимаю, должны сначала примениться трансформации корневога элемента, он передвинет камеру, а потом уже отталкиваясь от новых координат камеры - трансформировать дистанцию до ротатора. Физики никакой нету у меня. Про localPosition почитаю, интересный вариант. Зум через ФОВ - это неправильно, потому как камера не ортографическая - будут искажения. Компонент левых никаких нету, скрипт вешается на корневой элемент.

Синтаксис:
Используется csharp
       
using UnityEngine;
using System.Collections;

public class Camera_mover : MonoBehaviour
{
        public float distance = 50;
        public float scroll_speed = 100f;
        public float move_speed = 100f;
        public float xSpeed = 100f;
        public float ySpeed = 100f;
        public float yMinLimit = -20f;
        public float yMaxLimit = 80f;
        public float zoom = 0;
        public bool isZooming = false;
        public enum direction { fwd, bwd };
        public direction dir = direction.fwd;
        public Transform cam;
        public Transform rotator;
        public Transform me;
        public Vector3 viewport_mp;

        private float x = 0f;
        private float y = 0f;
        private Vector3 move_direction;


        static float ClampAngle(float angle, float min, float max)
        {
                if (angle < -360f)
                        angle += 360f;
                if (angle > 360f)
                        angle -= 360f;
                return Mathf.Clamp(angle, min, max);
        }

        void Update()
        {
                if ((Input.GetKey(KeyCode.S)))
                        me.position -= me.forward * Time.deltaTime * move_speed;
                if ((Input.GetKey(KeyCode.W)))
                        me.position += me.forward * Time.deltaTime * move_speed;
                if ((Input.GetKey(KeyCode.A)))
                        me.position -= me.right * Time.deltaTime * move_speed;
                if ((Input.GetKey(KeyCode.D)))
                        me.position += me.right * Time.deltaTime * move_speed;
                if (Input.GetButton("Fire2"))
                {
                        x += Input.GetAxis("Mouse X") * xSpeed * Time.deltaTime;
                        y -= Input.GetAxis("Mouse Y") * ySpeed * Time.deltaTime;

                        y = ClampAngle(y, yMinLimit, yMaxLimit);

                        rotator.Rotate(-Input.GetAxis("Mouse Y") * 10, 0, 0, Space.Self);
                        me.Rotate(0, Input.GetAxis("Mouse X") * 10, 0, Space.World);

                }
                Vector3 new_cam_position = cam.forward * -distance;
                //cam.localPosition = new_cam_position;
                        cam.position = new_cam_position;
        }
}

 


Transform me - это корень
Transform rotator - средний (ротатор)
Transform cam - собсно камера

вот кому не лень можете попробовать ) в таком состоянии скрипт не работает, если раскомментить localPosition и закоментить position - все почти норм, только камера не туда куда на до поворачивается, но это не страшно ))
так что можно сказать что проблема решена, спасибо )
Аватара пользователя
Tutanhomon
UNIт
 
Сообщения: 112
Зарегистрирован: 04 дек 2008, 19:55
Откуда: Минск
  • Сайт

Re: положение родительского объекта не влияет на дочерний

Сообщение Paul Siberdt 10 мар 2010, 14:08

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

Увеличивая фокусное расстояние, сужается угол обзора, который проецируется на фиксированную площадь. Именно это и формирует увеличенное изображение.
Любая увеличительная оптика работает именно с фовом, а телепорт макрообъектов еще не изобрели. :-B

В играх зум ВСЕГДА формируется фовом, а не транзишеном камеры.
Последний раз редактировалось Paul Siberdt 10 мар 2010, 14:15, всего редактировалось 2 раз(а).
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: положение родительского объекта не влияет на дочерний

Сообщение Tutanhomon 10 мар 2010, 14:14

полностью согласен, просто в данном случае смысл не в увеличении, а приближении к объекту. Разве везде в играх для зума меняют ФОВ? :-?
Аватара пользователя
Tutanhomon
UNIт
 
Сообщения: 112
Зарегистрирован: 04 дек 2008, 19:55
Откуда: Минск
  • Сайт

Re: положение родительского объекта не влияет на дочерний

Сообщение Paul Siberdt 10 мар 2010, 14:17

Всегда. Увеличение - оно и есть приближение. Все это дело легко показать на картинках, но нет времени их рисовакать :)

Придумайте целый воз артефактов и ляпов, что возникнут при перемещении камеры, например, глядение сквозь стены, если подойти к ним вплотную. :p
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: положение родительского объекта не влияет на дочерний

Сообщение Tutanhomon 10 мар 2010, 14:20

окей, убедили :)
тем проще моя задача #:-s
Аватара пользователя
Tutanhomon
UNIт
 
Сообщения: 112
Зарегистрирован: 04 дек 2008, 19:55
Откуда: Минск
  • Сайт

Re: положение родительского объекта не влияет на дочерний

Сообщение Paul Siberdt 10 мар 2010, 14:35

Так.. нарисовал картинку-таки...

Гляньте, что вдвое уменьшив фов камеры, мы получим картинку, равную картинке камеры с начальным фовом, но расположенной вдвое ближе к объекту:
У вас нет доступа для просмотра вложений в этом сообщении.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: положение родительского объекта не влияет на дочерний

Сообщение Tutanhomon 10 мар 2010, 14:46

да Я давно уже с Вами согласился ;)
но за картинку спасибо, будет для тех, кто все еще несогласен )
Аватара пользователя
Tutanhomon
UNIт
 
Сообщения: 112
Зарегистрирован: 04 дек 2008, 19:55
Откуда: Минск
  • Сайт

Re: положение родительского объекта не влияет на дочерний

Сообщение Tutanhomon 12 мар 2010, 02:05

и всетаки фов не катит, чисто визуально. Если со снайперкой делать приближение - однозначно фов. А в игре типо варкрафта - выглядит убого, когда при максимальном зуме пытаешься врашать камеру - сразу чувствуется, что на самом деле камера далеко. :-?
Аватара пользователя
Tutanhomon
UNIт
 
Сообщения: 112
Зарегистрирован: 04 дек 2008, 19:55
Откуда: Минск
  • Сайт

Re: положение родительского объекта не влияет на дочерний

Сообщение Paul Siberdt 12 мар 2010, 10:12

От, мативо :D

А вот в вашем начальном вопросе вовсе не было намека, что это не зум-камера, а камера контроля персонажем/игровым полем

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

Для начала... а зачем парентить камеру к чему-то? Пускай она будет независима, подарите ей якорь и пускай к нему лерпает. А якорь резко позиционируйте в нужную позицию.
Последний раз редактировалось Paul Siberdt 12 мар 2010, 10:16, всего редактировалось 1 раз.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: положение родительского объекта не влияет на дочерний

Сообщение Zaicheg 12 мар 2010, 10:14

Ну вот по представленному ничего сказать нельзя. Вы бы сформировали простенький проект, где локализовали бы проблемное место. А потом это сюда выложить и мигом вопрос разрешится.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: положение родительского объекта не влияет на дочерний

Сообщение Tutanhomon 13 мар 2010, 20:41

а ротатор нужен был для того чтобы камера вращалась на фиксированном расстоянии от него и всегда на него смотрела. Припарентить камеру к нему я посчитал самым логичным...
Аватара пользователя
Tutanhomon
UNIт
 
Сообщения: 112
Зарегистрирован: 04 дек 2008, 19:55
Откуда: Минск
  • Сайт

След.

Вернуться в Скрипты

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

Сейчас этот форум просматривают: GoGo.Ru [Bot] и гости: 12