首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >制作弹性对象Unity3D

制作弹性对象Unity3D
EN

Stack Overflow用户
提问于 2019-06-14 16:59:47
回答 1查看 545关注 0票数 1

我有两个球(A和B)在我的现场,他们有一些动作时,发挥。我想用一个圆柱体把它们连接起来,所以圆柱体的顶部应该粘在球A上,底部应该粘在球B上。当球移动时,圆柱体应该上下移动,这取决于球之间的距离,所以它产生了弹性效果。

我制作了脚本,它正在工作,但我唯一的问题是,当一个球移动得更快时,圆柱体没有以相同的速度跟随它,所以球在几帧后到达目的地,然后到达圆柱。

柱面脚本:

代码语言:javascript
复制
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脚本:

代码语言:javascript
复制
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;
        }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-14 22:50:19

这是由于脚本执行顺序。如果使用Update()更改任何内容,则另一个脚本上的Update()可能“查看”当前框架的更改,也可能不会“查看”。管理这一问题的一种方法是手动更改播放器设置中的ScriptExectutionOrder,但它非常混乱。

一种稍微不那么麻烦的方法是使用一个名为LateUpdate的较少为人所知的回调(本质上,它保证比其他更新运行得晚)。

易于过度使用,但有用

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56602465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档