处理汽车动画和碰撞

时间:2016-06-23 06:17:22

标签: c# unity3d

我在道路上运行了不同的汽车动画我想制造这样一个智能系统,如果汽车开始从另一辆车开始触发它就会停止。到目前为止,我已经尝试过了。

  1. 添加了四个对撞机(如图1所示),标签名为car,carBack,carLeft,CarRight enter image description here

  2. 汽车左/右包含此代码。将此脚本添加到汽车左,右碰撞器,如果此碰撞器撞到汽车对象,则汽车停止。(并在触发器退出时恢复)

     void OnTriggerEnter(Collider c)
        {
            if (c.tag == "Car")
            {
                Debug.Log("collided with : carsideTriggerScript :" + c.transform + " - object Name to stop : " + gameObject.name);
                c.transform.gameObject.GetComponent<AnimationControlSpeed>().Speed = 0;
                //StartCoroutine(DecreaseSpeedGradually(transform.gameObject.GetComponent<AnimationControlSpeed>()));
            }
        }
    
        void OnTriggerExit(Collider c)
        {
            if (c.tag == "Car")
            {
                Debug.Log("Exi collided with :  carsideTriggerScript:" + c.transform + " - object Name to resume : " + gameObject.name);
                 c.transform.gameObject.GetComponent<AnimationControlSpeed>().Speed = 1;
            }
        }
    
  3. 添加了一个脚本,检查汽车是否开始与carBack对撞机碰撞然后停止(并在触发器退出时恢复。与上面相同的脚本)。

    但是你可以在图2中看到一个场景。

  4. enter image description here

    我可以处理它。似乎一辆汽车碰撞器碰到了carRightCollider,同样的事情发生在另一辆汽车上,这样两辆车都停了下来,再也无法动弹了。      我该如何控制它?因为相同的脚本附加到具有相同OntriggerEnter和逻辑的每个游戏对象。

1 个答案:

答案 0 :(得分:0)

所以,经过多次阅读你的问题,我想我现在明白了。你有两辆车,当它们碰撞时,它们都会停下来。你只想要一辆车停下来,还有一辆车要去。

如果你不关心哪一个先行,那是最简单的。您将需要一个集合作为队列来容纳所有碰撞的汽车。我们称之为恢复驾驶队列&#39;。如果汽车与另一辆汽车相撞,请将其停止,然后将其添加到队列中。然后根据计时器或其他逻辑,你可以逐一从车队中取出下一辆车,如果车停了,就开始行驶。

如果您需要选择一位获胜者&#39;看看谁去了,可能会变得更复杂一些。一个基本的例子可能是紧急车辆,如警察或消防车优先先行,其他车辆需要等待。在这种情况下,您将要为您的每个汽车对象提供某种交通优先权属性,就像他们在碰撞过程中可以滚动的模具,看看他们是否获胜。然后,您可以使用每辆汽车生成的随机数将它们按优先顺序插入您的简历驾驶队列。