我有一系列在给定速度(儿童)方向上移动的物体和另一个改变这些物体(控制器)速度的物体。
如果控制器调整所有孩子在孩子自行移动过程中的速度,则间距会变得不均匀,因为有些孩子已经用旧速度移动了,有些已经以新的速度移动了。
我已经能够通过使用Edit->项目设置 - >脚本执行顺序来解决这个问题,使控制器在孩子面前执行,但这似乎并不理想。有没有更好的方法来解决这个问题?
以下是非常简单的子脚本和控制器脚本。
// 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;
}
}
}
答案 0 :(得分: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);
}
}
}
双重奖励,您无需在每个孩子上调用速度变化,您可以在Move呼叫中传递它。此外,每个孩子调用的更新少一个。
要了解调用子方法而不是更新子项的好处: