2017-01-04 76 views
0

我有一系列的對象正在以給定的速度(兒童)和另一個對象,這些對象改變這些對象(控制器)的速度。控制Unity腳本執行順序,而不使用MonoManager

如果控制器調整所有兒童的速度以部分通過兒童移動,則間距變得不均勻,因爲一些兒童以舊速度移動並且一些兒童以新速度移動。

我已經能夠通過使用編輯 - >項目設置 - >腳本執行順序來解決此問題,以使控制器在孩子之前執行,但這看起來並不理想。有沒有更好的方法來解決這個問題?

下面是非常簡單的子和控制器腳本。

// 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

獲取控制器將所有的物品:

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); 
     } 
    } 
} 

雙重獎勵,你不必調用速度的變化對每一個孩子,你通過它在移動電話。另外,每個孩子都有一個更新。

要了解調用子方法,而不是更新的對兒童的好處:(!太偉大的鏈接)

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

+0

這就是做這個 – Programmer

+0

同意的一個偉大的方式,這樣做的很好的方式,完全解決我的問題 - 謝謝! – TVOHM