我有两个球(A和B)在我的现场,他们有一些动作时,发挥。我想用一个圆柱体把它们连接起来,所以圆柱体的顶部应该粘在球A上,底部应该粘在球B上。当球移动时,圆柱体应该上下移动,这取决于球之间的距离,所以它产生了弹性效果。
我制作了脚本,它正在工作,但我唯一的问题是,当一个球移动得更快时,圆柱体没有以相同的速度跟随它,所以球在几帧后到达目的地,然后到达圆柱。
柱面脚本:
public Transform ball1;
public Transform ball2;
Vector3 scale0;
Vector3 scale;
void Start()
{
scale0 = transform.localScale;
}
void Update()
{
var pA = ball1.position;
var pB = ball2.position;
transform.position = (pA + pB) / 2;
transform.LookAt(pB);
scale = scale0;
scale.z = scale0.z * Vector3.Distance(pA, pB) * 2;
transform.localScale = scale;
}Ball A脚本:
GameObject ActualBase;
GameObject NextBase;
float Speed = 20;
void Update () {
if (Input.GetMouseButtonDown(0))
{
StopAllCoroutines();
StartCoroutine(Move());
}
}
public IEnumerator MoveCylinder()
{
Vector3 Ball1Destination = new Vector3(NextBase.transform.position.x, transform.position.y, NextBase.transform.position.z);
while (Vector3.Distance(transform.localPosition, Ball1Destination) > 0)
{
float currentMovementTime = Time.deltaTime;
transform.position = Vector3.MoveTowards(transform.position, Ball1Destination, currentMovementTime * Speed);
yield return null;
}
}发布于 2019-06-14 22:50:19
这是由于脚本执行顺序。如果使用Update()更改任何内容,则另一个脚本上的Update()可能“查看”当前框架的更改,也可能不会“查看”。管理这一问题的一种方法是手动更改播放器设置中的ScriptExectutionOrder,但它非常混乱。
一种稍微不那么麻烦的方法是使用一个名为LateUpdate的较少为人所知的回调(本质上,它保证比其他更新运行得晚)。
易于过度使用,但有用
https://stackoverflow.com/questions/56602465
复制相似问题