Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# OnTiggerStay方法不起作用_C#_Triggers_Unity3d - Fatal编程技术网

C# OnTiggerStay方法不起作用

C# OnTiggerStay方法不起作用,c#,triggers,unity3d,C#,Triggers,Unity3d,我在Unity中创建了一个游戏,对于我的关卡选择,我使用的是一个你在其中走动并接近一个节点的世界,这个节点会将你带到你想要达到的关卡。有点像马里奥级别的选择。我在世界上有一个玩家和一个节点。该节点有两个长方体碰撞器,一个用于检测附近的玩家,另一个仅包围长方体轮廓。较大的对撞机检查了IsTrigger,而另一个没有。我试图让节点检测播放器是否在外部区域,但代码不起作用,我不知道为什么 以下是播放器的代码: public class Player : MonoBehaviour { public

我在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 ();
}

当玩家进入触发器时,控制台中没有显示任何内容。任何帮助都将不胜感激

在您的编码器中,您编写了OnTiggerStay而不是OnTiggerStay。 还有一点很重要,碰撞对象之一附加了刚体,否则将不会调用OnTiggerStay事件

请注意,仅当其中一个碰撞器还连接了刚体时,才会发送触发事件

你可以阅读更多关于这方面的内容。
我还建议不要完全使用触发停留,并且自己跟踪进入/退出。这将给你更多的控制,并阻止Unity处理你真正应该处理的事情

您使用了OnTiggerStay而不是OnTiggerStay,这是为什么不起作用。

在您的代码中,它写的OnTiggerStay是一个打字错误吗?你在其中一个上面加了刚体了吗?那是打字错误。当我重新编写代码时,一定是写错了。我的播放机有一个刚体,而且由于排版错误被修复,它仍然不能工作@JayKazamaOk,我已经修复了打字错误,真不敢相信我在lol之前没有看到,但它仍然不起作用。我知道一个物体需要连接一个刚体,我的玩家有它。我之所以使用OnTiggerStay,是因为我遵循了一个这样做的教程。我如何手动跟踪它@克里斯·韦伯明!我真的不知道我做了什么,但它现在起作用了。谢谢你的帮助@chriswebb在发布答案之前阅读评论:。评论说拼写错误并没有解决问题。它100%解决了问题。这是一个单词拼写错误。
public class LevelLoader : MonoBehaviour 
{
    public int levelToLoad;

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