首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么之间的动画似乎比声明的时间更长,并防止延迟销毁()

为什么之间的动画似乎比声明的时间更长,并防止延迟销毁()
EN

Stack Overflow用户
提问于 2015-08-08 12:14:37
回答 1查看 503关注 0票数 1

我有这样的代码:

代码语言:javascript
复制
void OnCollisionEnter (Collision collision)
{
    if (canCollide == true) {
        canCollide = false;
        ContactPoint contactPoint = collision.contacts [0];

        GameObject cube = GameObject.CreatePrimitive (PrimitiveType.Cube);
        cube.transform.localScale = new Vector3 (5, 5, 5);
        cube.transform.position = contactPoint.point;

        iTween.MoveTo (cube, iTween.Hash (
            "y", 40, 
            "time", 0.5));
        iTween.MoveTo (cube, iTween.Hash (
            "position", new Vector3 (55, 79, 10), 
            "time", 0.5f,
            "delay", 0.5f,
            "oncompletetarget", GameObject.Find ("PlayerCar"), 
            "oncomplete", "IncrementGauge"));
        Destroy (cube, 1.1f);

    }

}

好的,这两个动画都是顺序的。但是时间之和应该是1秒。但是破坏()不能延迟1秒,必须至少是1秒。为什么?我是否可以以某种方式更快地销毁多维数据集,并且仍然触发IncrementGauge() (在销毁时1秒,防止触发IncrementGauge())。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-09 21:50:49

这是因为如果超过1.0秒,iTween库会在每个更新调用中进行检查,这不可能是1秒,因为它依赖于框架,浮点算法不精确。

您的问题可以通过销毁多维数据集并在传递给参数DestroyCubeAndIncrementGauge()作为字符串传递给参数oncomplete的同一个回调方法中递增来解决。

代码语言:javascript
复制
public class CollisionObject : MonoBehaviour 
{
    [SerializeField]
    private bool canCollide = true;

    void OnCollisionEnter(Collision collision)
    {
        if (canCollide == true) {
            canCollide = false;
            ContactPoint contactPoint = collision.contacts [0];

            GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
            cube.transform.localScale = new Vector3(5, 5, 5);
            cube.transform.position = contactPoint.point;

            iTween.MoveTo(cube, iTween.Hash(
                "y", 40, 
                "time", 0.5));
            iTween.MoveTo(cube, iTween.Hash(
                "position", new Vector3 (55, 79, 10), 
                "time", 0.5f,
                "delay", 0.5f,
                "oncompletetarget", this.gameObject, 
                "oncompleteparams", cube,
                "oncomplete", "DestroyCubeAndIncrementGauge"
            ));
        }
    }

    public void DestroyCubeAndIncrementGauge(GameObject cube)
    {
        // destroy the cube
        Destroy(cube);
        // inform the PlayerCar to IncrementGauge
        GameObject.Find("PlayerCar").SendMessage("IncrementGauge");
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31893015

复制
相关文章

相似问题

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