C# 一旦刚体发生碰撞,脚本将停止运行

C# 一旦刚体发生碰撞,脚本将停止运行,c#,unity3d,C#,Unity3d,我正在一个unity项目中工作,在这个项目中,AI车辆在一系列游戏对象中从一个变换到另一个变换。该程序工作正常,直到刚体与(静态碰撞器和其他刚体/碰撞器对)碰撞为止。在那之后,它只是漂浮,直到阻力阻止它。我怀疑这是由于刚体被用来移动物体的事实,但我原本认为,一旦碰撞结束,这只会抵消碰撞的影响。此外,当刚体被击中时,朝向下一个航路点的旋转也停止 我的代码如下: using System.Collections; using System.Collections.Generic; using Uni

我正在一个unity项目中工作,在这个项目中,AI车辆在一系列游戏对象中从一个变换到另一个变换。该程序工作正常,直到刚体与(静态碰撞器和其他刚体/碰撞器对)碰撞为止。在那之后,它只是漂浮,直到阻力阻止它。我怀疑这是由于刚体被用来移动物体的事实,但我原本认为,一旦碰撞结束,这只会抵消碰撞的影响。此外,当刚体被击中时,朝向下一个航路点的旋转也停止

我的代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class move : MonoBehaviour
{
  public List<GameObject> locations;
  public float RotationSpeed;
  public float moveSpeed = 1000f;
  private int ob = 0;
  private Quaternion _lookRotation;
  private Vector3 _direction;
    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
      _direction = (locations[ob].transform.position - this.transform.position).normalized;
       _lookRotation = Quaternion.LookRotation(_direction);

       this.transform.rotation = Quaternion.Slerp(this.transform.rotation, _lookRotation, Time.deltaTime * RotationSpeed);

       GetComponent<Rigidbody>().velocity = transform.forward * moveSpeed * Time.deltaTime;
  //     print(Vector3.Distance(locations[ob].transform.position, this.transform.position));
       if(Vector3.Distance(locations[ob].transform.position, this.transform.position) < 20f) {
    //     print("it got here");
         if(ob > locations.Count - 2) {
           ob = 0;
    //       print("true");
         } else {
           ob += 1;
      //     print("false");
         }
       }
    }
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共阶级运动:单一行为
{
公布地点名单;
公众浮标轮换速度;
公共浮子移动速度=1000f;
私有int ob=0;
私有四元数旋转;
专用矢量3_方向;
//在第一帧更新之前调用Start
void Start()
{
}
//每帧调用一次更新
无效更新()
{
_方向=(位置[ob].transform.position-this.transform.position)。标准化;
_lookRotation=四元数。lookRotation(_方向);
this.transform.rotation=Quaternion.Slerp(this.transform.rotation,_lookRotation,Time.deltaTime*RotationSpeed);
GetComponent().velocity=transform.forward*moveSpeed*Time.deltaTime;
//打印(Vector3.Distance(位置[ob].transform.position,this.transform.position));
if(向量3.距离(位置[ob].transform.position,this.transform.position)<20f){
//打印(“它到了这里”);
如果(ob>位置。计数-2){
ob=0;
//打印(“真实”);
}否则{
ob+=1;
//印刷品(“假”);
}
}
}
}
你看到问题了吗?如果是,我该如何解决

谢谢大家!


编辑:我粘贴了一个我在程序中输入的意外字符,这破坏了它。由于该问题是在添加之前出现的,并且在删除后仍然存在,因此已将其删除。另外,我确实希望对象反弹,但随后继续移动。

一个简单的提示:不要在Update、FixedUpdate、LateUpdate或在。。。等
只需创建一个全局变量,并在Start或Awake中调用引用。

对于出现此问题的任何人,我深表歉意,但在稍微修改并复制我的项目后,一切都按预期进行。我不知道为什么会发生这种情况,也不知道如何修复它,但我想现在没事了……

Update()
的第二行末尾有一个
+
,不知道它是如何编译的。但是,我不明白为什么这会导致您描述的行为,您是否在任何其他脚本中实现了任何冲突事件?这是我在测试后意外键入的字符(当我再次打开unity时它没有编译)。今天早上再次检查游戏,它仍然有相同的问题。很可能这个线圈本身与问题无关。真的不清楚你想做什么。这是一个物理游戏,你想让物体反弹吗?或者,您是否严格地将碰撞器用作触发器,作为您知道某物在何处的信号?抱歉,不清楚,我确实希望物体反弹,但我希望它们在碰撞后继续尝试其路线。这是一种非常基本的方法(点和走),但我不知道如何在将来解决更复杂系统的问题。但这并不能解决我的问题(我知道我应该创建一个变量,我只是在几分钟内完成了一些工作。)