Задержка старта анимации

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

Задержка старта анимации

Сообщение agentrazvedki 17 май 2012, 20:02

Здравствуйте! Помогите пожалуйста решить проблему (ниже), ибо моя логика иссякла.
Вобщем- зделал в 3dMax'е анимацию раздвижных дверей. Когда игрок смотрит на дверь и нажимает клавишу - она открывается, жмет еще раз - закрывается :-bd Но, если подождать какое то время до нажатия, то анимация начнется только через этот же промежуток времени (но пройдет нормально) :-o
Вопрос: как убрать эту долбаную задержку?????
Синтаксис:
Используется csharp
public class OpenMainRoom : MonoBehaviour {

public GameObject       Player;
public float            distance,direction;
public int                      MyOpen;
       
        // Use this for initialization
        void Start ()
        {
                Player = GameObject.FindGameObjectWithTag("Player");
                MyOpen = 0;
               
        }
       
        // Update is called once per frame
        void Update ()
        {
                GetDirectionPlayer();
                OpenerMainRoom();
        }
       
        void GetDirectionPlayer()
        {
                //Определить дистанцию до объекта
                distance = Vector3.Distance(transform.position,Player.transform.position);
               
                //Определить вектор взгляда игрока
                Vector3 dir = (transform.position-Player.transform.position).normalized;
               
                //Вычисляем нахождение цели в поле зрения (0 и -1 сзади + впереди)
                direction = Vector3.Dot(dir,Player.transform.forward);
        }
               
        void OnGUI()
        {
                if(distance < 1 && direction > 0.6f)
                {
                        GUI.Box(new Rect((Screen.width/2)-50,20,100,25),"Open Door");
                       
                }
        }
       
        void OpenerMainRoom()
        {
                if(distance < 1 && direction > 0.6f)
                {
                        if(Input.GetKeyUp(KeyCode.T))
                        {
                                if(MyOpen == 0)
                                        MyOpen = 1;
                                else
                                        MyOpen = 0;
               
                                if(MyOpen == 0)
                                        animation["MainRoom"].speed = -1;
                                else
                                        animation["MainRoom"].speed = 1*Time.deltaTime;
                       
                                animation.Play("MainRoom");
                        }
                }
        }
       
}

Знаю, что код весьма далек от оптимального, но это самый рабочий вариант из всех моих попыток [curved_hands]
agentrazvedki
UNец
 
Сообщения: 8
Зарегистрирован: 17 май 2012, 19:37
Откуда: Украина, Харьков

Re: Задержка старта анимации

Сообщение agentrazvedki 19 май 2012, 21:05

Как всегда спасибо случаю((
Слепым перебором строчек был найден рабочий вариант:
Синтаксис:
Используется csharp
private bool OpenerMainRoom()
        {
                if(distance < 1 && direction > 0.6f)
                {
                        if(Input.GetKeyUp(KeyCode.T))
                        {
                                if(MyOpen == 0)
                                {
                                        if(animation.IsPlaying("MainRoom"))
                                        animation.Stop("MainRoom");
                                       
                                        animation["MainRoom"].speed = 1;
                                        MyOpen = 1;
                                        animation.Play("MainRoom");
                                }
                                else
                                {
                                        if(animation.IsPlaying("MainRoom"))
                                        animation["MainRoom"].time = 1;
                                       
                                        animation["MainRoom"].speed = -1;
                                        MyOpen = 0;
                                        animation.Play("MainRoom");
                                }

                        }
                       
                }
                return true;
        }
 

Только непонятно почему animation["MainRoom"].time = 1; переводит анимацию в 25 кадр (конец), а не в начало :-?
agentrazvedki
UNец
 
Сообщения: 8
Зарегистрирован: 17 май 2012, 19:37
Откуда: Украина, Харьков

Re: Задержка старта анимации

Сообщение pod4444 20 май 2012, 11:01

agentrazvedki писал(а):Только непонятно почему animation["MainRoom"].time = 1; переводит анимацию в 25 кадр (конец), а не в начало :-?


вполне вероятно, что 0 кадр будет при
Синтаксис:
Используется csharp
animation["MainRoom"].time = 0;

хотя я с анимацией не работал, но мне кажется так (:
Аватара пользователя
pod4444
Старожил
 
Сообщения: 721
Зарегистрирован: 20 янв 2012, 22:02
Откуда: Воронеж
Skype: pod4444
  • Сайт

Re: Задержка старта анимации

Сообщение kirpigiller 21 май 2012, 11:01

agentrazvedki писал(а):Только непонятно почему animation["MainRoom"].time = 1; переводит анимацию в 25 кадр (конец), а не в начало :-?


unity script reference наш друг:
http://unity3d.com/support/documentatio ... State-time
время указывается в секундах.
kirpigiller
UNец
 
Сообщения: 15
Зарегистрирован: 21 май 2012, 10:45


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9