【问题标题】:Collider with a boolean带布尔值的碰撞器
【发布时间】:2022-01-17 20:57:50
【问题描述】:

我已经研究这个问题几天了,如果有人能帮助我,我将不胜感激。因此,我正在尝试制作一个简单的统一棋盘游戏,并尝试在玩家停在特定航点时触发事件(例如获得卡片)。我在另一个名为 (Moving) 的类中有一个用于 hasStopped 的布尔值,当点击骰子时它变为 false,当玩家停止移动时变为 true。

现在,我的游戏曾经使用此代码:

public void OnTriggerEnter2D(Collider2D collision)
{ 
    if (hasStopped) 
    { 
        GetCardmethod(); 
    } 
}

但我不确定我更改了什么以使此方法停止工作。我检查了其他方法以查看我的布尔值是否正确更新,但我不确定问题出在哪里。我认为我的对撞机在它改变之前过早地检测到布尔值,但我不知道该怎么做才能完成这项工作。就像我如何让这个游戏只在玩家用骰子降落在特定航路点时才触发事件?谢谢

【问题讨论】:

  • 你确定hasStopped在玩家进入对撞机并调用OnTriggerEnter2D的那一刻就已经是真的了吗?也许您更愿意选择OnTriggerStay2D,当玩家在触发器内时,每个FixedUpdate 都会被调用。然后,如果他在里面停止移动,你想一次调用你的反应(例如,额外的 bool 标志或停用对撞机直到下一回合)
  • 如果hasStopped在另一个类中并且是一个实例变量,你需要引用这个类otherObject.hasStopped的对象。如果是静态变量,则必须通过类名Moving.hasStopped访问。在这两种情况下,它都必须是 internalpublic
  • 请编辑问题以包含minimal reproducible example

标签: c# unity3d collider


【解决方案1】:

如果它们适合您,请检查此解决方案:

  1. 如果你有一个 3d 碰撞器,那么你应该使用 OnTriggerEnter() 而不是 OnTriggerEnter2D()

  2. 如果您的布尔值 h​​asStoped 在另一个 cs 脚本中,那么您应该引用该脚本并从那里访问布尔值。

  3. 您可能还想检查碰撞检测是否连续。

【讨论】:

    猜你喜欢
    • 2019-04-27
    • 2021-10-06
    • 1970-01-01
    • 2017-11-07
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多