OnTriggerStay方法不起作用

时间:2014-07-26 21:19:31

标签: c# triggers unity3d

我在Unity中创建一个游戏,并且对于我的关卡选择,我使用了一个你走来走去的世界,接近一个可以带你到达你想去的关卡的节点。有点像马里奥水平选择。我有一个球员和一个节点在世界上。该节点有两个盒子对撞机,一个用于检测附近的玩家,另一个用于围绕盒子轮廓。较大的对撞机检查了IsTrigger,另一个没有。我试图让节点检测玩家是否在外面区域,但是代码没有工作,我不确定原因。

以下是播放器的代码:

public class Player : MonoBehaviour {

public GameManager manager;
private Vector3 spawn;
public bool usesManager = true;
private bool levelComplete;
public AudioClip[] audioClip;

void Start()
{
    if (usesManager)
    {
        manager = manager.GetComponent<GameManager> ();
    }
    levelComplete = false;
    spawn = transform.position;
}
void Update()
{
    Movement();
}

void Movement()
{
    if (!levelComplete)
    {
        if (Input.GetKey (KeyCode.A)) 
        {
            transform.Rotate(0, Input.GetAxis("Horizontal") * 2.0f, 0);
        }
        if (Input.GetKey (KeyCode.D)) 
        {
            transform.Rotate(0, Input.GetAxis("Horizontal") * 2.0f, 0);
        }
        if (Input.GetKey (KeyCode.S)) 
        {
            transform.Translate (Vector3.forward * 3f * Time.deltaTime);
        }
        if (Input.GetKey (KeyCode.W)) 
        {
            transform.Translate (Vector3.back * 3f * Time.deltaTime);
        }
    }

}

void OnCollisionEnter(Collision other)
{
    if (other.transform.tag == "Enemy")
        transform.position = spawn;
}

void OnTriggerEnter(Collider other) 
{
    //finds friend
    GameObject friend = GameObject.FindGameObjectWithTag("Friend");
    if (other.transform.tag == "Sensor" && (Mathf.Abs ( friend.transform.position.x - transform.position.x) <= 4))
    {
        levelComplete = true;
        PlaySound (1);
        manager.CompleteLevel();
    }
    if (other.transform.tag == "Token")
    {
        if (usesManager)
        {
            manager.tokenCount += 1;
        }
        PlaySound (0);
        Destroy(other.gameObject);
    }
}

void PlaySound(int clip)
{
    audio.clip = audioClip [clip];
    audio.Play ();
}

}

以下是节点的代码:

public class LevelLoader : MonoBehaviour 
{
    public int levelToLoad;

    void OnTiggerStay(Collider other)
    {
        if (other.transform.tag == "Player")
        Debug.Log ("hit");
    }
}

当玩家进入触发器时,控制台中不显示任何内容。任何帮助将非常感激!

2 个答案:

答案 0 :(得分:1)

在你编码器中,你写了OnTiggerStay而不是OnTriggerStay

其中一个碰撞对象附加rigidbody也很重要,否则将不会调用OnTriggerStay事件。

  

请注意,只有在其中一个碰撞器附加了刚体时才会发送触发事件。

您可以阅读有关此here的更多信息。

我还建议不要一直使用触发器保持,并自己跟踪进入/退出。这将为您提供更多控制,并阻止Unity处理您应该真正处理的内容。

答案 1 :(得分:0)

你使用OnTiggerStay而不是OnTriggerStay,这是为什么这不起作用。