【问题标题】:Unity JavaScript OnCollisionEnter with 2D gameObjectUnity JavaScript OnCollisionEnter 与 2D 游戏对象
【发布时间】:2014-01-05 02:00:36
【问题描述】:

当我的玩家通过内置的 OnCollisionEnter 函数接触到一个游戏对象(在我的例子中是一个 2d 球)时,我试图破坏它。我的脚本仅附加到播放器。玩家和球(电池)都有二维盒对撞机和刚体。也许它们是二维对撞机而不是常规对撞机这一事实与问题有关?啊!是的,我差点忘了提这个问题;它不工作。它既不会破坏,也不会打印“命中”……哦,是的,我确实将球命名为“电池”。非常感谢,我将非常感谢一些帮助!

UnityScript 代码:

function OnCollisionEnter(batt : Collision)
{
    if(batt.collider.name == "battery")
    {
        Destroy(batt.gameObject);
        Debug.Log("Hit");
    }

}

【问题讨论】:

    标签: function unity3d unityscript


    【解决方案1】:

    如果您使用统一的 2d 工具集,而不是 OnCollisionEnter,您使用 OnCollisionEnter2D,并且在变量内部,而不是 batt: Collision,您需要将其更改为 batt: Collision2D,希望这会有所帮助:),另外,您说您的两个对象都有 2d 盒碰撞器和刚体,确保它是 2d 刚体而不是 3d 刚体(默认)

    【讨论】:

    • 现在可以完美运行了。我知道这与会议的 2D 模式有关
    【解决方案2】:

    嗯,在 Unity 中调试碰撞很困难,在不了解整个项目的情况下更难。但有几点:

    1) 确保将刚体附加到要接收事件的游戏对象

    2) 对于您的代码,我不太确定(因为我主要使用 C#),但基本上:

    OnCollisionEnter( Collision batt ){
        if ( batt.gameObject.name == "battery" ){
            //Do what you want it to do
        }
    }
    

    我认为基本上你可能没有使用正确的名称。如果这不起作用,请尝试在 OnCollisionEnter 上放置一个调试器断点以查看它是否被调用。

    【讨论】:

      猜你喜欢
      • 2016-06-22
      • 1970-01-01
      • 2017-12-13
      • 1970-01-01
      • 2016-02-05
      • 2017-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多