统一坠落平台在坠落时穿过地面

时间:2017-05-30 04:49:41

标签: c# unity3d

我有一个带有盒子对撞机和触发器的立方体。当玩家站在它上面时,它会掉下来。

我希望平台在与某些东西发生碰撞后自行消灭,然后在它的起始位置实例化。

所以我的代码看起来像这样:

void OnTriggerEnter(Collider col)
{
    if (col.CompareTag("Player"))
        isFalling = true;
}

void OnCollisionEnter(Collision col)
{
    if (!col.gameObject.CompareTag("Player"))
    {
        Instantiate(gameObject, startPosition, startRotation);
        Destroy(gameObject);
    }
}

void Update()
{
    if (isFalling)
    {
        fallingSpeed += Time.deltaTime / 20;
        transform.position = new Vector3(transform.position.x, transform.position.y - fallingSpeed, transform.position.z);
    }
}

当我的平台崩溃时,它只是穿过地面。甚至没有发现碰撞。

有人对我有所暗示吗?

2 个答案:

答案 0 :(得分:1)

所以我错了。

平台没有附加刚体。因此它无法与地面发生碰撞。

这是我的新代码:

private void Start()
    {
        data.PlatformRigid.useGravity = false; // Disable the gravity to make it stay in the air
    }

    private void OnTriggerEnter(Collider col)
    {
        if (!data.Activated) // just do this 1 time 
        {
            if (col.CompareTag("Player")) // just start executing the following code if the colliding object is the player
            {
                data.Activated = true; // don't execute this code a second time
                data.PlatformRigid.useGravity = true; // start falling
            }
        }
    }

    private void OnCollisionEnter(Collision col)
    {
        if (!col.gameObject.CompareTag("Player"))
        {
            Instantiate(gameObject, data.StartPosition, data.StartRotation); // Create itself at default
            Destroy(gameObject); // Destroy itself
        }
    }

我不再需要计算更新中的跌速。当玩家击中平台时,我只是禁用引力并启用它。

答案 1 :(得分:0)

如果您的对手设置为触发器,则不会触发OnCollisionEnter事件。相反,请将代码放在OnTriggerEnter中,如下所示:

void OnTriggerEnter(Collider col)
{
    if (col.CompareTag("Player")) {
        isFalling = true;
    }
    else
    {
        Instantiate(gameObject, startPosition, startRotation);
        Destroy(gameObject);
    }
}