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

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

СообщениеДобавлено: 13 май 2010, 13:53
Erichon
Добрый день. Пособите в следующей проблеме.
Задача: После того как наводится мышка на объект, камера придвигается к этому объекту, после function OnMouseOver камера вернулась в исходное положение.
Рассмотрю любые варианты от скрипта до импорта из программы 3D.
P/s/ Пробовал аттачить анимацию на камеру - выходить ошибка.
Заранее благодарю.

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

СообщениеДобавлено: 13 май 2010, 15:53
Multirezonator
повесить на объект к которому приближаться хотим

Синтаксис:
Используется 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;
        }
}
 

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

СообщениеДобавлено: 14 май 2010, 06:12
Erichon
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 и более. Ошибка не выходит но и результат тоже.

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

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

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

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


Теперь ничего не выходит( Никаких предупреждений - радует. Результат прежний. скорее всего мой нубский мозг в совокупе с не оттуда выросшими руками, играют злую шутку. У меня камера вообще витает в воздухе, даже, не от первого лица к человечку пришпандорина. Побывал и в зависимость её с объектом ставить, но не туда, не сюда.
Если все так плачевно в кодинге возможно ли импортировать, от куда-то, уже готовую анимацию камеры, например с (max_sm) или MAYA.. и Через уже знакомый мне скрипт условия, запустить движения родимой.
Кто нибудь так воял?
Экспортирую анимацию камеры с Maya и в формат *.fbx и *.ma вроде бы удачно, но камера не двигается даже на автоматических условиях проигрывания.

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

СообщениеДобавлено: 19 май 2010, 08:50
Serge
Из вашего последнего сообщения не понятно, что вам нужно и что у вас не работает? Вам дали скрипт, если он и не работает, то основной принцип понятен. Переделать его под свои нужды не сложно. Либо опишите, еще раз четко задачу и что именно у вас не получилось, либо выкладывайте демку.
При проблемах с экспортом анимации, сделайте для начала простейшую анимацию, проверьте ее в Unity, добейтесь того, чтобы она заработала, а она должна работать, после этого пробуйте с камерой. Главное придерживайтесь документации по Unity. Проблем с экспортом стандартных анимаций быть не должно, скорее всего, проблема у вас.

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

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

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


Упрощаю задачу.
Сделал анимацию на камеру. Она двигается туда-сюда. В автоматическом режиме она срабатывает и выкручивает дуги. Как сделать что бы она по условию начинала движение. То есть от клика или наведения мыши. Вот так и все больше ничего не надо.

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

СообщениеДобавлено: 19 май 2010, 14:45
Serge
Скрипт предложенный вам, полностью рабочий, проверил. :)
Результат можно посмотреть здесь http://serge163.narod.ru/unitydemo/CamMove.html
По анимации смотрите здесь http://unity3d.com/support/documentation/ScriptReference/Animation.html

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

СообщениеДобавлено: 19 май 2010, 16:15
gerasim
На доме должен быть коллайдер(компоненты- физик- бокс коллайдер). Без нево камера не поедет. Да скрипт рабочий.

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

СообщениеДобавлено: 01 июн 2010, 12:53
Erichon
Еще повыношу мозг.
Пошел по своему пути. а именно проанимировал камеру и поместил скрипт. все в Ёлочку да обратное возвращение чудит.
вот скрипт.
Код: Выделить всё
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");
}


Где у меня ошибка, кроме генов))).
Заранее спасибо.

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

СообщениеДобавлено: 01 июн 2010, 13:04
Zaicheg
gameObject.Find("Main Camera").animation["cam"].speed = -1.0;
gameObject.Find("Main Camera").animation.Rewind("cam");

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

И gameObject.Find("Main Camera") храните в переменной, а не ищите каждый раз.

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

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

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

СообщениеДобавлено: 02 июн 2010, 09:25
Erichon
После долгого мозгополоскания сделали таки задуманное.
Троём без спиртного в течении полу дня навояли. Благо есть грамотные люди.
ИТОГ:
Код: Выделить всё
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. У Вас они будут свои.

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

Тема закрыта - РЕШЕНА

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

СообщениеДобавлено: 02 июн 2010, 10:20
Zaicheg
Erichon писал(а):Троём без спиртного в течении полу дня навояли. Благо есть грамотные люди.

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

Кстати, ещё один момент: wrapMode, если он у вас один необходимый, не надо присваивать по каждому нажатию. Поменяли один раз (хоть при создании объекта в сцене, хоть при импорте в проект) и всё.