Unity3d 统一触发碰撞不工作
我目前正在Unity3D中制作一个简单的比赛游戏。玩家是一辆赛车,与使用航路点在地图上导航的AI比赛。每当运动员越过终点线时,计圈器就会增加一圈。我希望同样的事情也发生在人工智能计数器上,但一旦人工智能越过终点线,一切都不会发生。甚至Debug.Log也没有显示发生了什么。我对这个项目感到不满 下面是用来触发lapcounter的代码 感谢您的帮助Unity3d 统一触发碰撞不工作,unity3d,collision,Unity3d,Collision,我目前正在Unity3D中制作一个简单的比赛游戏。玩家是一辆赛车,与使用航路点在地图上导航的AI比赛。每当运动员越过终点线时,计圈器就会增加一圈。我希望同样的事情也发生在人工智能计数器上,但一旦人工智能越过终点线,一切都不会发生。甚至Debug.Log也没有显示发生了什么。我对这个项目感到不满 下面是用来触发lapcounter的代码 感谢您的帮助 using UnityEngine; using System.Collections; public class StartTrigger :
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被选中,两辆赛车都有刚体。如果你按下我上一篇文章中的“这里”,你就可以得到你自己需要查看的所有文件