21830


unity5.3

Time.timeScale=0 とすれば停止しますが、一部アニメーションは動作させたいと思います。  
そのようなクラスがないかと探していたら下記サイトが見つかりましたが、ver違いなのかエラーがでます。

そこを修正すれば動くのでしょうか。

<http://ftvoid.com/blog/post/660>

[code]

    using UnityEngine;
    using System.Collections;
    using System.Collections.Generic;
    using System;
    
    public class Pauser : MonoBehaviour {
    static List<pauser> targets = new List<pauser>();   // ポーズ対象のスクリプト
    Behaviour[] pauseBehavs = null; // ポーズ対象のコンポーネント
    
    // 初期化
    void Start() {
        // ポーズ対象に追加する
        targets.Add(this);
    }
    
    // 破棄されるとき
    void OnDestory() {
        // ポーズ対象から除外する
        targets.Remove(this);
    }
    
    // ポーズされたとき
    void OnPause() {
        if ( pauseBehavs != null ) {
            return;
        }
    
        // 有効なBehaviourを取得
        pauseBehavs = Array.FindAll(GetComponentsInChildren<behaviour>(), (obj) => { return obj.enabled; });
    
        foreach ( var com in pauseBehavs ) {
            com.enabled = false;
        }
    }
    
    // ポーズ解除されたとき
    void OnResume() {
        if ( pauseBehavs == null ) {
            return;
        }
    
        // ポーズ前の状態にBehaviourの有効状態を復元
        foreach ( var com in pauseBehavs ) {
            com.enabled = true;
        }
    
        pauseBehavs = null;
    }
    
    // ポーズ
    public static void Pause() {
        foreach ( var obj in targets ) {
            obj.OnPause();
        }
    }
    
    // ポーズ解除
    public static void Resume() {
        foreach ( var obj in targets ) {
            obj.OnResume();
        }
    }
    
[/code]

}


CC BY-SA 3.0
2016-02-07T10:13:22.750
21809
2016-02-08T02:58:09.857
2016-02-07T12:49:26.433
76
13945
question
unity3d
一時停止中に一部のオブジェクトを動かしたい


> <http://ftvoid.com/blog/post/660>

タイトルに書いてある通り、

[code]

    Time.timeScale=0
    
[/code]

これを使わずでのポーズ機能実装、エラー文の記載がない、かつ他の人のソースコードですので  
この点の説明は割愛します。

> Time.timeScale=0 とすれば停止しますが、一部アニメーションは動作させたいと思います。

まず、これですがtimeScale=0は時間を停止させます。  
これは時間停止であって、「機能停止」ではないことに注意してください。  
その上で時間に干渉しない時間取得をUnityは取得することができます。  
Timeクラスを参考にしてみてください。

> <http://docs.unity3d.com/ScriptReference/Time.html>  
>  <http://docs.unity3d.com/ScriptReference/Time-unscaledDeltaTime.html>  
>  <http://docs.unity3d.com/ScriptReference/Time-realtimeSinceStartup.html>

timeScaleに干渉しない実装、干渉する実装でわけてやれば一部アニメーションは動作したままの実装をすることができます。

※スクリプトにまかせた実装です。インスペクタ上のみで解決したい場合は別途別の設計が必要になることに注意してください。


CC BY-SA 3.0
2016-02-08T02:58:09.857
21830
2016-02-08T02:58:09.857
14215
21809
answer