【问题标题】:How can i respawn falling platform我怎样才能重生坠落的平台
【发布时间】:2019-05-23 00:28:22
【问题描述】:

经过几次尝试,平台并没有回到原来的位置,但后来它被删除了,我不知道如何修复它。

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

【问题讨论】:

  • 如果你的平台在下降,那你为什么不把GravityScale改成0
  • 为什么要将 isKinematic 设置为 false?
  • 怎么样。我不明白为什么它不这样做。

标签: c# unity3d social-gaming


【解决方案1】:

缺少有关您尝试做的事情的一些上下文。但是,我猜你正在制作一款游戏,让玩家在不同的平台上跳跃,他们在接触到他们后摔倒,然后你希望他们重新出现。需要注意的几点: 1)你的重生函数只是抛出一个异常(所以调用它没有意义)。 2) 一旦 Destroy 函数运行,其他任何东西都不会运行(这可能是它在几次后停止工作的原因。

可能有更好的方法来实现您想要做的事情(例如,无需将 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;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多