【问题标题】:Collision not detected by OnTriggerEnterOnTriggerEnter 未检测到碰撞
【发布时间】:2015-03-07 18:11:12
【问题描述】:

所以我正在尝试制作一款关于足球的游戏。在这个程序中,我创建了 2 个名为(在层次结构中)的对象:Ball 和 goal_line_1。在这段代码中,我试图检查球是否与球门线发生碰撞,如果发生碰撞,我会将球返回(Lerp)到中间的点(0,0.3,0)。但不知何故,当我将球拖到球与球门线相撞的位置然后按下播放时,球就停留在那里,不会回到中点。

public var smooth : float;

private var newPosition : Vector3;

function Awake ()
{
    newPosition = transform.position;
}

function OnTriggerEnter (ball : Collider)
{
    var positionA : Vector3 = new Vector3(0, 0.3, 0);

    newPosition = positionA;

    ball.transform.position = Vector3.Lerp(ball.transform.position, newPosition, smooth * Time.deltaTime);
}

【问题讨论】:

    标签: unity3d 2d unityscript


    【解决方案1】:

    那是因为你使用了OnTriggerEnter() 函数。当一个对撞机进入与另一个对撞机的碰撞时调用此函数。通过将球拖入线然后按播放实际上是跳过“触发输入”事件。当涉及到碰撞时,主要有三个事件:TriggerEnter、TriggerStay 和 TriggerExit。

    虽然我不确定,但如果您将函数更改为 OnTriggerStay(),您的函数可能会正常工作。然而,为了更安全的测试方法,我建议你在球上添加一个脚本,这样你就可以用键盘手动移动它,看看OnTriggerEnter() 函数是否有效,因为这样做,你将模拟一个更真实的情况(球被踢/向线移动,而不是“突然存在”在线上)。

    【讨论】:

    • 你能指导我如何编写球脚本吗?抱歉,我是 Unity 的新手:D
    • 首先我要感谢您让我知道如何移动对象。但我似乎即使我已经更改为 OnTriggerEnter() 球仍然没有回到中间点:'(
    • 你确定你使用Lerp()函数正确吗?尝试调试您的代码。您认为您的 Lerp() 函数作为 Vector3 返回什么以及它实际返回什么?与其使用 lerp 更改球的位置并将其分配回其原始变量,不如尝试使用变量将 lerp 结果存储在其中,然后然后将其分配回球位置变量。
    • 但是 lerp 是一个动作,我怎样才能存储它的结果。但是我想我可以尝试一个简单的代码来将球的位置改回中间点,但是你能帮帮我吗请出去?
    【解决方案2】:

    如果您使用的是 2D,则需要将您的 OnTriggerEnter 函数更改为 OnTriggerEnter2D。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-15
      • 1970-01-01
      • 2017-01-07
      • 2015-03-27
      • 2019-07-16
      相关资源
      最近更新 更多