碰撞后Unity Application.LoadLevel

时间:2014-07-17 00:13:59

标签: c# unity3d 2d game-development

以下Unity 2D C#脚本会在每次运行第三次或第四次时加载ScoreBoard场景,但每次运行时都应加载ScoreBoard场景。大多数情况下,它无法加载场景。目标是销毁任何与具有盒子对撞机的空游戏对象相撞的游戏对象。如果房屋与对撞机发生碰撞,房屋将被摧毁并且ScoreBoard场景会加载。 (大多数时候,它不加载)。任何建议都表示赞赏。

using UnityEngine;
using System.Collections;

public class DestroyObjectsOnGround : MonoBehaviour {

    void OnTriggerEnter2D(Collider2D collisionObject)
    {
        if (collisionObject.gameObject != null)
        {
            if (collisionObject.gameObject.tag == "house")
            {
                print ("house destroyed");
                Destroy (collisionObject.gameObject);

                Application.LoadLevel("ScoreBoard");
            } else {
                Destroy (collisionObject.gameObject);
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

根据你的评论,我猜你是以绕开物理引擎的方式移动All-Destroying-Thing。

如果使用transform.position,则传送对象。旧位置和新位置之间的任何内容都将被忽略。因此,碰撞不会正确触发。

正确的方法是对物体施加力,设定速度或使用方法rigidbody2D.MovePosition()

如果您使用MovePosition(),则应在FixedUpdate()期间使用它。

  

重要的是要了解实际位置更改仅在下一次物理更新期间发生,因此重复调用此方法而不等待下一次物理更新将导致使用最后一次调用。因此,建议在FixedUpdate回调期间调用它。

(来源:manual