c# - 为什么 itween 动画似乎比声明花费更多时间并防止延迟 Destroy()

标签 c# unity3d itween

我有这个代码:

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秒。但是Destroy()不能延迟1秒,至少要1.1秒。为什么?我能否以某种方式更快地销毁立方体并仍然触发 IncrementGauge()(销毁 1 秒,防止触发 IncrementGauge())。

谢谢。

最佳答案

发生这种情况是因为 iTween 库会检查每个 Update 调用是否已经过了 1.0 秒,这不能恰好是 1.0 秒,因为它取决于您的帧速率,而且浮点算法不精确。

您的问题可以通过销毁立方体并在相同的回调方法 DestroyCubeAndIncrementGauge() 中递增仪表来解决,该回调方法作为字符串传递给参数oncomplete

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");
    }
}

关于c# - 为什么 itween 动画似乎比声明花费更多时间并防止延迟 Destroy(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31893015/

相关文章:

c# - 定义 iTween 路径时的恒速问题

c++ - UE4 iTween C++ 抛出 "this was nullptr"

c# - 如何在ListView对象中创建超过1个复选框?

c# - 如何在指定的随机间隔内生成敌人?

c# - 比较多个回调的参数

c# - 复制功能

c# - 基本双重轮廓理论

c# - 如何从服务获取登录用户的事件窗口

c# - 我想关闭一个文件