Unity3d 统一触发碰撞不工作

Unity3d 统一触发碰撞不工作,unity3d,collision,Unity3d,Collision,我目前正在Unity3D中制作一个简单的比赛游戏。玩家是一辆赛车,与使用航路点在地图上导航的AI比赛。每当运动员越过终点线时,计圈器就会增加一圈。我希望同样的事情也发生在人工智能计数器上,但一旦人工智能越过终点线,一切都不会发生。甚至Debug.Log也没有显示发生了什么。我对这个项目感到不满 下面是用来触发lapcounter的代码 感谢您的帮助 using UnityEngine; using System.Collections; public class StartTrigger :

我目前正在Unity3D中制作一个简单的比赛游戏。玩家是一辆赛车,与使用航路点在地图上导航的AI比赛。每当运动员越过终点线时,计圈器就会增加一圈。我希望同样的事情也发生在人工智能计数器上,但一旦人工智能越过终点线,一切都不会发生。甚至Debug.Log也没有显示发生了什么。我对这个项目感到不满

下面是用来触发lapcounter的代码

感谢您的帮助

using UnityEngine;
using System.Collections;

public class StartTrigger : MonoBehaviour {

    public Light StartFlash;
    public int lapcount=0;
    public int AIlapcount=0;
    public int ctimer=10;
    public int AIctimer=10;
    public float gametime;
    public float timedisp;

    // Use this for initialization
    void Start () {
        StartFlash.intensity =0;
        gametime = 0;
    }

    // Update is called once per frame
    void Update () {
        gametime+=Time.deltaTime;
    }


    void OnTriggerEnter( Collider MyTrigger){
        if ((MyTrigger.gameObject.tag == "Buggy") && (lapcount == 0)) {
            Debug.Log ("Trigger passed");
            lapcount = 1;
            ctimer = 10;
        }
        ctimer -= 2;

        if ((MyTrigger.gameObject.tag == "Buggy") && (lapcount == 1) && (ctimer <= 0)) {
            lapcount = 2;
            ctimer = 10;
        }
        ctimer -= 2;

        if ((MyTrigger.gameObject.tag == "Buggy") && (lapcount == 2) && (ctimer <= 0)) {
            lapcount = 3;
            ctimer = 10;
        }
        if ((MyTrigger.gameObject.tag == "Buggy") && (lapcount == 3) && (ctimer <= 0)) {
            Application.LoadLevel (0);
        }
    }

    void AITriggerEnter( Collider Trigger){
        Debug.Log ("AI Trigger passed");
        if ((Trigger.gameObject.tag == "AIBuggy") && (AIlapcount ==0)) {
            AIlapcount =1;
            AIctimer=10;
        }
        AIctimer-=2;

        if((Trigger.gameObject.tag == "AIBuggy") && (AIlapcount == 1) && (AIctimer <= 0)) {
            AIlapcount =2;
            AIctimer=10;
        }
        AIctimer-=2;

        if((Trigger.gameObject.tag == "AIBuggy") && (AIlapcount == 2) && (AIctimer <= 0)) {
            AIlapcount =3;
            AIctimer=10;
        }
        if((Trigger.gameObject.tag == "AIBuggy") && (AIlapcount == 3) && (AIctimer <= 0)) {
            Application.LoadLevel(0);
        }


    } // end OnTriggerEnter

    void OnGUI(){

        //PlayerCarScript myCar = mPlayer.GetComponent <PlayerCarScript> ();

        GUI.BeginGroup (new Rect (10, 10, 200, 140));

            GUI.Box (new Rect (0, 0, 200, 110), "User Interface");

            GUI.TextField (new Rect (0, 30, 100, 25), "Laps: " + lapcount);
            GUI.TextField (new Rect (0, 55, 100, 25), "Game Time: " + gametime.ToString("f1"));
            GUI.TextField (new Rect (0, 80, 100, 25), "Timer: " + ctimer);

        GUI.EndGroup ();

        GUI.BeginGroup (new Rect (600, 10, 200, 140));

        GUI.Box (new Rect (0, 0, 200, 110), "Opponent Interface");

        GUI.TextField (new Rect (0, 30, 100, 25), "Laps: " + AIlapcount);
        //GUI.TextField (new Rect (0, 55, 100, 25), "Game Time: " + gametime.ToString("f1"));
        GUI.TextField (new Rect (0, 80, 100, 25), "Timer: " + AIctimer);

        GUI.EndGroup ();
    }

    void Flash(){

        StartFlash.intensity = 8 - StartFlash.intensity;

    }
}
使用UnityEngine;
使用系统集合;
公共类StartTrigger:MonoBehavior{
公共照明星光灯;
公共整数lapcount=0;
公共int AIlapcount=0;
公共int ctimer=10;
公共定时器=10;
公众浮标游戏时间;
公共浮动时间显示;
//用于初始化
无效开始(){
StartFlash.intensity=0;
游戏时间=0;
}
//每帧调用一次更新
无效更新(){
gametime+=Time.deltaTime;
}
无效对撞机(对撞机MyTrigger){
如果((MyTrigger.gameObject.tag==“Buggy”)&&(lapcount==0)){
Log(“触发器已传递”);
lapcount=1;
ctimer=10;
}
ctimer-=2;

如果((MyTrigger.gameObject.tag==“Buggy”)&&&(lapcount==1)和(&&&(ctimer我不确定是否会调用
AITriggerEnter

当带有碰撞器的刚体进入碰撞器时,
isTrigger
设置为true,将调用
OnTriggerEnter

不要有两个方法,而是将所有逻辑添加到
OnTriggerEnter
中,或者至少确保从那里调用方法,例如

void OnTriggerEnter(Collider other) {
    bool isPlayer = other.compareTag("Buggy");
    bool isAI = other.compareTag("AIBuggy");
    if (!isPlayer && !isAI) return;
    
    if (isPlayer) {
        lapcount++;
    }
    else if (isPlayer) {
        AIlapcount++;
    }
}

不确定计时器的作用是什么,但这似乎是一个更简单的版本,你想要的是什么

我已经见过无数次了。我需要你提供信息来解决它:碰撞器、刚体和AI代码。触发器中的IsTrigger选项是否选中?对象是否有刚体?IsTrigger被选中,两辆赛车都有刚体。如果你按下我上一篇文章中的“这里”,你就可以得到你自己需要查看的所有文件