Движение камеры по условию

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

Движение камеры по условию

Сообщение Erichon 13 май 2010, 13:53

Добрый день. Пособите в следующей проблеме.
Задача: После того как наводится мышка на объект, камера придвигается к этому объекту, после function OnMouseOver камера вернулась в исходное положение.
Рассмотрю любые варианты от скрипта до импорта из программы 3D.
P/s/ Пробовал аттачить анимацию на камеру - выходить ошибка.
Заранее благодарю.
Per aspera ad astra - Сквозь тернии к звездам.
Аватара пользователя
Erichon
UNец
 
Сообщения: 22
Зарегистрирован: 12 авг 2009, 09:05
Откуда: Kazakhstan
  • ICQ

Re: Движение камеры по условию

Сообщение Multirezonator 13 май 2010, 15:53

повесить на объект к которому приближаться хотим

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

public class ToObject : MonoBehaviour {
        public float speed=0.01;
        Vector3 cameraTrans=Vector3.zero;
        Vector3 cameraPos;

        void Start () {
                cameraPos=Camera.mainCamera.transform.position;
        }
       
        void Update () {
                Camera.mainCamera.transform.Translate(cameraTrans, Space.World);
        }

        void OnMouseExit() {
                cameraTrans=Vector3.zero;
                Camera.mainCamera.transform.position=cameraPos;
        }

        void OnMouseEnter() {
                cameraTrans=transform.position-Camera.mainCamera.transform.position;
                cameraTrans.Normalize();
                cameraTrans*=speed;
        }
}
 
Скрытый текст:



Аватара пользователя
Multirezonator
UNITрон
 
Сообщения: 248
Зарегистрирован: 15 фев 2010, 16:12
Откуда: Украина, Луганск
  • Сайт

Re: Движение камеры по условию

Сообщение Erichon 14 май 2010, 06:12

Assets/Script/NewBehaviourScript.cs(5,30): error CS0664: Literal of type double cannot be implicitly converted to type `float'. Add suffix `f' to create a literal of this type
Выходит чудо ошибка. в строке
public float speed = 0.01;
Что может быть не так?
Если изменить параметры speed = 0.01; равными 1 и более. Ошибка не выходит но и результат тоже.
Per aspera ad astra - Сквозь тернии к звездам.
Аватара пользователя
Erichon
UNец
 
Сообщения: 22
Зарегистрирован: 12 авг 2009, 09:05
Откуда: Kazakhstan
  • ICQ

Re: Движение камеры по условию

Сообщение Serge 14 май 2010, 08:36

А перевести ошибку не пробовали? Там ведь все написано. Даже со слабым знанием английского или при помощи машинного перевода, становится ясно, что значение speed = 0.01 нужно исправить на speed = 0.01f.
О, сколько нам открытий чудных Готовят просвещенья дух И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель.
Аватара пользователя
Serge
UNIверсал
 
Сообщения: 476
Зарегистрирован: 20 мар 2009, 15:53
Откуда: Сибирь г. Омск
  • Сайт
  • ICQ

Re: Движение камеры по условию

Сообщение Erichon 19 май 2010, 07:08

Serge писал(а):А перевести ошибку не пробовали? Там ведь все написано. Даже со слабым знанием английского или при помощи машинного перевода, становится ясно, что значение speed = 0.01 нужно исправить на speed = 0.01f.


