下面的Unity 2D c#脚本大约每运行第三次或第四次加载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);
}
}
}
}
根据你的评论,我猜你是在以一种绕过物理引擎的方式移动毁灭一切的东西。
如果你使用transform.position
,你正在传送对象。旧位置和新位置之间的任何东西都将被忽略。因此,碰撞将不能正确触发。
正确的方法是对物体施加一个力,设定一个速度或使用rigidbody2D.MovePosition()
方法。
如果你使用MovePosition()
,你应该在FixedUpdate()
时使用它。
重要的是要理解实际的位置变化只会在下一次物理更新期间发生,因此重复调用此方法而不等待下一次物理更新将导致使用最后一次调用。因此,建议在fixeduupdate回调期间调用它。
(来源:手动)