【问题标题】:How to create a unity event to determine distance between objects, and do something when distance is small enough?如何创建一个统一事件来确定物体之间的距离,并在距离足够小时做一些事情?
【发布时间】:2017-09-14 15:37:31
【问题描述】:

我正在尝试使用 EventManager 和根据事件来计算对象之间的距离,并在足够多的对象接近目标时做一些事情。

我在 YouTube 上观看了视频,并在 Google 上搜索了示例,但我找不到看起来像我想要的东西。当然,我也看了一般事件的解释视频,但我就是不明白。他们都是英语,这不是我的母语,这很难理解。因此,对于任何语法错误也深表歉意。他们经常说得很快。所以请不要认为我很懒,我已经搜索了几个小时但我就是不明白。

我有一个目标对象和几个敌方对象。这个敌人的对象有标签“敌人”。目标物体可以移动。我做了一个协程,所以当目标移动时,敌人跟随,直到0.5的距离。但是从他们到达0.5的距离的那一刻起,敌人就不再移动了。相反,当他们已经到达目标位置时,他们也应该跟随目标。所以为了防止这种情况,我在while 1 > 0 中更改了while(Vector3.Distance(transform.position, target.position) > 0.5f),(所以总是如此)并且我删除了关于“while 循环之后”的代码部分。但这可能不是正确的方法。

所以,简而言之,我想创建一个事件来跟踪敌人何时到达或失去目标位置。当三个敌人在他们的目标位置时,我想让他们变成蓝色。

谁能告诉我如何做到这一点?我现在不明白,但当我了解它的工作原理后,我可以将它用于游戏中的更多活动。

【问题讨论】:

  • 请贴出相关代码
  • 那么,您对事件有困难,还是与while 循环有关?对于事件,使用 UnityEvent 类而不是默认的 c# events + Observable 编程模式,观察变量并在其值超出特定值或范围时执行某些操作。据我所知,Observable 模式应该也可以解决while 循环问题。

标签: unity3d unity5


【解决方案1】:

我认为您可以使用触发对撞机,只需使其比您的目标对象大,然后在 OnTriggetEnter、OnTriggerStay 方法中对敌人做所有您想做的事情

【讨论】:

    【解决方案2】:

    作为另一种技术,您可以使用光线投射。 Raycast 将为您提供比碰撞器更高的性能。

    你可以将你的光线投射定位在你的目标位置,以防你的光线投射击中敌人然后将它们变成蓝色。例如;

    public LayerMaskenemyLayer; bool isTouch = false;

    public bool isTouched(){
            if (Physics.Raycast(transform.position,-Vector3.up,1f,enemyLayer)) {
                isTouch = true;
                return isTouch ;
            }
            return !isTouch ;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多