Теперь ничего не выходит( Никаких предупреждений - радует. Результат прежний. скорее всего мой нубский мозг в совокупе с не оттуда выросшими руками, играют злую шутку. У меня камера вообще витает в воздухе, даже, не от первого лица к человечку пришпандорина. Побывал и в зависимость её с объектом ставить, но не туда, не сюда.
Если все так плачевно в кодинге возможно ли импортировать, от куда-то, уже готовую анимацию камеры, например с (max_sm) или MAYA.. и Через уже знакомый мне скрипт условия, запустить движения родимой.
Кто нибудь так воял?
Экспортирую анимацию камеры с Maya и в формат *.fbx и *.ma вроде бы удачно, но камера не двигается даже на автоматических условиях проигрывания.
Per aspera ad astra - Сквозь тернии к звездам.
Аватара пользователя
Erichon
UNец
 
Сообщения: 22
Зарегистрирован: 12 авг 2009, 09:05
Откуда: Kazakhstan
  • ICQ

Re: Движение камеры по условию

Сообщение Serge 19 май 2010, 08:50

Из вашего последнего сообщения не понятно, что вам нужно и что у вас не работает? Вам дали скрипт, если он и не работает, то основной принцип понятен. Переделать его под свои нужды не сложно. Либо опишите, еще раз четко задачу и что именно у вас не получилось, либо выкладывайте демку.
При проблемах с экспортом анимации, сделайте для начала простейшую анимацию, проверьте ее в Unity, добейтесь того, чтобы она заработала, а она должна работать, после этого пробуйте с камерой. Главное придерживайтесь документации по Unity. Проблем с экспортом стандартных анимаций быть не должно, скорее всего, проблема у вас.
О, сколько нам открытий чудных Готовят просвещенья дух И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель.
Аватара пользователя
Serge
UNIверсал
 
Сообщения: 476
Зарегистрирован: 20 мар 2009, 15:53
Откуда: Сибирь г. Омск
  • Сайт
  • ICQ

Re: Движение камеры по условию

Сообщение Erichon 19 май 2010, 11:24

ЗАДАЧА:
При наведении на объект, мышкой камера придвигается к объекту на пол расстояния от начального положения, после убирания мыши с объекта, камера должна возвращаться в исходное состояние. хотя бы приближение плавное.
===================================================
1. Скрипт описанный выше не работает. После исправлении буквы f даже без предупреждения об ошибки.
2. Спрашивал о том чтобы уже готовую созданную анимацию камеры в 3d приложении импортировать в [unity 3D].
3. Есть ли у кого нибудь проект, где бы были камеры анимированные по условию.
4. Тупо ссылка на туториал по камерам.

В идеале. Стоит дом я мышкой навожу,на постройку, камера приближается, к дому, начинают гореть окна. Что бы окна горели и из трубы пошел дым - сделал. а вот ГРАМОТНО НАЕХАТЬ камерой не выходит.


Упрощаю задачу.
Сделал анимацию на камеру. Она двигается туда-сюда. В автоматическом режиме она срабатывает и выкручивает дуги. Как сделать что бы она по условию начинала движение. То есть от клика или наведения мыши. Вот так и все больше ничего не надо.
Per aspera ad astra - Сквозь тернии к звездам.
Аватара пользователя
Erichon
UNец
 
Сообщения: 22
Зарегистрирован: 12 авг 2009, 09:05
Откуда: Kazakhstan
  • ICQ

Re: Движение камеры по условию

Сообщение Serge 19 май 2010, 14:45

Скрипт предложенный вам, полностью рабочий, проверил. :)
Результат можно посмотреть здесь http://serge163.narod.ru/unitydemo/CamMove.html
По анимации смотрите здесь http://unity3d.com/support/documentation/ScriptReference/Animation.html
О, сколько нам открытий чудных Готовят просвещенья дух И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель.
Аватара пользователя
Serge
UNIверсал
 
Сообщения: 476
Зарегистрирован: 20 мар 2009, 15:53
Откуда: Сибирь г. Омск
  • Сайт
  • ICQ

Re: Движение камеры по условию

Сообщение gerasim 19 май 2010, 16:15

На доме должен быть коллайдер(компоненты- физик- бокс коллайдер). Без нево камера не поедет. Да скрипт рабочий.
Неследите - и неследимы будете.
Аватара пользователя
gerasim
UNITрон
 
Сообщения: 166
Зарегистрирован: 17 апр 2009, 15:56
Откуда: Самара

Re: Движение камеры по условию

Сообщение Erichon 01 июн 2010, 12:53

Еще повыношу мозг.
Пошел по своему пути. а именно проанимировал камеру и поместил скрипт. все в Ёлочку да обратное возвращение чудит.
вот скрипт.
Код: Выделить всё
function OnMouseEnter(){
   gameObject.Find("Main Camera").animation["cam"].wrapMode =WrapMode.Default;
   
      gameObject.Find("Main Camera").animation["cam"].speed = 1.0;
      gameObject.Find("Main Camera").animation.Play("cam");
}

