OnTriggerEnter2D被多次调用

时间:2015-12-14 06:06:44

标签: unity3d triggers 2d

我是Unity的新手,如果这是一个基本问题,请提前抱歉,我附加了一个变量,每次触发OnTriggerEnter2D时都应加1。然而,它不是添加1,而是不断添加。请告诉我我做错了什么?

这是我称之为的地方

public class MonsterTarget : MonoBehaviour {
 public Resetter Resetting;
 public ScoreCount ScoreHit;
 public float targetHit = 0;


 // Use this for initialization
 void Start () {

 }

 // Update is called once per frame
 void Update () {

 }

 public void OnTriggerEnter2D(Collider2D col)
 {
     targetHit ++;
     Resetting.Reset();

 }

}

这就是它的发展方向

public MonsterTarget monTarget;

 public Text scoreText;
 public Text highScoreText;

 public float scoreCount;
 public float highScoreCount;

 public bool scoreIncreasing;

 // Use this for initialization
 void Start () {
     if(PlayerPrefs.HasKey("HighScore"))
         {
         highScoreCount = PlayerPrefs.GetFloat("HighScore");
     }
 }

 // Update is called once per frame
 void Update () {
     if (scoreIncreasing)
     {
         scoreCount += monTarget.targetHit;//RIGH HERE IS WHERE IM CALLING IT
     }

     if (scoreCount > highScoreCount)
     {
         highScoreCount = scoreCount;
         PlayerPrefs.SetFloat("HighScore", highScoreCount);
     }

     scoreText.text = "Score: " + Mathf.Round(scoreCount);
     highScoreText.text = "High Score: " + Mathf.Round(highScoreCount);

 }

}

1 个答案:

答案 0 :(得分:2)

“脚本系统可以检测何时发生冲突并使用OnCollisionEnter函数启动操作。但是,您也可以使用物理引擎来检测一个碰撞器何时进入另一个碰撞器的空间而不会产生碰撞。配置为碰撞器的碰撞器触发器(使用Is Trigger属性)不像固体对象那样,只允许其他碰撞器通过。当碰撞器进入其空间时,触发器将调用触发器对象脚本上的OnTriggerEnter函数。“

来自http://docs.unity3d.com/Manual/CollidersOverview.html

我认为可能是因为你的对象在触发器空间内,所以它不断被调用。

当对撞机进入其空间时,触发器将调用触发器对象脚本上的OnTriggerEnter函数。

这可能意味着targetHit ++;在您的对象穿过其他对象的碰撞空间时不断被调用。

我建议尝试使用OnCollisionEnter2D(),因为这样你的对象就会发生碰撞而不会相互传递。