万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    Unity Advent Calendar 2012 16日目 Title:「GoKit応用 TimeScale試す」

    URL: http://atnd.org/events/34621

    @komachireader さんがコメントくださったので、再度GoKitやってみた。
    「iTweenで言うところのignoreTimeScaleのようなフラグが無い」
    「ポーズ中の画面でTweenを使いたいときがある」

    早速、サンプルの「1. Simple Tween」シーンの主なクラスのある「SimpleTween.cs」を見てみた。

    ・SimpleTween.cs
    AwakeのTimeScaleを0にしてみる!

        void Awake ()
        {
            Time.timeScale = 0;
        }
    

    あれ?普通に動くよ?

    Goクラスを見てみる。
    →それにしても英単語1つをクラス名にして強気だ。他と被りそうだわな。
    ・Go.cs

        #region Monobehaviour
    
        private void Update ()
        {
            if (_tweens.Count == 0)
                return;
            
            handleUpdateOfType (UpdateType.Update, Time.deltaTime);
        }
        
        private void LateUpdate ()
        {
            if (_tweens.Count == 0)
                return;
            
            handleUpdateOfType (UpdateType.LateUpdate, Time.deltaTime);
        }
        
        private void FixedUpdate ()
        {
            if (_tweens.Count == 0)
                return;
            
            handleUpdateOfType (UpdateType.FixedUpdate, Time.deltaTime);
        }
        
        #endregion
    

    Update, LateUpdate, FixedUpdateのUpdate3兄弟全部使ってるwwww
    UpdateはTimeScaleの影響をうけませんね。



    ちなみに、regionってなんだ?って調べたらコードを折りたためるだけ?
    http://msdn.microsoft.com/ja-jp/library/9a1ybwek(v=vs.80).aspx

    「#region Monobehaviour」から「#endregion」までを折りたためる。
    これが↓

    こうなる↓

    これもアドベントカレンダーのために置いといても良かったかも?


    よってUpdateのとこをコメントアウトすればTime.timeScaleが0だと止まる。

        private void Update ()
        {
            if (_tweens.Count == 0)
                return;
            
    //        handleUpdateOfType (UpdateType.Update, Time.deltaTime);
        }
    

    じゃあ、Gameシーン中の左のトグルはなんですか?
    ↓こいつをかえるときちんとスピードに影響が出ます。

    気になってサンプルコードの親クラス「BaseDemoGUI.cs」のOnGUI()メソッドをみてみると、

    ・「BaseDemoGUI.cs」のOnGUI()メソッド下方を抜粋

            GUILayout.Label ("Time Scale: " + string.Format ("{0:0.##}", _tween.timeScale));
            var newTweenTimeScale = GUILayout.HorizontalSlider (_tweenTimeScale, 0, 3);
            if (newTweenTimeScale != _tweenTimeScale) {
                _tweenTimeScale = newTweenTimeScale;
                _tween.timeScale = _tweenTimeScale;
            }
            
            easeTypesGUI ();
        }
    

    このコードがAbstractTweenのインスタンスのtimeScaleプロパティの代入をしている。

    _tween.timeScale = _tweenTimeScale;
    

    つまり、SimpleTween.cs

        void Start ()
        {
            // setup a position and color tween that loops indefinitely. this will let us play with the
            // different ease types
            _tween = Go.to (cube, 4, new TweenConfig ()
                .position (new Vector3 (9, 4, 0))
                .materialColor (Color.green)
                .setIterations (-1, LoopType.PingPong));
    
            _tween.timeScale = 2; // これで2倍のスピード!
        }
    

    【結論】
    Tween以外はTime.timeScale = 0でポーズ止めておいて、
    TimeScaleプロパティを0とか1にして適宜オフ・オン切り替えられますね!



    では、Advent Calendar次の方へ!