【发布时间】:2017-09-01 04:17:03
【问题描述】:
首先,代码如下:
using UnityEngine;
using System.Collections;
namespace UltimateSurvival
{
public class Radiation : MonoBehaviour
{
public GameObject radiationEffect;
public EntityVitals Vitals { get { return m_Vitals; } }
private EntityVitals m_Vitals;
// Use this for initialization
void Start() {
InvokeRepeating ("OnTriggerEnter", 1.5f, 3.5f);
}
// Update is called once per frame
void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Player")
{
radiationEffect.SetActive(true);
//yield return new WaitForSeconds(5);
var entity = other.GetComponent<EntityEventHandler>();
if(entity)
{
var healthEventData = new HealthEventData(-Random.Range(7.0f, 23.0f));
entity.ChangeHealth.Try(healthEventData);
}
//yield return new WaitForSeconds(5);
}
}
void OnTriggerExit(Collider other)
{
if (other.gameObject.tag == "Player")
{
radiationEffect.SetActive(false);
}
}
}
}
我想要做的是我希望这个脚本每 3.5 秒执行一次 OnTriggerEnter。如您所见,我正在使用 InvokeRepeating 但它似乎不起作用。我也尝试在 IEnumerator OntriggerEnter 上更改 void OnTriggerEnter,然后 yield return new WaitForSeconds(5); - 它也不起作用。我真的很困惑 D:请帮忙!
【问题讨论】:
-
OnTriggerEnter 似乎不是您代码上的 IENumerator。看看answers.unity3d.com/questions/350721/…
-
@iamIcarus 阅读了我在脚本之后所说的话。 > 我也尝试在 IENumerator OntriggerEnter 上更改 void OnTriggerEnter,然后 yield return new WaitForSeconds(5); - 它也没有工作。
-
Unity 消息(Start、Update、OnTriggerEnter、OnDestroy ......)不应手动调用。这些消息由 Unity 本身调用。在您的情况下,您自己调用它没有意义,因为您不知道刚体何时会进入您的触发器。
-
确实如此。进一步解释@Hellium 在说什么;您正在尝试运行使用碰撞触发器 (
Collider other) 的方法 (OnTriggerEnter)。您没有在 InvokeRepeating 中指定任何Collider other。请解释您要解决的问题,以便避免XY problem。你永远不想手动运行 OnTriggerEnter,所以如果你这样做,你就是在试图以一种糟糕的方式解决问题。 -
如果角色在辐射区域内,您似乎尝试解决耗尽HP的问题。我会告诉你如何做到这一点!