【问题标题】:Handle car animation and collision处理汽车动画和碰撞
【发布时间】:2016-07-28 22:40:21
【问题描述】:

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

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

  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 中看到。

我可以处理它。似乎一辆汽车对撞机撞到了 carRightCollider 并且另一辆汽车发生了同样的事情,因此两辆汽车都停止了并且无法再次移动。 我该如何控制它?因为相同的脚本使用相同的 OntriggerEnter 和逻辑附加到每个游戏对象。

【问题讨论】:

  • 看起来你需要一个球体或胶囊对撞机
  • 为什么?是什么原因
  • 你的碰撞器之间有间隙,要么创建一个大碰撞器,要么确保现有碰撞器重叠

标签: c# unity3d


【解决方案1】:

所以,在再读了几次你的问题之后,我想我现在明白了。你有两辆车,当它们相撞时,它们都停下来。你只想要一辆车停下,一辆车走。

如果您不在乎哪个先走,那是最简单的。您将需要一个集合来充当队列来容纳所有碰撞的汽车。让我们称之为“恢复驾驶队列”。如果一辆车与另一辆车相撞,请将其停下,然后将其添加到队列中。然后根据计时器或其他逻辑,您可以从队列中逐一取下一辆车,如果车停了,就启动它。

如果您需要选择一个“获胜者”来看看谁会出局,那可能会变得更复杂一些。一个基本的例子可能是像警察或消防车这样的紧急车辆优先走,而其他车辆需要等待。在这种情况下,您需要为每个汽车对象赋予某种交通优先属性,这就像一个骰子,它们可以在碰撞中滚动以查看它们是否获胜。然后,您可以使用每辆车生成的随机数将它们按优先顺序插入您的恢复驾驶队列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 2020-03-30
    • 2022-10-25
    • 1970-01-01
    相关资源
    最近更新 更多