我如何重生掉落平台

时间:2019-05-23 00:28:23

标签: c# unity3d social-gaming

经过几次尝试,平台未达到其原始位置,但随后被删除,我不知道如何解决。

public class FallingPlatform : MonoBehaviour
{
    private Rigidbody2D rb;

    // Use this for initialization
    private void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    private void OnCollisionEnter2D(Collision2D col)
    {
        if (col.gameObject.name.Equals("Ellen"))
        {

            Invoke("DropPlatform", 0.5f);
            Destroy(gameObject, 2f);
            InvokeRepeating("DropPlatform", 0.5F);
            respawn(gameObject, 2f);
        }
    }

    private void InvokeRepeating(string v1, float v2)
    {
        throw new NotImplementedException();
    }

    private void respawn(GameObject gameObject, float v)
    {
        throw new NotImplementedException();
    }

    private void DropPlatform()
    {
        rb.isKinematic = false;
    }

1 个答案:

答案 0 :(得分:0)

您正在尝试执行的操作缺少某些上下文。但是,我猜测您正在制作一个游戏,其中有一个玩家在不同的平台上跳跃,当他们碰到它们之后它们掉下来,然后您希望它们重新出现。注意事项: 1)您的respawn函数只是抛出一个异常(因此调用它毫无意义)。 2)一旦“销毁”功能运行,其他任何东西都将无法运行(这可能就是为什么它会在几次后停止工作的原因。

可能有更好的方法来实现您要执行的操作(例如,未将rb.isKinematic设置为false以启用重力)。但是为了在不过多更改代码的情况下回答您的问题,您可以尝试以下代码。它应该使平台在0.5秒后掉落,并使其回到1.5秒后的位置。如果这不是您想要的,请分享有关您要做什么的更多信息。

public class FallingPlatform : MonoBehaviour
{
    private Rigidbody2D rb;
    private Transform originalTransform;

    // Use this for initialization
    private void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    private void OnCollisionEnter2D(Collision2D col)
    {
        if (col.gameObject.name.Equals("Ellen"))
        {

            Invoke("DropPlatform", 0.5f);
            respawn(gameObject, 2f);
        }
    }

    private void InvokeRepeating(string v1, float v2)
    {
        throw new NotImplementedException();
    }

    private void respawn(GameObject gameObject, float v)
    {
        gameobject.transform.position = originalTransform.position
        rb.isKinematic = true;
    }

    private void DropPlatform()
    {
        originalTransform = gameobject.transform;
        rb.isKinematic = false;
    }