forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   Получить "реальный" DeltaTime (http://forum.boolean.name/showthread.php?t=18734)

PassCall 21.11.2013 18:18

Получить "реальный" DeltaTime
 
Добрый вечер.

Суть такова:
  • При помощи Time.timeScale=0 был достигнут эффект "стоп-время".
  • Анимация останавливается, партиклы останавливаются - это хорошо.
  • Значение Time.Deltatime становится равным нулю - это плохо.

Как узнать "реальный" дельтатайм, как если бы timeScale был равен единице?

И еще - как воспроизвести анимацию партиклов при Time.timeScale=0?
Манипуляции с particleSystem.time ни к чему не приводит.

Andvrok 22.11.2013 09:10

Ответ: Получить "реальный" DeltaTime
 
Вот нашёл на бурговском сайте, попробуй.

The private timescale multiplier in it's simple form will not work with a timescale of zero. This is what I did to have a logical Timer that can be paused while the rest of the game continues on it's usual pace:

PHP код:

using UnityEngine;
using System.Collections;
 
//=========================================================================
// Class: TimeKeeper
// Mirrors Unity's Time.time, allowing the game to be logically paused
// while the animations, UI, and other Time.time dependant tasks keep running at the usual pace.
// TimeKeeper can be paused by the game when timestamp is set to 0,
// or by the user pressing the Pause/Break key.
//=========================================================================
public class TimeKeeper MonoBehaviour {
 
    
// Variable: time
    // Access TimeKeeper.time to keep track of time with a different timescale then Time.time (read-only)
    
public static float time {
       
get { return instance.mTime; }
    }
 
    
// Variable: timescale
    // Current timescale of the TimeKeeper.
    
public static float timescale {
       
get { return instance.mPaused instance.mTimescale; }
       
set instance.mTimescale value; }
    }
 
    
//=========================================================================
    
private static TimeKeeper instance;
 
    private 
float mTime 0.0f;
    private 
float mTimescale 1.0f;
    private 
float mLastTimestamp 0.0f;
    private 
bool  mPaused false;
 
    
//=========================================================================
    
void Start ()
    {
       if (
instance)
         
Debug.LogError("Singleton violated (ooh!)");
       
instance this;
       
instance.mLastTimestamp Time.realtimeSinceStartup;
    }
 
    
//=========================================================================
    
void Update ()
    {
       if (
Input.GetKeyDown(KeyCode.Pause))
         
this.mPaused = !this.mPaused;
 
       
float realDelta     Time.realtimeSinceStartup this.mLastTimestamp;
       
this.mLastTimestamp Time.realtimeSinceStartup;
       
this.mTime += realDelta timescale;
    }


I did it with my needs in mind - you could 'un-Singletonize' that and have an arbitrary number of TimeKeepers and attach them to your objects.

А вообще можно пробовать для нужных объектов просто вырубать "движущие" скрипты, как Rigidbody для остановки физики или ParticleEmitter для остановки частиц.

PassCall 23.11.2013 01:30

Ответ: Получить "реальный" DeltaTime
 
Да в том и дело, что там не скрипты, а обычная анимация и партиклы.

А "вручную" обращаться к каждому объекты, да еще и к дочерним объектам тоже, как-то лениво

Может есть способ обратиться сразу ко всем анимациям на сцене?

pax 23.11.2013 08:46

Ответ: Получить "реальный" DeltaTime
 
Так не пробовал? Но сразу предостерегу - в каждом кадре искать объекты слишком не правильно.
PHP код:

var animations = (Animation[])FindObjectsOfType(typeof(Animation));
foreach(var 
anim in animations)
{




PassCall 23.11.2013 15:09

Ответ: Получить "реальный" DeltaTime
 
Цитата:

Сообщение от pax (Сообщение 270566)
PHP код:

var animations = (Animation[])FindObjectsOfType(typeof(Animation));
foreach(var 
anim in animations)
{




Великолепно, то, что надо.:super:

Цитата:

Сообщение от pax (Сообщение 270566)
Но сразу предостерегу - в каждом кадре искать объекты слишком не правильно.

Искаться будет от силы раз в несколько секунд.


Часовой пояс GMT +4, время: 15:28.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot