2017-01-04 9 views
0

私は、あるスピード(子供)の方向に動く一連のオブジェクトと、これらのオブジェクト(コントローラ)の速度を変更するオブジェクトを持っています。MonoManagerを使用しないUnityスクリプトの実行順序

コントローラが、すべての子どもの速度を子どもの動きに合わせて調整する場合、古いスピードで移動したものと新しいスピードで移動したものがあるため、間隔が不均一になります。

私はこの問題を編集 - >プロジェクト設定 - >スクリプト実行命令を使用してコントローラを子供の前で実行させることで解決できましたが、これは理想的ではないようです。この問題を解決する良い方法はありますか?

以下は、非常に単純な子​​スクリプトとコントローラスクリプトです。

// Child 
public class MoveVertically 
    : MonoBehaviour 
{ 
    public float Speed; 

    void Update() 
    { 
     transform.Translate (Vector3.down * Time.deltaTime * Speed); 
    } 
} 

// Controller 
public class MoveChildrenVertically 
    : MonoBehaviour 
{ 
    public float Speed; 

    MoveVertically[] children; 

    void Start() 
    { 
     children = GetComponentsInChildren<MoveVertically>(); 
    } 

    void Update() 
    { 
     foreach (var symbol in symbols) 
     { 
      symbol.Speed = Speed; 
     } 
    } 
} 

答えて

4

コントローラは、すべての項目に移動するには、Get:

public class MoveVertically 
    : MonoBehaviour 
{ 
    public void Move (float speed) 
    { 
     transform.Translate (speed); 
    } 
} 

// Controller 
public class MoveChildrenVertically 
    : MonoBehaviour 
{ 
    public float Speed; 

    MoveVertically[] children; 

    void Start() 
    { 
     children = GetComponentsInChildren<MoveVertically>(); 
    } 

    void Update() 
    { 
     Speed = ChangeSpeed(); // if needed 
     float speed = Vector3.down * Time.deltaTime * Speed; 
     foreach (var child in children) 
     { 
      child.Move(speed); 
     } 
    } 
} 

ダブルボーナスを、あなたはすべての子供の速度の変化を呼び出す必要はありません、あなたは移動の呼び出しでそれを渡します。また、呼び出された子の1つにつき1つ少ない更新があります。代わりに子供のアップデートの子メソッドを呼び出すことの利点を理解することが

https://blogs.unity3d.com/2015/12/23/1k-update-calls/

+0

この – Programmer

+0

を行うための素晴らしい方法は、この(あまりにも偉大なリンクを!)行うための素晴らしい方法を同意して完全に解決しています私の問題 - ありがとう! – TVOHM