2017-03-05 41 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