function OnMouseExit(){
      gameObject.Find("Main Camera").animation["cam"].wrapMode =WrapMode.ClampForever;
      gameObject.Find("Main Camera").animation["cam"].speed = -1.0;
      gameObject.Find("Main Camera").animation.Rewind("cam");
}


Где у меня ошибка, кроме генов))).
Заранее спасибо.
Per aspera ad astra - Сквозь тернии к звездам.
Аватара пользователя
Erichon
UNец
 
Сообщения: 22
Зарегистрирован: 12 авг 2009, 09:05
Откуда: Kazakhstan
  • ICQ

Re: Движение камеры по условию

Сообщение Zaicheg 01 июн 2010, 13:04

gameObject.Find("Main Camera").animation["cam"].speed = -1.0;
gameObject.Find("Main Camera").animation.Rewind("cam");

Что-то одно давайте.
Или Rewind()
или speed = -1; → Play();

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

Re: Движение камеры по условию

Сообщение Multirezonator 02 июн 2010, 06:34

Принципиально посмотрел как работает скрипт приведенный мною выше - работает как задумано, еще нужно бы добавить ограничитель приближения, вот пример использования
http://file.qip.ru/file/130798997/e2c1cf6b/ToObject.html
Скрытый текст:



Аватара пользователя
Multirezonator
UNITрон
 
Сообщения: 248
Зарегистрирован: 15 фев 2010, 16:12
Откуда: Украина, Луганск
  • Сайт

Re: Движение камеры по условию

Сообщение Erichon 02 июн 2010, 09:25

После долгого мозгополоскания сделали таки задуманное.
Троём без спиртного в течении полу дня навояли. Благо есть грамотные люди.
ИТОГ:
Код: Выделить всё
function OnMouseEnter(){
   gameObject.Find("Camera_M").animation["cam1"].wrapMode =WrapMode.ClampForever;
   gameObject.Find("Camera_M").animation["cam1"].speed = 1.0;
   gameObject.Find("Camera_M").animation.Play("cam1");
   gameObject.Find("Particle System").particleEmitter.emit = true;
   renderer.material.color = Color.red;
}

function OnMouseExit(){
   gameObject.Find("Camera_M").animation["cam1"].wrapMode =WrapMode.ClampForever;
   gameObject.Find("Camera_M").animation["cam1"].speed = -1.0;
   gameObject.Find("Camera_M").animation.Play("cam1");
   renderer.material.color = Color.white;
}

Расшифровка.
1. Скрипт вешается на какие либо объекты (если они ИМПОРТИРОВАННЫЕ то предварительно обрамляются в Коллайдер*)
2. Делается любая анимация на камере (CTRL+6)
3. Убирается галочка с автоматического запуска.
Действие скрипта:
После того как наводится мышь происходит сделанная вами анимация, после убирания мыши - сдвигания её с объекта соллайдера, происходить анимимация в обратном порядке (инверсия). Помимо анимации происходит изменения цвета с обычного на красный.

* Коллайдер - Component - Physics - Box Collider (для примера)

P.s. Можно конечно gameObject.Find("Camera_M").animation["cam1"] присвоить к переменно, но это уже к вопросу об оптимизации, тут главное принцип показал. Изменить в индивидуальном случае нужно Camera_M и cam1. У Вас они будут свои.

Спасибо всем кто откликнулся. Надеюсь в будущем будет больше ответов, чем вопросов.

Тема закрыта - РЕШЕНА
Per aspera ad astra - Сквозь тернии к звездам.
Аватара пользователя
Erichon
UNец
 
Сообщения: 22
Зарегистрирован: 12 авг 2009, 09:05
Откуда: Kazakhstan
  • ICQ

Re: Движение камеры по условию

Сообщение Zaicheg 02 июн 2010, 10:20

Erichon писал(а):Троём без спиртного в течении полу дня навояли. Благо есть грамотные люди.

Видимо, они очень грамотные, раз за полдня смогли увидеть мой ответ о том, что минусовая скорость должна вести к плею, а не к ревинду. А wrapmode я пропустил, атата мне ^_^

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


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

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

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