2017-03-05 81 views
0

我在Unity中有多個預製件實例。每個實例有此更新():Unity中的更新()表現奇怪

void Update() 
{ 
    Vector3 retning1200 = new Vector3(0, 0, 1); 
    Vector3 retning0130 = new Vector3(1, 0, 1); 

    Debug.DrawRay(transform.position, retning1200, Color.green, 1); 
    Debug.DrawRay(transform.position, retning0130, Color.green, 1); 


    if (Physics.Raycast(transform.position, retning1200, 1)) 
    { 
     antalNaboer++; 
    } 

    if (Physics.Raycast(transform.position, retning0130, 1)) 
    { 
     antalNaboer++; 
    } 

    Debug.Log("Myre i position: " + transform.position.x + " " + transform.position.y); 
    Debug.Log("antal naboer :" + antalNaboer.ToString()); 

    antalNaboer = 0; 
} 

我希望裏面Update()代碼將在每幀中運行一次。但它似乎有時並不是所有的實例都能運行。有時在一幀中多次。結果(antal myrer)是不一樣的。

Myre位置i:-1 0 安塔爾naboer:2

Myre位置i:-1 0 安塔爾naboer:1

Myre位置i:1 0 安塔爾naboer:2

回答

3

任何類型的物理計算都應該在FixedUpdate方法中進行檢查。 顧名思義此方法將在固定的持續時間被調用,所以連續的兩個電話之間的持續時間總是相同的不同於更新方法,其中,這可以根據FPS

void FixedUpdate() 
{ 
    Vector3 retning1200 = new Vector3(0, 0, 1); 
    Vector3 retning0130 = new Vector3(1, 0, 1); 

    Debug.DrawRay(transform.position, retning1200, Color.green, 1); 
    Debug.DrawRay(transform.position, retning0130, Color.green, 1); 


    if (Physics.Raycast(transform.position, retning1200, 1)) 
    { 
     antalNaboer++; 
    } 

    if (Physics.Raycast(transform.position, retning0130, 1)) 
    { 
     antalNaboer++; 
    } 

    Debug.Log("Myre i position: " + transform.position.x + " " + transform.position.y); 
    Debug.Log("antal naboer :" + antalNaboer.ToString()); 

    antalNaboer = 0; 
} 

有關的詳細信息而改變兩者之間的差異查看此鏈接 http://answers.unity3d.com/questions/10993/whats-the-difference-between-update-and-fixedupdat.html